实验六、序列的FFT及频域分辨率

一、实验目的

  1. 充分熟悉FFT函数的使用;
  2. 熟悉序列的快速傅里叶变换的计算;
  3. 能够画出结果的图形。

二、实验步骤
4. 用help查找FFT函数的使用情况;
5. 编辑并生成函数sigfft .m(带长度的卷积和);
6. 运行该函数, 分析四个图的分辨率;
7. 改变N=8, 分析四个图的分辨率, 第四图代表频谱包络,说明在N 较小时, 补零能否提高分辨率?N至少应该是多少, 才能通过补零提高有效的分辨率;
8. 改变N=32, 128和2048分析结果。

三、实验结果
9. 用help查找FFT函数的使用情况:
在这里插入图片描述
10. 编辑并生成函数sigfft .m(带长度的卷积和):
clear;
% 计算长度为N的原始信号的DTFT
f1=2.67;f2=3.75;f3=6.75;fs=20;w=2pi/fs;
N=16;
x=sin(w
f1*(0:N-1))+sin(wf2(0:N-1)+pi/2)+sin(wf3(0:N-1));
% f=0:fs/N:fs/2-1/N;
X=fft(x);
X=abs(X);
f=fs/N*(0:N/2-1);
subplot(221)
stem (f,X(1:N/2));grid on;
xlabel(‘Hz’)

%在数据末补N个零
x(N:2N-1)=0;
X=fft(x); X=abs(X);
f=fs
(0:N-1)/(2*N);
subplot(222)
stem(f,X(1:N),’.’);grid on;
xlabel(‘Hz’)

%在数据末补7N个零
x(N:8
N-1)=0;
X=fft(x); X=abs(X);
f=fs*(0:4N-1)/(8N);
subplot(223)
stem(f,X(1:4*N),’.’);grid on;
xlabel(‘Hz’)

%在数据末补29N个零
x(N:30
N-1)=0;
X=fft(x); X=abs(X);
f=fs*(0:15N-1)/(30N);
subplot(224)
plot(f,X(1:15*N));grid on;
xlabel(‘Hz’)

  1. 运行该函数, 分析四个图的分辨率:
    在这里插入图片描述
    分析:由图可以看出第4个图的分辨率最高,曲线最光滑,点取的最多,图形相对最准确。而第一个图分辨率最低,间隔最大,点取得很少,所得到的的图形最不准确,第二个图形的分辨率是第一个的两倍,但是取得间隔还是很大,图形也很粗糙。第三个图形分辨率是第一个的八倍,取得间隔已经很小,图形也比较的准确,但还是不够精准。
  2. 改变N=8:
    在这里插入图片描述
    分析:当N=8,还是分辨率依次增大,但是与N=16相比较时,还是会发现这些图形都失真了,损失了一些数据,没有那么的准确。当N比较小时,不能够提高分辨率,因为数据丢失了。N至少应该满足Fs/N小于样本函数频率之间的间隔(Fs为抽样频率)。
  3. 改变N=32, 128和2048分析结果:
    N=32:
    在这里插入图片描述
    N=128:
    在这里插入图片描述
    N=2048:
    在这里插入图片描述
    分析:可以发现N的值越大,补的零越多,则图形的分辨率越高,间隔就越小,数据就保留的比较完整,所得到的图形就更加准确,光滑完整,但N的值也不应该过大,这样就需要放大去看图形的分辨率。
    四、结论与体会
    间隔fs/N越小,图形的分辨率就越高,所丢失的数据就越少,这是因为在这间隔中所得到的的数据更多。通过这次实验可以了解到N取的越大分辨率越高,在后面补更多的零,也可以提高分辨率,但是补零得到的不是我们想要的频谱。
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中使用FFT做频谱分析时频率分辨率问题-频率分辨率.rar MATLAB中使用FFT做频谱分析时频率分辨率问题 最近做FFT时,使用的采样频率和信号长度的取舍一直没有搞清楚,后来在论坛上发了一个贴子《总结一下使用FFT和维纳-辛钦定理求解PSD问题》(讨论见https://www.ilovematlab.cn/thread-27150-1-1.html,特别感谢会员songzy41,他的问题给了我很大启示),跟帖中给了我不少启示,并且让我对“频率分辨率”这个概念有了更深入的理解。再次一并感谢论坛的高手们。 频率分辨率,顾名思义,就是将信号中两个靠的很近的频谱分开的能力。 信号x长度为Ts,通过傅氏变换后得到X,其频率分辨率为Δf=1/T(Hz),若经过采样后,假设采样频率为fs=1/Ts,而进行频谱分析时要将这个无穷长的序列使用窗函数截断处理,假设使用矩形窗,我们知道,矩形窗的频谱为sinc函数,主瓣宽度可以定义为2*pi/M,M为窗宽,那么,时域相乘相当于频域卷积,频域内,这一窗函数能够分辨出的最近频率肯定不可能小于2*pi/M了,也就是如果数据长度不能满足2*pi/M<|w2-w1|(w2,w1为两个靠的很近的频率),那么在频谱分析时,频谱上将不能分辨出这两个谱,由于w2-w1=2*pi/fs=2*pi*Δf/fs也就是2*pi/M<2*piΔf/fs,得到Δf的限制为fs/M,这就是窗函数宽度的最小选择,就是说,根据Shannon采样定理确定了采样频率后,要根据靠的最近的谱峰来确定最小的采样长度,这样,所作出来的频谱才能分辨出那两个谱峰,也就是拥有了相应的频率分辨率。 几个例子: 考虑双正弦信号:x = sin sin;根据Shannon采样定理,采样频率要大于截止频率的两倍,这里选采样频率为80,那么,我们可以看到,Δf为0.2Hz,那么,最小的数据长度为0.2/80=400,但是对正弦信号的频谱分析经验告诉我们,在截断时截断时的数据要包含整周期,并且后面不宜补零以避免频谱泄露(这一点见胡广书《数字信号处理导论》,清华大学出版社),那么,我们要选择至少980个点,才能保含到一个整周期,另外,FFT的经验告诉我们作分析时最好选择2的整数次幂,我们选择靠的最近的1024点。分析结束。 [CODE] Fs = 80; n = 0:1/Fs:1023*1/Fs; x = sin sin; N = length; figure; X = fftshift); plot*Fs/N,abs*2/N); grid on; axis; 这是按照我们的分析进行的编程和图形 zheng.jpg 可以看出这两个谱峰很好的被分辨开来,9.8Hz不在谱线上,所以幅值不为1,以下是一些对比: [CODE] Fs = 80; n = 0:1/Fs:1023*1/Fs; x = sin sin; N = length; X = fftshift); figure; subplot plot*Fs/N,abs*2/N); grid on; axis; title; n = 0:1/Fs:979*1/Fs; x = sin sin; N = length; X = fftshift); subplot plot*Fs/N,abs*2/N); grid on; axis; title; n = 0:1/Fs:399*1/Fs; x = sin sin; N = length; X = fftshift); figure; subplot plot*Fs/N,abs*2/N); grid on; axis; title; Fs = 20; n = 0:1/Fs:1024*1/Fs; x = sin sin; N = length; X = fftshift); subplot plot*Fs/N,abs*2/N); grid on; axis; title; 结果如下: 1024.jpg 400.jpg 这是我在做FFT以及论坛中的问题时所得到的一点启发,不当之处还请大家指正。OO~ 频率分辨率.rar 为了方便大家,我将doc版报告和m文件一起上传,和帖子内容一样。OO~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值