adc simulation
录入:edatop.com 阅读:
我做了个10bit sar adc 在做动态参数仿真时,得到的ENOB竟然大于10了!哪位大牛能帮看一下呀?
simulation过程如下:采样Fclk=25M,信号Fsignal=(25*32/2048)MHZ
做tran仿真,取结果中的2048个点,转换成10进制,在matlab中做fft(加hanning window),测得SNR=73.6dB,SINAD=62.5dB,ENOB=10.09
matlab代码主要如下:
Dout=d‘.*hanning(numpt)
%d为转换的十进制数据,numpt为2048个点
Dout_spect=fft(Doutw);
spectp=(abs(Dout_spect)).*(abs(Dout_spect));
fin=find(spectp(1:numpt/2)==maxdb);
nb=3;
signalbins=fin+[-(nb-1)/2nb-1)/2];
ps=sum(spectp(signalbins);
sinad=10*log10(ps/(sum(spectp(1:numpt/2))-ps));
ENOB=(sinad-1.76)/6.02;
simulation过程如下:采样Fclk=25M,信号Fsignal=(25*32/2048)MHZ
做tran仿真,取结果中的2048个点,转换成10进制,在matlab中做fft(加hanning window),测得SNR=73.6dB,SINAD=62.5dB,ENOB=10.09
matlab代码主要如下:
Dout=d‘.*hanning(numpt)
%d为转换的十进制数据,numpt为2048个点
Dout_spect=fft(Doutw);
spectp=(abs(Dout_spect)).*(abs(Dout_spect));
fin=find(spectp(1:numpt/2)==maxdb);
nb=3;
signalbins=fin+[-(nb-1)/2nb-1)/2];
ps=sum(spectp(signalbins);
sinad=10*log10(ps/(sum(spectp(1:numpt/2))-ps));
ENOB=(sinad-1.76)/6.02;
冒号变成表情了呢!
Fsignal=(25*32/2048)MHz不合适吧?整数个周期为什么还要加窗呢?
输入信号的幅值是多少啊
你多做几次实验试试,我记得理想的ADC10bit应该是10.00几的精度,你的可能和这个又一定关系
谢谢大牛的回复。但是请教一下为啥整数周期不需要加窗?或者有什么资料可以推荐的吗?最好中文的。呵呵。另外我试了不加窗,ENOB结果比加窗还大。
谢谢大牛的回复,我加的是2.99V的信号,满量程是3V。
谢谢大牛的回复。但是我认为这和做几次没有关系。另外理想的10bit ADC为什么能超过10位,不应该是正好10位的?
我也是新手,随便说说
但是我们实验室adc fft输入频率和采样频率要是一个质数比,不加窗口函数,10bit的ADC enob仿真有出现9.9bit的情况,出现10bit以上一般都是因为多用了两位量化。
还有10.09bit也不是不可能啊,dft计算函数本身就不是非常准确,有点误差可以接受吧
我会建议做同样的31MHz的采样频率,而不是32兆赫
谢谢你的回复。我的采样频率是25MHZ。你的意思是我用接近12.5MHZ的输入频率吗?只是看资料上写的采样频率除以采样点数,乘以一个倍数这样能防止信号泄露,具体原理不知道。
申明:网友回复良莠不齐,仅供参考。如需专业解答,请学习本站推出的微波射频专业培训课程。