数字信号处理实验 matlab版 快速傅里叶变换(FFT)

发布时间 : 星期四 文章数字信号处理实验 matlab版 快速傅里叶变换(FFT)更新完毕开始阅读

运行结果如图61所示。

420012Xk=DFT(x(n)) 3 图1

45671x(n)=IDFT(Xk) 0.5001234567

>> Fs=20;C=[8,32,64];

>> for r=0:2;

>> N=C(r+1);

>> xn=[1,0.5,0,0.5,1,1,0.5,0]; >> D=2*pi*Fs/N;

>> k=floor(-(N-1)/2:(N-1)/2); >> X=fftshift(fft(xn,N));

>> subplot(3,2,2*r+1);plot(k*D,abs(X)); >> title('幅度频谱');xlabel('rad/s'); >> subplot(3,2,2*r+2);stairs(k*D,angle(X)); >> title('相位频谱');xlabel('rad/s');

>> end

幅度 频谱 运行结果如图2所示。

5相位频谱

-50050rad/s幅度频谱50-5-1000-100

-50050rad/s相位频谱50-5-100-50050rad/s相位频谱10050-100-50050rad/s幅度频谱100

5

50-5-1000-100-50

0rad/s50 100

-500rad/s50100图2

2 已知一个无限长序列x(n)=0.5n(n≥0),采样周期Ts=0.2 s,要求序列长度N分别取8、32和64,用FFT求其频谱。

解 MATLAB程序如下:

>> Ts=0.2;C=[8,32,64]; >> for r=0:2; >> N=C(r+1); >> n=0:N-1;

>> xn=exp(0.5*n); >> D=2*pi/(N*Ts);

>> k=floor(-(N-1)/2:(N-1)/2); >> X=fftshift(fft(xn,N));

>> subplot(3,2,2*r+1);plot(k*D,abs(X)); >> title('幅度频谱');xlabel('rad/s'); >> subplot(3,2,2*r+2);stairs(k*D,angle(X)); >> title('相位频谱');xlabel('rad/s');

>> end

运行结果如图3所示。

幅度频谱100500-20x 107相位频谱50-5-20-10010rad/s幅度频谱20-10010rad/s相位频谱202150-10010rad/s幅度频谱20-5-20-10010rad/s相位频谱200-20x 10142150-5-200-20-100rad/s1020-100rad/s1020

图3

六、实验感想

通过此次实验中练习使用matlab语言进行快速傅里叶变换,更为熟悉的掌握了matlab的功能,在实验过程中也遇到很多小问题,并通过仔细检查和查阅相关书籍解决此类问题,让我深刻认识到,细节的重要性。在使用help过程中,深切体会到良好的英语基础和充实

的课堂知识的重要性。

联系合同范文客服:xxxxx#qq.com(#替换为@)