快速傅里叶变换(FFT)

来源:互联网 发布:淘宝免费模块代码 编辑:程序博客网 时间:2024/04/30 13:07

快速傅里叶变换(FFT)

说到FFT,我们就不得不介绍傅里叶同学、傅里叶级数、傅里叶变换、离散傅里叶变换。下面对他们这些玩意一一介绍。

1.傅里叶同学简介

让·巴普蒂斯·约瑟夫·傅里叶(Baron Jean Baptiste Joseph Fourier,1768-1830),男爵,法国数学家、物理学家,1768年3月21日生于欧塞尔,1830年5月16日卒于巴黎。1817年当选为科学院院士,1822年任该院终身秘书,后又任法兰西学院终身秘书和理工科大学校务委员会主席。

2.傅里叶级数

任何周期函数f(t)都可以用正弦函数和余弦函数构成的无穷级数来表示(选择正弦函数与余弦函数作为基函数是因为它们是正交的)。之后人们称傅里叶级数为一种特殊的三角级数,根据欧拉公式,三角函数又能化成指数形式,也称傅立叶级数为一种指数级数。

f(t)=a0+n=1(ancos(nwt)+bnsin(nwt))

2.1傅里叶级数的收敛性:

满足狄利赫里条件的周期函数表示成的傅里叶级数都收敛。狄利赫里条件如下:
(1)在任何周期内,x(t)须绝对可积;
(2)在任一有限区间中,x(t)只能取有限个最大值或最小值;
(3)在任何有限区间上,x(t)只能有有限个第一类间断点。

3.傅里叶变换

现在,我们都知道傅里叶级数的处理对象是周期函数(而且这个周期函数还比较特别,见2.1)。傅里叶级数的本质是将一个周期的信号分解成无限多分开的(离散的)正(余)弦波,变换到频域是离散信号。那现实生活中我们有很多信号在时域上是非周期信号,那怎么处理呢?这时就需要用到傅里叶变换啦。其定义如下:对于时域非周期函数f(t),其傅里叶变换如下:

F(w)=f(t)ejwtdt

傅里叶变换 将一个时域非周期的连续信号,转换为一个在频域非周期的

4.离散傅里叶变换

我们知道计算机都是处理离散的信号,如果让计算机去处理时域连续信号它会很蓝瘦滴。因此离散傅里叶变换应运而生。如果时域信号不是离散而是连续的,那先在时域进行抽样,得到离散时间序列。离散傅里叶变换(discrete Fourier transform) 傅里叶分析方法是信号分析的最基本方法,傅里叶变换是傅里叶分析的核心,通过它把信号从时间域变换到频率域,进而研究信号的频谱结构和变化规律。

4.1定义

离散傅里叶变换(DFT),是傅里叶变换在时域和频域上都呈现离散的形式,将时域信号的采样变换为在离散时间傅里叶变换(DTFT)频域的采样。在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。即使对有限长的离散信号作DFT,也应当将其看作经过周期延拓成为周期信号再作变换。在实际应用中通常采用快速傅里叶变换以高效计算DFT。
设x(n)是长度为N的有限长序列,则其傅里叶变换为:

X(ejω)=n=0N1x(n)ejωn

其离散傅里叶变换为:

X(k)=n=0N1x(n)ej2πNnk,k=0,1,2,...,N1

离散傅里叶变换是x(n)的频谱X(ejω)[0,2π]上的N点等间隔采样,也就是对序列频谱的离散化,这就是DFT的物理意义.下图是连续时间信号在时域抽样离散化表示,图3是离散时间信号的傅里叶变换,图4是抽样后离散时间信号的离散傅里叶变换。
这里写图片描述
仿真程序如下:

Fs = 1000;                    % Sampling frequencyT = 1/Fs;                     % Sample timeL = 1000;                     % Length of signalt = (0:L-1)*T;                % Time vector% Sum of a 50 Hz sinusoid and a 120 Hz sinusoidx = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); y = x + 2*randn(size(t));     % Sinusoids plus noisesubplot(2,2,1)plot(Fs*t(1:50),y(1:50))title('Signal Corrupted with Zero-Mean Random Noise')xlabel('time (milliseconds)')subplot(2,2,2)stem(Fs*t(1:50),y(1:50))title('Signal Corrupted with Zero-Mean Random Noise')xlabel('time (milliseconds)')NFFT = 2^nextpow2(L); % Next power of 2 from length of yY = fft(y,NFFT)/L;f = Fs/2*linspace(0,1,NFFT/2+1);% Plot single-sided amplitude spectrum.subplot(2,2,3)plot(f,2*abs(Y(1:NFFT/2+1))) title('Single-Sided Amplitude Spectrum of y(t)')xlabel('Frequency (Hz)')ylabel('|Y(f)|')subplot(2,2,4)stem(f,2*abs(Y(1:NFFT/2+1))) title('Single-Sided Amplitude Spectrum of y(t)')xlabel('Frequency (Hz)')ylabel('|Y(f)|')

5.快速傅里叶变换(FFT)

5.1FFT概述

好,终于要讲到我们的快速傅里叶变换 (fast Fourier transform), 即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。
快速傅氏变换(FFT),是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。

5.2FFT基本思想

FFT的基本思想是把原始的N点序列,依次分解成一系列的短序列。充分利用DFT计算式中指数因子 所具有的对称性质和周期性质,进而求出这些短序列相应的DFT并进行适当组合,达到删除重复计算,减少乘法运算和简化结构的目的。此后,在这思想基础上又开发了高基和分裂基等快速算法,随着数字技术的高速发展,1976年出现建立在数论和多项式理论基础上的维诺格勒傅里叶变换算法(WFTA)和素因子傅里叶变换算法。它们的共同特点是,当N是素数时,可以将DFT算转化为求循环卷积,从而更进一步减少乘法次数,提高速度。
FFT时间复杂度为O(nlogn)FFT具体实现过程如下:
这里写图片描述

6.FFT的应用

计算量小的显著的优点,使得FFT在信号处理技术领域获得了广泛应用,结合高速硬件就能实现对信号的实时处理。例如,对语音信号的分析和合成,对通信系统中实现全数字化的时分制与频分制(TDM/FDM)的复用转换,在频域对信号滤波以及相关分析,通过对雷达、声纳、振动信号的频谱分析以提高对目标的搜索和跟踪的分辨率等等,都要用到FFT。可以说FFT的出现,对数字信号处理学科的发展起了非常重要的作用。

0 0
原创粉丝点击