傅⾥叶变换matlab实验总结,数字信号处理实验matlab版快速
傅⾥叶变换(FFT)
>> D=2*pi*Fs/N; %计算模拟频率分辨率
>> k=floor(-(N-1)/2:(N-1)/2); %频率显⽰范围对应 [-p,p] >> X=fftshift(fft(xn,N)); %作FFT运算且移位p >>
subplot(1,2,1);plot(k*D,abs(X)); %横轴化成模拟频率作幅度谱 >> title('幅度频谱');xlabel('rad/s'); >>
subplot(1,2,2);plot(k*D,angle(X)); >> title('相位频谱');xlabel('rad/s');
%横轴化成模拟频率作相位谱
此时程序执⾏的结果如图14-3所⽰。由图可以看出,图形的分辨率提⾼,曲线⼏乎是连续的频谱了。
幅度频谱10860420-500rad/s50-2-4-5042相位频谱0rad/s50
图14-3 将例14-2有限长序列末尾补0到N=1000时的频谱
(3)实偶序列如何补0
例14-4 已知⼀个矩形窗函数序列为
1x(n)0n?5n?5
采样周期Ts=0.5 s,要求⽤FFT求其频谱。
解 由于该序列是⼀个实的偶序列,因⽽补0时需要仔细分析。假定按N=32补0,则主值区域在n=0~31,FFT的输⼊应为
Xn=[ones(1,6),zeros(1,N-11),ones(1,5)]
即原来n=[-5:-1]的前五个点移到n=[27:31]中去了。
下⾯考虑分别⽤N=32,64,512,观察不同N值代⼊对频谱的影响。
程序如下,
>> Ts=0.5;C=[32,64,512]; %输⼊不同的N值
>> for r=0:2; >> N=C(r+1);
>> xn=[ones(1,6),zeros(1,N-11),ones(1,5)]; >> 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)); >> subplot(3,2,2*r+2);stairs(k*D,angle(X));
%幅度频谱 %相位频谱
%建⽴x(n)
>> end
注意:此处相位频谱使⽤了stairs,因为该相位频谱变化率⽐较陡峭。
程序执⾏结果如图14-4所⽰。
20100-1020100-1020100-10420-10420-1050-5-10-50510-50510-50510-50510-50510-50510图14-4 将例14-4有限长序列补0到N=32、64、512时的频谱
如果将x(n)的输⼊写成
xn=[ones(1,11),zeros(1,N-11)];%建⽴x(n-5)
相当于起点不是取⾃n=0⽽是n=-5,计算的是x(n-5)的频谱。幅度频谱不受影响,相位频谱引⼊⼀个线性相位-5w,如图14-5所⽰。
15421005-20-10-4-10-50510-50510图14-5 将有限长位移序列x(n-5)补0到N=512时的频谱
4、⽤FFT计算⽆限长序列的频谱
⽤FFT进⾏⽆限长序列的频谱计算,⾸先要将⽆限长序列截断成⼀个有限长序列。序列长度的取值对频谱有较⼤的影响,带来的问题是引起频谱的泄漏和波动。
例14-5 已知⼀个⽆限长序列为
0.5nex(n)0n0n0
采样频率Fs=20 Hz,要求⽤FFT求其频谱。
解 MATLAB程序如下:
>> Fs=20;C=[8,16,128]; %输⼊不同的N值
>> for r=0:2;
>> N=C(r+1); >> n=0:N-1;
>> xn=exp(-0.5*n);%建⽴x(n) >> D=2*pi*Fs/N;matlab求傅里叶变换
>> k=floor(-(N-1)/2:(N-1)/2); >> X=fftshift(fft(xn,N));
>> subplot(3,2,2*r+1);plot(k*D,abs(X)); >> axis([-80,80,0,3]);
>> subplot(3,2,2*r+2);stairs(k*D,angle(X)); >> axis([-80,80,-1,1]); >> end
运⾏结果如图14-6所⽰。
321032103210-50050-50050-5005010-110-110-1-50050-50050-50050
图14-6 将⽆限长序列截断为N=8,16,128时的频谱
由图14-6可见,N值取得越⼤,即序列保留得越长,曲线精度越⾼。
例14-6 ⽤FFT计算下列连续时间信号的频谱,并观察选择不同的Ts和N值对频谱特性的影响。
xa(t)=e-0.01t(sin2t+sin2.1t+sin2.2t) t≥0
解 该题选择了三个⾮常接近的正弦信号,为了将各频率成分区分出来,在满⾜奈奎斯特定理的条件下确定采样周期,选择三组数据,分别是Ts=0.5 s、0.25 s和0.125 s;再确定N值,分别选择N=256和2048。观察不同Ts和N的组合对频谱的影响。
程序如下:
>> T0=[0.5,0.25,0.125,0.125]; %输⼊不同的Ts值 >> N0=[256,256,256,2048];%输⼊不同的N值 >> for r=1:4;
>> Ts=T0(r);N=N0(r);%赋Ts和N值 >> n=0:N-1;
>> D=2*pi/(Ts*N);%计算模拟频率分辨率
>> xa=exp(-0.01*n*Ts).*(sin(2*n*Ts)+sin(2.1*n*Ts)+sin(2.2*n*Ts));
>> k=floor(-(N-1)/2:(N-1)/2);
>> Xa=Ts*fftshift(fft(xa,N));
>> [r,Xa(1)]%输出Xa(1)的数值,供误差计算⽤ >> subplot(2,2,r);plot(k*D,abs(Xa),'k');
>> axis([1,3,1.1*min(abs(Xa)),1.1*max(abs(Xa))]); >> end
运⾏结果如图14-7所⽰。
403020101232520151051231510512340302010123图14-7 ⽤FFT计算三个很靠近的谐波分量的频谱图
由图14-7可以得出以下结论:
N同样取256(如前三个图形),当Ts越⼤时,时域信号的长度L=NTs保留得越长,则分辨率越⾼,频谱特性误差越⼩;反之,则分辨率越低,频谱特性误差越⼤,甚⾄丢失某些信号分量。
Ts相同(如后两个图形),当N越⼤时,在[0,2p]范围内等间隔抽样点数越多,且时域信号的长度L=NTs保留得越长,则分辨率越⾼,频谱特性误差越⼩;反之,当N越⼩时,在[0,2p]范围内等间隔抽样点数越少,则有可能漏掉某些重要的信号分量,称为栅栏效应。
五、实验过程
1 已知有限长序列x(n)=[1,0.5,0,0.5,1,1,0.5,0],要求: (1)⽤FFT算法求该时域序列的DFT、IDFT的图形;
(2)假定采样频率Fs=20 Hz,序列长度N分别取8、32和64,使⽤FFT来计算其幅度频谱和相位频谱。
解 MATLAB程序如下:
>> xn=[1,0.5,0,0.5,1,1,0.5,0]; >> N=length(xn); >> n=0:N-1;k=0:N-1;
>> Xk=fft(xn,N);
>> subplot(2,1,1);stem(k,abs(Xk)); >> title('Xk=DFT(x(n))'); >> xn1=ifft(Xk,N);
>> subplot(2,1,2);stem(n,xn1); >> title('x(n)=IDFT(Xk)');
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论