欢迎来到天天文库
浏览记录
ID:39578081
大小:85.50 KB
页数:7页
时间:2019-07-06
《实验四离散傅里叶变换及其快速算法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验四离散傅里叶变换及其快速算法一、实验目的掌握快速傅立叶变换的应用方法;二、实验仪器:电脑一台,MATLAB6.5或更高级版本软件一套。三、实验原理和实例分析(一)离散傅里叶变换离散傅立叶级数变换是周期序列,仍不便于计算机计算。但离散傅立叶级数虽是周期序列,却只有N个独立的数值,所以它的许多特性可以通过有限长序列延拓来得到。对于一个长度为N的有限长序列,也即只在个点上有非零值,其余皆为零,即把序列以N为周期进行周期延拓得到周期序列,则有:所以,有限长序列的离散傅立叶变换(DFT)为:逆变换为:若将DFT变换的定
2、义写成矩阵形式,则得到:X=A﹒x,其中DFT变换矩阵A为Dftmtx函数:用来计算DFT变换矩阵A的函数调用方式A=dftmta(n):返回n×n的DFT变换矩阵A。若x为给定长度的行向量,则y=x*A,返回x的DFT变换y。Ai=conj(dftmtx(n))/n;返回n×n的IDFT变换矩阵Ai。【实例4-1】>>A=dftmtx(4)>>Ai=conj(dftmtx(4))/4运行结果A=1.00001.00001.00001.00001.00000-1.0000i-1.00000+1.0000i1.00
3、00-1.00001.0000-1.00001.00000+1.0000i-1.00000-1.0000iAi=0.25000.25000.25000.25000.25000+0.2500i-0.25000-0.2500i0.2500-0.25000.2500-0.25000.25000-0.2500i-0.25000+0.2500i【实例4-2】如果是一个N=16的有限序列,用MATLAB求其DFT的结果,并画出其结果图,如图4-1所示。%程序N=16;n=0:1:N-1;%时域采样xn=sin(n*pi/8)
4、+sin(n*pi/4);k=0:1:N-1;%频域采样WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^nk;Xk=xn*WNnk;subplot(2,1,1)stem(n,xn);subplot(2,1,2)stem(k,abs(Xk));运算结果Xk=Columns1through50.0000-0.0000-8.0000i-0.0000-8.0000i0.0000-0.0000i0.0000-0.0000iColumns6through10-0.0000-0.0000i0.0000-0
5、.0000i0.0000-0.0000i0.0000-0.0000i0.0000-0.0000iColumns11through150.0000-0.0000i0.0000-0.0000i0.0000-0.0000i0.0000-0.0000i0.0000+8.0000iColumn160.0000+8.0000i图4-1有限长序列的DFT结果图思考:当N=8,16,24,48,分别执行程序,得出什么结论?频谱的误差主要是由于时域中对信号的非整周期截断产生的频谱泄漏。(二)快速傅立叶变换(FFT)快速离散傅里叶变
6、换是计算离散傅里叶变换的一种快速算法,为了提高运算速度,FFT将DFT的计算逐次分解成较小点数的DFT。按时间抽取Decimation-In-Time(DIT)FFT算法把输入序列按其值为偶数或是奇数分解成越来越短的序列。按频域抽取(Decimation-In-Frequency(DIF)FFT算法是把输出序列按其值是偶数或是奇数来分解成越来越短的序列。本实验重点是针对的DITFFT或DIFFFT。MATLAB为计算数据的离散快速傅立叶变换,提供了一系列丰富的数学函数,主要有fft、ifft、fft2、ifft2
7、,fftn、ifftn和fftshift、ifftshift等。当所处理的数据的长度为2的幂次时,采用基-2算法进行计算,计算速度会显著增加。所以,要尽可能使所要处理的数据长度为2的幂次或者用添零的方式来添补数据使之成为2的幂次。函数fft用来求序列的DFT,调用格式为:[Xk]=fft(xn,N)其中,xn为有限长序列,N为序列xn的长度,Xk为序列xn的DFT.函数ifft用来求IDFT,调用格式为:[xn]=ifft(Xk,N)其中,Xk为有限长序列,N为序列Xk的长度,xn为序列Xk的IDFT.1、快速傅
8、里叶变换对信号进行频谱分析【实例4-3】已知序列,试绘制及它的离散傅里叶变换图。MATLAB实现程序:clearallN=100;n=0:N-1;xn=2*sin(0.48*pi*n)+cos(0.52*pi*n);XK=fft(xn,N);magXK=abs(XK);phaXK=angle(XK);subplot(1,2,1)plot(n,xn)xlabel('n');
此文档下载收益归作者所有