数字信号处理实验教程 - 1 - 实验一 离散傅里叶变换的性质及应用 一、实验目的 1、了解 DFT 的性质及应用。 2、熟悉 MATLAB 编程的特点。 二、实验内容 1、用三种不同的 DFT 程序计算 x(n)=R8(n)的傅里叶变换 X(ejw),并比较三种程序计算机运行时间。 (1) 用 for loop 语句的 M 函数文件 dft1.m,用循环变量逐点计算 X(k); (2) 编写用 MATLAB 矩阵运算的 M 函数文件 dft2.m,完成上述运算; (3) 编写函数dft3.m,调用 FFT 库函数,直接计算 X(k); (4) 分别利用上述三种不同方式编写的 DFT 程序计算序列 x(n)的傅立叶变换 X(ejw),并画出相应的幅频和相频特性,再比较各个程序的计算机运行时间。 M函数文件如下: dft1.m: function[Am,pha]=dft1(x) N=length(x); w=exp(-j*2*pi/N); for k=1:N sum=0; for n=1:N sum=sum+x(n)*w^((k-1)*(n-1)); 数字信号处理实验教程 - 2 - end Am(k)=abs(sum); pha(k)=angle(sum); end dft2.m: function[Am,pha]=dft2(x) N=length(x); n=[0:N-1]; k=[0:N-1]; w=exp(-j*2*pi/N); nk=n'*k; wnk=w.^(nk); Xk=x*wnk; Am=abs(Xk); pha=angle(Xk); dft3.m: function[Am,pha]=dft3(x) Xk=fft(x); Am=abs(Xk); pha=angle(Xk); 源程序及运行结果: (1) x=[ones(1,8),zeros(1,248)]; t=cputime; [Am1,pha1]=dft1(x); t1=cputime-t 数字信号处理实验教程 - 3 - n=[0:(length(x)-1)]; w=(2*pi/length(x))*n; figure(1) subplot(2,1,1), plot(w,Am1,'b'); grid; title('Magnitude part'); xlabel('frequency in radians'); ylabel('|X(exp(jw))|'); subplot(2,1,2), plot(w,pha1,'r'); grid; title('Phase Part'); xlabel('frequency in radians'); ylabel('argX[exp(jw)]/radians'); (2) x=[ones(1,8),zeros(1,248)]; t=cputime; [Am2,pha2]=dft2(x); t2=cputime-t n=[0:(length(x)-1)]; w=(2*pi/length(x))*n; figure(2) subplot(2,1,1), plot(w,Am2,'b'); grid; title('Magnitude part'); xlabel('frequency in radians'); ylabel('|X(exp(jw))|'); subplot(2,1,2), plot(w,pha2,'r'); grid; title('Phase Part'); 数字信号处理实验教程 - 4 - xlabel('frequency in radians'); ylabel('argX[exp(jw)]/radians'); (3) x=[ones(1,8),zeros(1,248)]; t=cputime; [Am3,...