MATLAB在离散傅立叶变换(DFT)中的应用
一、序列的移位和周期延拓运算。
n已知x(n)?(0.8)R8(n),利用MATLAB生成并图示序列x(n),x(n?m),x((n))8RN(n)和
x((n?m))8RN(n),其中N?24,0?m?N,x((n))8表示x(n)以8为周期的延拓。
解:MATLAB程序清单如下: N=24; M=8;
m=3;% 设移位值为3 n=0:N-1;
xn=0.8.^n.*(n>=0 & n axis([0 length(xn),0 1]);title('序列x(n)'); xc=xn(mod(n,8)+1); % 产生序列x(n)的周期延拓,求余后加1是因为 % MATLAB矢量的下标从1开始 subplot(3,1,2);stem(n,xc,'.');grid; axis([0 length(xc),0 1]);title('序列x(n)的周期延拓序列'); xm=[xn(m+1:M) xn(1:m)]; % 产生圆周移位序列xm=x((n+m))NRN (n) xm=[xm zeros(1,N-length(xm))]; subplot(3,1,3);stem(n,xm,'.');grid; axis([0 length(xm),0 1]);title('圆周移位序列x(n+m)'); 二、利用MATLAB验证N 点DFT的物理意义。 已知有限长序列x(n)?R4(n),其离散时间傅立叶变换(DTFT)1?e?j4?X(e)?DFT[x(n)]?1?e?j?jw 试绘制出X(ej?) 幅度频谱和相位频谱,并分别计算N=8和N=16时的DFT。 解:MATLAB程序清单如下: clf % 清除所有的图形窗口 N1=8;N2=16; % 设置两种DFT的长度 n=0:N1-1; k1=n;k2=0:N2-1; w=(0:2047)*2*pi/2048; Xw=(1-exp(-j*4*w))./(1-exp(-j*w)); % 对x(n)的频谱采样2048点 xn=[n>=0 & n<4]; % 产生序列x(n) Xk1=fft(xn,N1); % 计算序列x(n)的8点DFT 1 / 3 Xk2=fft(xn,N2); % 计算序列x(n)的16点DFT subplot(3,1,1); plot(w/pi,abs(Xw)); % 绘制序列x(n)的DTFT的幅频曲线 grid;title('序列x(n)的幅频曲线|X(e^{j\\omega})|'); subplot(3,1,2); stem(k1*2/N1,abs(Xk1),'.'); grid;title('序列x(n)的8点DFT'); subplot(3,1,3);stem(k2,abs(Xk2),'.'); grid;title('序列x(n)的16点DFT'); % 也可以利用MATLAB中的hold命令,将上述3个图形绘制在一个图中,程序如下: clf % 清除所有的图形窗口 N1=8;N2=16; % 设置两种DFT的长度 n=0:N1-1; k1=n;k2=0:N2-1; w=(0:2047)*2*pi/2048; Xw=(1-exp(-j*4*w))./(1-exp(-j*w)); % 对x(n)的频谱采样2048点 xn=[n>=0 & n<4]; % 产生序列x(n) Xk1=fft(xn,N1); % 计算序列x(n)的8点DFT Xk2=fft(xn,N2); % 计算序列x(n)的16点DFT plot(w/pi,abs(Xw)); % 绘制序列x(n)的DTFT的幅频曲线 hold % 保持当前的图形窗口 H1=stem(k1*2/N1,abs(Xk1),'o'); set(H1,'color','r') H2=stem(k2*2/N2,abs(Xk2),'*'); set(H2,'color','k'); % legend('|X(e^{j\\omega})|','X_1(k)','X_2(k)'); 上机练习题: 已知一个12点的离散序列x(n)?{1,2,3,4,5,6,6,5,4,3,2,1},要求: (1) 利用MATLAB 计算序列的12点离散傅立叶变换(DFT)X(k),并绘出它的幅度和相 位图; (2) 利用MATLAB计算序列的离散时间傅立叶变换(DTFT)X(e位图; (3) 利用MATLAB的hold命令,将上述两张幅度频谱图合成一张,进行比较,以验证X(k)是X(ej?j?),并绘出它的幅度和相 )的抽样。 三、验证DFT 的共轭对称性 分别以x1(n)?[1,2?j,?1?2j,1?3j,0,1?3j,?1?2j,2?3j],x2(n)?[0,1,2,3,4,5]两个 2 / 3 序列为例,验证序列的DFT的对称性质。 程序略。 四、利用MATLAB 验证两个序列的线性卷积和圆周卷积的关系 已知两个有限长序列: x(n)??(n)?2?(n?1)?3?(n?2)?4?(n?3)?5?(n?4) h(n)??(n)?2?(n?1)??(n?2)?2?(n?3) 编写一个计算两个任意有限长序列的圆周卷积matlab 程序,计算这两个序列以下几种情况的圆周卷积,并与这两个序列的线性卷积结果相比较: ①x(n)⑤h(n) ②x(n)⑥h(n) ②x(n)⑨h(n) ③x(n)⑩h(n) 程序略。 五、利用快速卷积法计算两个序列的卷积 n已知序列x(n)?sin(0.4n)R15(n),h(n)?0.9R20(n)?试利用快速卷积法计算这两个序列的 卷积y(n)?x(n)*h(n)。? 解:快速卷积法的计算框图如下所示:? ?x(n) L点FFT ? ??y(n) L点IFFT ? ?h(n) L点FFT ? ? ???L??程序清单如下:?Nx=15;Nh=20; n1=1:Nx-1;n2=0:Nh-1; xn=sin(0.4*n1).*(n1>=0 &n1 L=pow2(nextpow2(Nx+Nh-1)); % 计算对序列x(n)和h(n) 卷积后得到序列yn的长度 Xk=fft(xn,L); % 对序列x(n)作L点DFT Hk=fft(hn,L); % 对序列h(n)作L点DFT yn=ifft(Xk.*Hk); 3 / 3