在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5743|回复: 5

[求助] MATLAB ADC 频谱分析问题

[复制链接]
发表于 2015-1-13 21:49:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
一段分析ADC频谱的MATLAB程序,fft输出很奇怪,出现了-inf,请大家看看有什么问题。多谢!
clear;

afs = 1;   % 1V full scale
fs = 1e6;    %  1MHz sample rate
N = 2^10;   % number of samples
cyc = 67;
fx = fs*cyc/N;

t = linspace(0,(N-1)/fs,N);

y = afs*sin(2*pi*fx*t);

B = 10;                        % internal ADC resolution
delta = afs/2^B;
y = cos(2*pi*fx/fs*[0:N-1]);
%quantize samples to delta=1LSB
y=round(y/delta)*delta;
s = 20*log10(abs(fft(y)/N/afs*2));
s = s(1:N/2);  % drop redundant half

f = (0:length(s)-1) / N;  % frequency vector (normalized to fs)

figure(1);
plot(f,s);
grid on;
发表于 2015-1-14 15:02:51 | 显示全部楼层
其实就是计算fft的时候,matlab对数据存储的问题,你可以比较一下下面s0(理想正弦),s1(ADC 输出),sd(量化误差)。理论上s1=s0+sd,实际计算中s1有些数据丢失了。
clear;
afs = 1;   % 1V full scale
fs = 1e6;    %  1MHz sample rate
N = 2^10;   % number of samples
cyc = 67;
fx = fs*cyc/N;
t = linspace(0,(N-1)/fs,N);
B = 10;                        % internal ADC resolution
delta = afs/2^B;
y0 = cos(2*pi*fx/fs*[0:N-1]);
y1 =round(y0/delta)*delta;

s0 = 20*log10(abs(fft(y0)/N/afs*2));
s1 = 20*log10(abs(fft(y1)/N/afs*2));
sd = 20*log10(abs(fft(y1-y0)/N/afs*2));

plot([s, s1, sd])
发表于 2015-1-14 15:36:24 | 显示全部楼层
回复 1# needforspeed


   顶了!下来看看。
 楼主| 发表于 2015-1-16 09:43:06 | 显示全部楼层
本帖最后由 needforspeed 于 2015-1-16 09:49 编辑

回复 2# victor0o0


    我理解你说的,量化之后有一定的误差是正常的。但这是ADC设计和分析的基本问题吧,如何对量化之后的信号做比较准确的频谱分析?
发表于 2015-1-16 09:55:00 | 显示全部楼层




   1. 做出的fft结果只是小量被忽略了,不会影响你计算SNR,SFDR之类。   2. 这种结果实际不会出现,随便加点非理想因素,都不会出现fft里有0,比如在输入信号里叠加一点随机噪声y=y+randn(size(y))*2^-16
   3. 如果你非得看那些小量,先把信号成分去了,再做fft
发表于 2023-6-21 16:02:38 | 显示全部楼层
谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 12:30 , Processed in 0.032591 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表