matlab数字信号处理实验指导 下载本文

实验六 快速傅立叶变换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