毕业设计论文

更新时间:2024-05-29 20:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MATLAB的FFT在信号处理中的应用

熊峰

摘要:傅里叶变换(DFT—Discrete Fourier Transform)在信号处理中有着非常重要的作

用,但是由于其运算量较大,在应用上受到了限制,自从快速傅里叶变换(FFT—Fast Fourier Transform)提出以后,使DFT的应用得到了迅速推广。本文从应用的角度出发,在MATLAB平台上,简单介绍了FFT的几方面应用。 关键词:DFT;FFT;MATAB

在信号处理中,DFT的计算具有举足轻重的地位,信号的相关、滤波、谱估计等都要通过DFT来实现.然而,当N很大的时候,求一个N点的DFT要完成N×N次复数乘法和N(N-1)次复数加法,其计算量相当大。1965年J.W.Cooley和J.W.Tukey巧妙地利用WN因子的周期性和对称性,构造了一个DFT快速算法,即快速傅里叶变换(FFT)。

FFT 广泛应用于离散信号的数字信号处理中,完成离散信号从时域到频域的转换。以FFT 在测量失真度中的应用为例,分析了可能造成误差的原因,并用MATLAB 进行了仿真,以找出减少误差的最佳方法。

利用MATLAB 语言实现傅立叶变换计算全息图的制作, 并且针对随机因子及模式溢出对全息再现的影响进行了实验研究。实验结果表明MATLAB 语言在算法实现上更加简单, 是研究计算全息的有效工具之一,以下介绍FFT算法和FFT算法的MATLAB实现及应用: 1、基-2FFT算法

长度为N的有限长序列x(n)的DFT为:

kn X(k)??x(n)WN,k?0,1,???,N?1 (1)

n?0N?1利用

knk(n?N)(k?N)n (2) WN?WN?WN和

WN

k(n?N)2kn, (3) ??WN

将N点DFT转化为N/2点的DFT。 当N=2r时,将x(n)按奇偶分成N/2的序列

x1(r)?x(2r),0?r?N/2?1, (4) x2(r)?x(2r?1),0?r?N/2?1, (5)

knk2rk(2r?1) ??x(2r)WN X(k)??x(n)WN??x(2r?1)WNn?0N?1N?12r?0N2r?0?X1(k)?X2(k) k=0,1,?,N-1 (6)

krkr式中X1(k)=?x1(r)WN/2=DFT[x1(r)],X2(k)??x2(r)WN/2?DFT[x2(r)]。由于

r?0r?0N?12N?12(k?N/2)k,所以X(k)也可表示为 X1(k)和X2(k)都是N/2点的DFT,且WN??WNk X(k)?X1(k)?WNX2(k),k=0,1,???,N/2-1 (7)

kX(k?N/2)?X1(k)?WNX2(k),k=0,1, ???,N/2-1 (8)

这样就将N点DFT分解为两个N/2点的DFT的运算.N/2点的DFT还可以再分解为N/4点DFT,共可以分解r级,最后达到N/2个 2点DFT运算.这种方法由于每一步都是按每级 输入序列在时间上的次序属于偶数还是属于奇数来分解为两个更短的子序列,所以称为“按时间抽取法”。 2、FFT的计算量直接计算DFT运算量为:

复数乘法 m=N2, (9) 复数加法 a=N(N-1)。 (10) 而采用FFT的运算量则为: 复数乘法 mF?NNr?log2N, (11) 22复数加法 aF?Nr?Nlog2N。

(12)

由于计算机上运算乘法所需时间比加法所需时间多得多,故以乘法为例,直接计算DFT与计算FFT的运算量之比为

N22N? , (13) Nrlog2N2从式中可以看出,当N的数值较小时,优越性不是很明显但当N的值很大时,FFT的优越性就非常突出。

3、 FFT算法的MATLAB实现及应用

3.1 算法实现

MATLAB提供一个称为FFT函数来计算x(n)的DFT,FFT函数是用机器语言,而不是以MATLAB指令写成的,因此,它的计算速度非常快。如果N是2的整数幂,就采用基-2FFT算法,如果N不是2的某个幂,就采用较慢的分裂基算法,如果N是某个素数,那么FFT函数就蜕化为原始的DFT算法。 格式:y=fft(x,N),计算N点DFT,如果 x的长度小于N,就将x补零;若x的长度大于N时,截断x;如果x是一个矩阵,那么fft(x,N)计算x中每一列的N点的DFT。另外,可以应用ifft 函数计算逆DFT,它与FFT具有相同的特性。

3.2 FFT应用实例

(1)用FFT分析信号频率成分.被掺杂了噪声的信号,很难看出它所包含的频率分量.现在设计一个由50Hz和150Hz正弦信号构成的信号,受到随机噪声的干扰,数据采样率为1000Hz,可以通过FFT来分析信号的频率成分,如图1。

图1(a)掺杂了噪声的信号

图1(b)FFT的频谱

(2)用FFT分析语音信号频谱

对于载入的语音信号利用FFT进行频谱分析,可以看到该语音信号的频谱,然后频谱的幅值稍作处理后,再利用FFT反变换对语音信号进行恢复,如图2。

图2(a)语音信号 图2(b)语音信号频谱

图2(c)经幅值处理后频谱 图2(d)反变换后恢复的语音信号

小结:利用MATLAB软件来对傅立叶变换、快速傅立叶变换进行仿真,简单,功能强大,调试减少失真误差,运行MATLAB软件仿真的图像,直观、易理解使得设计方便、快捷, 大大减轻了工作量。提高快速傅立叶变换速度的方法很多,随着可编程器件的规模不断扩大,内部资源不断丰富,采用并行迭代处理、提高FFT的点数及处理的基数都是提速的重要手段,所以随着研究和设计的深入,新的设计思想必在以后的MATLAB实现中体现,而采用MATLAB实现FFT成为未来发展的一种发展趋势。 参考文献:

[1]Cooley JW,Tukey JW. an aigorithm for the machine computation of complex Fourier series [M].Mathematics of Computation, 1965,19(Apr):2972301. [2]程佩青.数字信号处理教程[M].北京:清华大学出版社,2001:1382157. [3]赵红怡,张常年.数字信号处理及其MATLAB实现[M].北京:化学工业出版社,2002:30233.

[4]薛年喜.MATLAB在数字信号处理中的应用[M].北京:清华大学出版社,2003:1262133.

本文来源:https://www.bwwdw.com/article/73y6.html

Top