首页 > 微波/射频 > RFIC设计学习交流 > SDM 加Dither求教

SDM 加Dither求教

录入:edatop.com    阅读:
在一个Mash 1-1-1结构上加dither,在低三bit加,好像没有看出spur的减小,蓝色为未加dither,红色为加dither,不知道哪里不对,求指教。[attach]593175[/attach][attach]593174[/attach]


clear
fs=26e6;  % sample clock
NumberSamples=2^12;
BusSize=28; %bits
Fraction=0.61; % usable 0 to 1
FractionInternal=2^BusSize*Fraction;
AccumulatorBits=28 ; %bits
AccumulatorSize=2^AccumulatorBits;
% adither=2^3/(2^AccumulatorBits);
% dither_array=FractionInternal*adither*randn(1,NumberSamples);
dither_array=zeros(1,NumberSamples);
C1(1:NumberSamples)=0;%Carry out of the first accumulator
C2(1:NumberSamples)=0;%Carry out of the 2nd accumulator
C3(1:NumberSamples)=0;%Carry out of the 3rd accumulator
U1(1:NumberSamples)=0;%output of the 1st accum
U2(1:NumberSamples)=0;%output of the 2nd accum
U3(1:NumberSamples)=0;%output of the 3rd accum
for index=2:NumberSamples
    U1(index)=FractionInternal+dither_array(index)+U1(index-1);  % adder model
    U2(index)=U1(index-1)+U2(index-1);
    U3(index)=U2(index-1)+U3(index-1);
    if U1(index)>AccumulatorSize
        C1(index)=1;
        U1(index)=U1(index)-AccumulatorSize;
    end
    if U2(index)>AccumulatorSize
        C2(index)=1;
        U2(index)=U2(index)-AccumulatorSize;
    end
    if U3(index)>AccumulatorSize
        C3(index)=1;
        U3(index)=U3(index)-AccumulatorSize;
    end
    Y1(index)=C2(index)+C3(index)-C3(index-1);% feedback from the 2nd & 3rd stage
    Yout(index)=C1(index)+Y1(index)-Y1(index-1);% output to the divider
end
MeanFrac=mean(Yout);
fprintf('\nMeanFracMASH= %1.4f\n',MeanFrac);
x_legend=fs/NumberSamples*linspace(0,NumberSamples-1,NumberSamples);
Yout_sp=20*log10(abs(fft(Yout)));
% plot(20*log10(abs(fft(Yout))));
semilogx(x_legend(1:NumberSamples/2),Yout_sp(1:NumberSamples/2),'b');

呵呵,你把你的输入写成0.5,不加dither试试咯!


非常感谢fuyibin的指教,之前也考虑在特殊情况下看看,可惜没搞清楚fractional spur在哪?[attach]593301[/attach]
上图是输入0.5时,红色为在LSB上加dither,蓝色为在MSB上加dither   
从这个图可以看出来如果在MSB上加dither的话fractional spur确实被打散了,通过时域看就更明显了,但是对应的是噪底抬升,这也是合理的。
[attach]593302[/attach]
上图是输入0.6时分别在MSB和LSB上加dither的结果
但是发现在MSB上并不能完全消掉fractional spur。
所以我的问题是:
1. 在LSB上加dither只能减小fractional spur,我们一般是在低LSB上加是否够用呢,比如在fractional pll里?
2. 0.6输入下MSB也不能完全消除,是否意味着对于任意输入而言,spur不能完全消除,只能减小,(0.5较为特殊)?还是说输入信号随机性不够亦或数据点数不足所致?
还请多多指教

看不到你发的图片,不过也可以猜到是什么
其实加dither是为了打断某些输入pattern在DSM 里的循环
由于对于数字设计是2进制的运算,在0.5,0.25,0.75,0.125,0.375,0.625等等输入上
二进制运算是由固定循环的,就是输出分频系数周期性的循环,0.5循环最短,可能每4个就循环一次0
会有很多这样输入值会让输出循环
如果输出pattern是循环的,那么就说明能量集中在某几个频点,就是spur
dither加入就是为了打断这些循环,其实只要加在最低位1bit就可以了,比如20bit的最低位
这一位的dither会累积在DSM的积分器,影响整数位的进位

0.5输入

0.5输入局部放大


再次感谢,不好意思上图不是很熟,那为什么我加了8bit的 dither,0.6的spur只是减小而没有完全消失,这个正常么?

0.6输入

0.6输入局部放大

不会消失的,只会回到附近的平均值上,我认为目前的结果是正确的


谢谢热情回答,, 只不过好像我这里只在LSB上加有点困难,较周围的噪底还是高不少!



用simulink做吧,没那么复杂。

还有个方法就是看看不同的initial state。
顺便mark下,回头看



   你好,我想请教你几个SDM PLL的问题。


默默地看着上面两楼,我觉得我们中华不愧是礼仪之邦,13楼谦虚有礼,14楼乐于助人,满满都是正能量~

申明:网友回复良莠不齐,仅供参考。如需专业解答,请学习本站推出的微波射频专业培训课程

上一篇:关于零阈值电压MOS管
下一篇:折叠共源共栅放大器如何增大GBW

射频和天线工程师培训课程详情>>

  网站地图