一、实验目的
- 充分熟悉FFT函数的使用;
- 熟悉序列的快速傅里叶变换的计算;
- 能够画出结果的图形。
二、实验步骤
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(wf1*(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:8N-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:30N-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’)
- 运行该函数, 分析四个图的分辨率:
分析:由图可以看出第4个图的分辨率最高,曲线最光滑,点取的最多,图形相对最准确。而第一个图分辨率最低,间隔最大,点取得很少,所得到的的图形最不准确,第二个图形的分辨率是第一个的两倍,但是取得间隔还是很大,图形也很粗糙。第三个图形分辨率是第一个的八倍,取得间隔已经很小,图形也比较的准确,但还是不够精准。 - 改变N=8:
分析:当N=8,还是分辨率依次增大,但是与N=16相比较时,还是会发现这些图形都失真了,损失了一些数据,没有那么的准确。当N比较小时,不能够提高分辨率,因为数据丢失了。N至少应该满足Fs/N小于样本函数频率之间的间隔(Fs为抽样频率)。 - 改变N=32, 128和2048分析结果:
N=32:
N=128:
N=2048:
分析:可以发现N的值越大,补的零越多,则图形的分辨率越高,间隔就越小,数据就保留的比较完整,所得到的图形就更加准确,光滑完整,但N的值也不应该过大,这样就需要放大去看图形的分辨率。
四、结论与体会
间隔fs/N越小,图形的分辨率就越高,所丢失的数据就越少,这是因为在这间隔中所得到的的数据更多。通过这次实验可以了解到N取的越大分辨率越高,在后面补更多的零,也可以提高分辨率,但是补零得到的不是我们想要的频谱。