资源描述:
《信号与信号处理实验六 离散傅里叶变换(DFT)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验三离散傅里叶变换(DFT)一、实验目的1.掌握序列傅里叶变换的计算机实现方法。2.了解DFT的性质及应用。应用离散傅里叶变换(DFT),分析离散信号x(n)的频谱。深刻理解DFT分析离散信号频谱的原理,掌握改善分析过程中产生的误差的方法。DFT公式:dft1.m:用for循环计算DFTfunction[Am,pha]=dft1(x)N=length(x);w=exp(-j*2*pi/N);fork=1:Nsum=0;forn=1:Nsum=sum+x(n)*w^((k-1)*(n-1));endAm(k)=abs(sum);pha(k)=angle(sum);end调用dft1.m函
2、数文件的M程序文件x=ones(1,8)[Am1,pha1]=dft1(x);n=[0:(length(x)-1)];w=(2*pi/length(x))*n;figure(1)subplot(2,1,1),stem(w,Am1,'b');title('Magnitudepart');xlabel('frequencyinradians');ylabel('
3、X(exp(jw)
4、')subplot(2,1,2),stem(w,pha1,'r');grid;gtext('Phasepart');xlabel('frequencyinradians');ylabel('arg(X[exp(j
5、w)]/radians');可以利用MATLAB的矩阵运算计算DFTdft2.m:用MATLAB矩阵运算计算DFTfunction[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);Matlab中提供了fft函数,FFT是DFT的快速算法X=fft(x):用于计算序列x的离散傅里叶变换(DFT)X=fft(x,n):对序列x补零或截短至n点的离散傅里叶变换。当x的长度小于n时,在x的尾部补零使x的长度达到n点
6、;当x的长度大于n时,将x截短使x的长度成n点;x=ifft(X)和x=ifft(X,n)是相应的离散傅里叶反变换。fftshift(x)将fft计算输出的零频移到输出的中心位置。dft3.m:调用FFT库函数计算DFTfunction[Am,pha]=dft3(x)Xk=fft(x);Am=abs(Xk);pha=angle(Xk)计算信号频谱时要注意的问题:1、采样频率fs>2fh2、信号截断的时间T0>1/F3、采样点数N=fs×T0采样16点,做256点DFT,程序如下:fs=32000;n=[1:16];x=cos(2*pi*6.5*1000*n/fs)+cos(2*pi*7*
7、1000*n/fs)+cos(2*pi*9*1000*n/fs);subplot(2,2,1);stem(n,x);title('signalx(n)')Xk=fft(x,256);magXk=abs(Xk);k1=0:255;w1=2*pi/256*k1;subplot(2,1,2);plot(w1,magXk);title('16点DTFT的幅值');xlabel('w(单位:pi)')fs=32000;%采样频率n=[0:255];x=cos(2*pi*6.5*1000*n/fs)+cos(2*pi*7*1000*n/fs)+cos(2*pi*9*1000*n/fs);subplo
8、t(2,1,1);plot(n/fs,x);title('signalx(t)');xlabel('t/(单位:秒)')Xk=fft(x,256);magXk=fftshift(abs(Xk));k1=-128:127;f=fs/256*k1;subplot(2,1,2);plot(f,magXk);title('256点DTFT的幅值');xlabel('f(单位:Hz)')