实验六 快速傅立叶变换FFT及其应用
X(k)?X(?)??2?k/N?n????x(n)e??j2?kn/N 0?k?N?1
序列x(n)的N点DFT的物理意义是对X(ω)在[0,2π]上进行N点的等间隔采样。
(三)、利用FFT计算序列的线性卷积
直接计算线性卷积计算量大,并且计算机无法判断y(n)的长度,需要计算多少的y(n)值,若输入为无限长,就更无法计算,其运算量随长度成级数增长。由于可以利用FFT对DFT进行有效的计算,我们希望能够利用DFT来计算线性卷积。 设 x(n) 和 h(n) 是长度分别为M和N的有限长序列, 令 L=M+N-1,定义两个长度L的有限长序列:
?x(n),0?n?M?1 x'(n)?? (3.4.8)
0,M?n?L?1?
h'(n)???h(n),0?n?N?1 (3.4.9)
N?n?L?1?0,通过对x(n) 和 h(n)补充零样本值得到上面两个序列。那么:
yl(n)?x(n)?h(n)?yc(n)?x'(n) h'(n) (3.4.10) 上面的过程如下图所示:
计算线性卷积也可以直接调用函数con来计算,因为MATLAB中的计时比较粗糙,所以只有M和N较大的时候,才能比较两种方法的执行时间快慢。
25
实验六 快速傅立叶变换FFT及其应用
三、实验内容与步骤
1. 对复正弦序列x(n)?ejn8?RN(n),利用MATLAB程序求当N=16和N=8时的离散傅
立叶变换,并显示其图形。 程序:
N=16;N1=8; n=0:N-1;k=0: N1-1; x=exp(j*pi*n/8); X1=fft(x,N); X2=fft(x,N1); subplot(2,1,1); stem(n,abs(X1)); axis([0,20,0,20]); ylabel(‘∣X1(k)∣’); title(‘16点的DFT’);
subplt(2,1, 2);
stem(n, abs(X2)); axis([0, 20, 0, 20]); ylabel(‘∣X2(k)∣’); title(‘8点的DFT’);
1?e?j4?2.已知x(n)?R4(n),X(?)?, 绘制相应的幅频和相频曲线,并计算N=8和
1?e?j?N=16时的DFT。
程序:
N1=8;N2=16;
n=0:N1-1;k1=0:N1-1;k2=0:N2-1; w=2*pi*(0:2047)/2048;
26
实验六 快速傅立叶变换FFT及其应用
Xw=(1-exp(-j*4*w))./(1-exp(-j*));%对x(n)的频谱函数采样2048个点可以近似地看
作是连续的频谱
xn=[(n>=0)&(n<4)];%产生x(n) X1k=fft(xn,N1); X2k=fft(xn,N2);
subplot(3,2,1);plot(w/pi,abs(Xw));xlabel(‘w/π’); title(‘x(n)的幅频曲线’);
subplot(3,2,2);plot(w/pi,angle(Xw));axis([0,2,-pi,pi]); line([0,2],[0,0]);xlabel(‘w/π’); title(‘x(n)的相频曲线’);
subplot(3,2,3);stem(k1,abs(X1k),’.’);
xlabel(‘k(w=2πk/N1)’);ylabel(‘∣X1(k)∣’);hold on plot(N1/2*w/pi,abs(Xw));%图形上叠加连续频谱的幅度曲线 subplot(3,2,4);stem(k1,angle(X1k),’.’); axis([0,N1,-pi,pi]);line([0,N1],[0,0]);
xlabel(‘k(w=2πk/N1)’);ylabel(‘Arg[X1(k)]’);hold on
plot(N1/2*w/pi,angle(Xw));%图形上叠加连续频谱的相位曲线 subplot(3,2,5);stem(k2,abs(X2k),’.’);
xlabel(‘k(w=2πk/N2)’);ylabel(‘∣X2(k)∣’);hold on plot(N2/2*w/pi,abs(Xw));%图形上叠加连续频谱的幅度曲线 subplot(3,2,6);stem(k2,angle(X2k),’.’);
27
实验六 快速傅立叶变换FFT及其应用
axis([0,N2,-pi,pi]);line([0,N2],[0,0]);
xlabel(‘k(w=2πk/N2)’);ylabel(‘Ang[X2(k)]’);hold on
plot(N2/2*w/pi,angle(Xw));%图形上叠加连续频谱的相位曲线
3.分别利用快速卷积法以及conv函数计算下面两个序列的线性卷积。
h=[3 2 1 -2 1 0 -4 0 3];
↑
x=[1 -2 3 -4 3 2 1 ] ↑
程序1:快速卷积 clf;
h=[3 2 1 -2 1 0 -4 0 3];%冲激 x=[1 -2 3 -4 3 2 1 ]; %输入序列 L=pow2(nextpow2(length(x)+length(h)-1)); Xk=fft(x,L); Hk=fft(h,L); Yk=Xk.*Hk; y=ifft(Yk,L);
nh=0:8;nx=0:6;ny=0:L-1;
subplot(3,1,1);stem(nx,x);title(‘x(n)’);
subplot(3,1,2);stem(nh,h);title(‘h(n)’);
subplot(3,1,3);stem(nx,x); xlabel(‘时间序号n’);ylabel(‘振幅’);title(‘卷积y(n)’); 程序2: clf;
h=[3 2 1 -2 1 0 -4 0 3];%冲激 x=[1 -2 3 -4 3 2 1 ]; %输入序列 y=conv(h,x); n=0:14; stem(n,y);
28