实验四离散傅里叶变换及其快速算法.doc
文本预览下载声明
实验四 离散傅里叶变换掌握快速傅立叶变换的应用方法;
实验仪器:电脑一台,MATLAB6.5或更高级版本软件一套。
实验
(一)离散傅里叶变换
离散傅立叶级数变换是周期序列,仍不便于计算机计算。但离散傅立叶级数虽是周期序列,却只有个独立的数值,所以它的许多特性可以通过有限长序列延拓来得到。对于一个长度为的有限长序列,也即只在个点上有非零值,其余皆为零,即
把序列以N为周期进行周期延拓得到周期序列,则有:
所以,有限长序列的离散傅立叶变换(DFT)为:
逆变换为:
若将DFT变换的定义写成矩阵形式,则得到:
X=A﹒
Dftmtx 函数:用来计算DFT变换矩阵A的函数
【实例4-1】
A=dftmtx(4)
Ai=conj(dftmtx(4))/4
运行结果
A =
1.0000 1.0000 1.0000 1.0000
1.0000 0 - 1.0000i -1.0000 0 + 1.0000i
1.0000 -1.0000 1.0000 -1.0000
1.0000 0 + 1.0000i -1.0000 0 - 1.0000i
Ai =
0.2500 0.2500 0.2500 0.2500
0.2500 0 + 0.2500i -0.2500 0 - 0.2500i
0.2500 -0.2500 0.2500 -0.2500
0.2500 0 - 0.2500i -0.2500 0 + 0.2500i
【实例4-2】如果是一个N=16的有限序列,用MATLAB求其DFT的结果,并画出其结果图,如图-1所示。
% 程序
N=16;
n=0:1:N-1; %时域采样
xn=sin(n*pi/8)+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 =
Columns 1 through 5
0.0000 -0.0000 - 8.0000i -0.0000 - 8.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i
Columns 6 through 10
-0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i
Columns 11 through 15
0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 + 8.0000i
Column 16
0.0000 + 8.0000i
图 4-1 有限长序列的DFT结果图
思考:当N=8,16,24,48,分别执行程序得出什么结论?FFT将DFT的计算逐次分解成较小点数的DFT。按时间抽取Decimation-In-Time(DIT)FFT算法把输入序列按其值为偶数或是奇数分解成越来越短的序列。按频域抽取(Decimation-In-Frequency(DIF)FFT算法是把输出序列按其值是偶数或是奇数来分解成越来越短的序列。本实验重点是针对的DIT FFT或DIF FFT。
MATLAB为计算数据的离散快速傅立叶变换,提供了一系列丰富的数学函数,主要有fft、ifft、fft2 、ifft2, fftn、ifftn和fftshift、ifftshift等。当所处理的数据的长度为2的幂次时,采用基-2算法进行计算,计算速度会显著增加。所以,要尽可能使所要处理的数据长度为2的幂次或者用添零的方式来添补数据使之成为2的幂次。
MATLAB实现程序:
clea
显示全部