实验题目:实验1 FFT算法的应用
姓 名: 学 号: 上课时间: FFT算法的应用
1. 实验目的:
离散傅氏变换(DFT)的目的是把信号由时域变换到频域,从而可以在频域分析处理信息,得到的结果再由逆DFT变换到时域。FFT是DFT的一种快速算法。在数字信号处理系统中,FFT作为一个非常重要的工具经常使用,甚至成为DSP运算能力的一个考核因素。
本实验通过使用MATLAB函数中的FFT命令计算离散时间信号的频谱,以加深对离散信号的DFT的理解及其FFT算法的运用。
2. 实验要求:
对实验内容中给定的序列求给定点数N的FFT和IFFT,利用MATLAB编程完成计算,绘出相应图形。并与理论计算相比较,说明实验结果的原因。
3. 实验原理:
一.数字滤波器设计:
(一)基—2按时间抽取FFT算法
对于有限长离散数字信号{x[n]},0 ? n ? N-1,其离散谱{x[k]}可以由离
X?k???x[n]en?0N?1?j(2?)nkNk?0,1,...,N?1散付氏变换(DFT)求得。DFT的定义为
可以方便的把它改写为如下形式: 不难看出,WN是周期性的,且周期为N,即
N?1nlN?0(n?mN)(k?)nkWN?WNnkX?k???x[n]WNk?0,1,...,N?1m,l?0,?1,?2...WN的周期性是DFT的关键性质之一。为了强调起见,常用表达式WN取代W以便明确其周期是N。
由DFT的定义可以看出,在x[n]为复数序列的情况下,完全直接运算N点DFT需要(N-1)2次复数乘法和N(N-1)次加法。因此,对于一些相当大的N值(如1024)来说,直接计算它的DFT所作的计算量是很大的。FFT的基本思想在于,将原有的N点序列序列分成两个较短的序列,这些序列的DFT可以很简单的组合起来得到原序列的DFT。例如,若N为偶数,将原有的N点序列分成两个(N/2)点序列,那么计算N点DFT将只需要约[(N/2)2 ·2]=N2/2次复数乘法。即比直接计算少作一半乘法。因子(N/2)2表示直接计算(N/2)点DFT所需要的乘法次数,而乘数2代表必须完成两个DFT。上述处理方法可以反复使用,即(N/2)点的DFT计算也可以化成两个(N/4)点的DFT(假定N/2为偶数),从而又少作一半的乘法。这样一级一级的划分下去一直到最后就划分成两点的FFT运算的情况。比如,一个N = 8点的FFT运算按照这种方法来计算FFT可以用下面的流程图来表示:
x(0)W0x(1)W0x(2)W0x(3)x(4)W0x(5)W0x(6)W0x(7)W2X(7)W3X(6)W2X(5)W2W0W1X(3)X(4)X(2)X(1)X(0)
关于蝶形结运算的具体原理及其推导可以参照讲义,在此就不再赘述。按频率抽取的FFT的原理也可查阅相关资料,这里就不再推导了。
二.使用到的MATLAB命令:
函数fft(x)可以计算R点序列的R点DFT值;而fft(x,N)则计算R点序列的N点DFT,若R>N,则直接截取R点DFT的前N点,若R 4.实验内容: (1) 计算一个实数序列x[n]?1,0?n?256的1024点FFT,注意使用将此序列组 合成一复数序列后再计算的方法。 (1)实验分析: 求某实信号y(n)的复谱,可认为是将实信号加上数值为零的虚部变成复信号(x(n)+j0),再用FFT求其离散付里叶变换。这种作法很不经济,因为把实序列变成复序列,存储器要增加一倍,且计算机运行时,即使虚部为零,也要进行涉及虚部的运算,浪费了运算量。合理的解决方法是利用复数据FFT对实数据进行有效计算。 用一个N点的FFT运算获得一个2N点实序列的DFT 设x(n)是2N点的实序列,现人为地将x(n)分为偶数组x1(n)和奇数组x2(n) x1(n)=x(2n) n=0,1,…,N-1 x2(n)=x(2n+1) n=0,1,…,N-1 然后将x1(n)及x2(n)组成一个复序列y(n)=x1(n)+jx2(k) 通过N点FFT运算可得到 Y(k)=X1(k)+jX2(k) 根据前面的讨论,得到 为求2N点x(n)所对应的X(k),需求出X(k)与X1(k),X2(k)的关系 而 nk所以 X(k)=X1(k)+WNX2(k)。 这样,由x1(n)及x2(n)组成复序列,经FFT运算求得Y(k)后,再利用共轭对称性求出X1(k),X2(k),最后利用上式求出X(k),从而达到了用一个N点的FFT计算一个2N点实序列DFT的目的。 (2)matlab源程序: function [ xk ] = gongshijun2( ) x1=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; x2=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; yn=x1+1i*x2; yk=fft(yn,512); x3=x1(end:-1:1); x4=x2(end:-1:1); yn=x3+1i*x4; ynk=fft(yn,512); x1k=0.5*(yk+conj(ynk)); x2k=-(1i)*0.5*(yk-conj(ynk)); xk=x1k+x2k*exp(1i*360/1024*512); m=0:length(xk)-1; plot(m,xk,'b-'); end (3)实验结果截图: (4)实验图截图: (2) 分别计算两个实数序列 x(n)?sinx(n?)5?cno?sn?16,和01285?n,0?n?128的128点FFT,注意使用将此二序列组合成一复16数序列后再计算的方法。 (1)实验分析: 一个N点FFT同时计算两个N点实序列的DFT 设x1(n),x2(n)是彼此独立的两个N点实序列,且X1(k)=DFT[x1(n)],X2(k)=DFT[x2(n)] 可通过一次FFT运算同时获得X1(k),X2(k)。算法如下: 首先将x1(n),x2(n)分别当作一复序列的实部及虚部,令 x(n)=x1(n)+jx2(n) 通过FFT运算可获得x(n)的DFT值 X(k)=DFT[x1(n)]+jDFT[x2(n)]=X1(k)+jX2(k) 利用离散付里叶变换的共轭对称性 有了x(n)的FFT运算结果X(k),由上式即可得到X1(k),X2(k)的值。 则,由题目的设 搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新教学研究数字信号处理实验一:FFT算法的应用 全文阅读和word下载服务。
相关推荐: