热度 1| ||
之前的文章中写过sdm的dither有什么用,由于MASH 结构的SDM的序列是一个周期序列,这个会导致输出存在spur。这个时候,通常会使用dither打破这种周期,虽然有效,但dither的引入也会有一些坏处,会增加一些底噪。那还有什么其他方法去减小这个spur呢?
当然有,既然是SDM的周期导致的spur,那么我们是不是可以去通过一些设计,将SDM的序列变长,周期变长,谱线变得更密集,spur自然就下降了。
问题自然来了:
首先,我们从一个最简单的一阶SDM分析,这里的一阶SDM指的是传统MASH的第一级。
用分子和分母表示SDM的小数输入,从1/10到9/10,这九个小数的周期是多少呢?
| 分数 | 周期长度 | 最简分数 |
|---|---|---|
| 1⁄10 | 10 | 1⁄10 |
| 2⁄10 | 5 | 1⁄5 |
| 3⁄10 | 10 | 3⁄10 |
| 4⁄10 | 5 | 2⁄5 |
| 5⁄10 | 2 | 1⁄2 |
| 6⁄10 | 5 | 3⁄5 |
| 7⁄10 | 10 | 7⁄10 |
| 8⁄10 | 5 | 4⁄5 |
| 9⁄10 | 10 | 9⁄10 |
从中发现了什么,一阶SDM的周期长度,是输入的分数,约分后产生的最简分数,的分母值。
这个结论有什么用呢?
看起来好像并没有什么用,无论分母变为什么,1/4最终化简都会变为1/4,周期一直是4,但是,在系统允许的误差范围内呢?
假设系统的误差范围在0.0001内,那么意味着我可以选择[0.2499,0.2501]内任意小数,这个时候,我选择一个2499/10000,这是一个最简分数,但是他的周期变为了10000,远远大于2。
可以看一下simulink的仿真结果,采样频率是1kHz,2499/10000的spur强度会比1/4更低一些,虽然不是很多,但也下降了1.2dBc,不算特别显著的下降,聊胜于无。

这里得出我们第一个结论,SDM的周期长度与输入有关系,分数化简成最简分数后,一阶SDM的周期是分母。
一阶的SDM分析完,自然会想到二阶的SDM有什么不一样,那二阶的SDM的序列周期跟什么有关?这里只分析MASH结构的二阶SDM,如果不清楚MASH结构怎么来的,欢迎看我的旧文为什么mash 结构的sdm能解决高阶sdm的稳定性问题?。
在MASH SDM结构中,第二级的输入是第一级产生的量化噪声,也就是说,输入不是一个固定值,而是一个有周期的序列。
我们还是以分子分母为例,假设第一级输入的小数是2/10,那么第一级的量化噪声是(2/10,4/10,6/10,8/10,0)循环的序列。也就是第二级的输入是这样(2/10,4/10,6/10,8/10,0)周期为2的序列。
这个如何分析呢,其实我们可以把周期序列(2/10,4/10,6/10,8/10,0)看成一个不变的常数,这个常数是(2/10+4⁄10+6⁄10+8⁄10+0)=20/10,刚好能被分母整除,只需要一组这个周期序列就能完成循环,所以这组输入序列的周期是1*5=5,其中1指的就是多少组,5指的是这组序列有多少个元素。
下表给出1/10到9/10的二阶SDM周期数,其中第一级周期表示的是MASH第一级的周期;量化误差序列表示的是第一级剩余值,省略了分母,分母为10,举个例子,其中的1,表示量化误差为1/10;第二级周期表示的是MASH结构的第二级的周期。
| 分数 | 第一级周期 | 量化误差序列 | 第二级周期 | 最简分数 |
|---|---|---|---|---|
| 1⁄10 | 10 | 1,2,3,4,5,6,7,8,9,0 | 20 | 1⁄10 |
| 2⁄10 | 5 | 2,4,6,8,0 | 5 | 1⁄5 |
| 3⁄10 | 10 | 3,6,9,2,5,8,1,4,7,0 | 20 | 3⁄10 |
| 4⁄10 | 5 | 4,8,2,6,0 | 5 | 2⁄5 |
| 5⁄10 | 2 | 5,0 | 4 | 1⁄2 |
| 6⁄10 | 5 | 6,2,8,4,0 | 5 | 3⁄5 |
| 7⁄10 | 10 | 7,4,1,8,5,2,9,6,3,0 | 20 | 7⁄10 |
| 8⁄10 | 5 | 8,6,4,2,0 | 5 | 4⁄5 |
| 9⁄10 | 10 | 9,8,7,6,5,4,3,2,1,0 | 20 | 9⁄10 |
从中得出什么结论
二阶的MASH SDM第二级的周期是,
把输入输出化为最简分数k/d(即gcd(k,d)=1,其中gdc(k,d)表示k和d的最大公约数)
如果d为奇数,第二阶输出的周期=d
如果d为偶数,第二阶输出的周期=2d
证明如下:
假设化简后输入为k/d (gcd(k,d)=1)。
第一阶的量化误差序列可以写成

第二阶的输出序列为

我们要找S[n]的最小周期T,实际上就是找最小的T,能保证S[n]是d的整数倍,用式子表示就是

由于k和d最小公约数是1,可以把k给消掉,那么式子①

另外,由于a[n]的周期是d,因此求的这个最小周期T一定是d的倍数,因此T还需要满足

因此,T=d,2d,3d….
当d为偶数时,T=2d满足式子①
当d为奇数时,(T+1)/2会抵消掉2,因此T=d即可满足式子①
因此结论为:
把输入输出化为最简分数k/d(即gcd(k,d)=1,其中gdc(k,d)表示k和d的最大公约数)
如果d为奇数,第二阶输出的周期=d
如果d为偶数,第二阶输出的周期=2d
那这个结论有什么用呢?
既然偶数的周期会更大,我们在第一阶的时候,选择了4999/10000,这个结果是比5000/10001好的。

还有什么呢,我们发现第二阶的输出周期主要是跟量化误差序列的求和相关,那我们是不是对求和做一些修改呢?
第一个方法是给第一级增加一个初始值,那么求最小周期的式子就会变成

这个式子对于最简分数来看,意义一样,但是,对于非最简分数,有可能会增加周期长度
举个例子,输入2/10,初始值为0的话,第二阶周期为5,如果初始值为1的话,第二阶周期为10。
也就是说,当有初始值的时候,增大分母其实是有意义的。
附:推导过程如下:
第一级增加了初始值后,量化误差序列变为

第二级的输出为

与未加初始值的推导一样,找S[n]的最小周期T,实际上就是找最小的T,能保证S[n]是d的整数倍,因此

同时需要满足

增加初始值导致的误差
但是,增加初始值其实是稍微改变了一些分频比,比如,原本分频是0.2,未加初始值时,k个0.2的平均值还是0.2;但是,当你加了一个初始值0.1后,k个0.2的平均值为0.2+0.1/k,只是说,当你的k足够大的时候,这个误差会非常小。而在PLL中的环路分频器时,k趋向于无穷大,所以这个误差会趋近于0。这个时候,误差也就不是什么大问题了。
可以看一下simulink的仿真结果,采样频率是1kHz,加了初始值1的分频2000/10000,相比于没有加初始值的分频,下降了大概2.5dBc。

文献1中,修改了原本的结构,增加了一个反馈回路,如下图,第一个是原本的SDM结构,第二个是修改后的结构

这样的修改,让其在一阶的时候就不是一个固定的数累加,因此周期序列会很长。相比有dither的MASH结构,这个结构在硬件实现层面与MASH相当,但这个结构有一个优点是底噪会更好,缺点是实现更复杂了。
那这样修改的原理是什么?反馈回路的系数应该如何抉择?先做个预告,将在下篇文章拆解。
①TCAS Ⅰ 2007.Maximum Sequence Length MASH Digital Delta-Sigma Modulators
/2