24.1 FFT的由来 离散傅里叶变换(DiscreteFourier Transform,DFT)是 数字信号处理最重要的基石之一,也是对信号进行分析和处理时最常用的工具之一。在200多年前法国数学家、物理学家 傅里叶提出后来以他名字命名的 傅里叶级数之后,用DFT这个工具来分析信号就已经为人们所知。历史上最伟大的数学家之一。 欧拉是第一个使用“函数”一词来描述包含各种参数的表达式的人,例如:y = f(x)。他是把 微积分应用于物理学的 先驱者之一。 给出了一个用实变量函数表示 傅立叶级数系数的方程; 用三角级数来描述离散声音在弹性媒介中传播,发现某些函数可以通过 余弦函数之和来表达。 但在很长时间内,这种 分析方法并没有引起更多的重视,最主要的原因在于这种方法运算量比较大。 直到1965年,Cooley和Tukey在《计算机科学 》发表著名的《机器计算傅立叶级数的一种算法》论文,FFT才开始大规模应用。 那个年代,有个 肯尼迪总统科学咨询委员会。其中有项研究主题是,对苏联核测试进行检测,Tukey就是其中一员。美国/苏联核测试 提案的批准,主要取决于不实地访问核测试设施而做出检测的方法的发展。其中一个想法是,分析离海岸的地震计情况,这种计算需要快速算法来计算DFT。其它应用是 国家安全,如用 声学探测远距离的 核潜艇。所以在军事上,迫切需要一种快速的 傅立叶变换算法,这也促进了FFT的正式提出。
FFT的这种方法充分利用了DFT运算中的 对称性和周期性,从而将DFT运算量从N2减少到N*log2N。当N比较小时,FFT优势并不明显。但当N大于32开始,点数越大,FFT对运算量的改善越明显。比如当N为1024时,FFT的运算效率比DFT提高了100倍。在库利和图基提出的FFT算法中,其基本原理是先将一个N点 时域序列的DFT分解为N个1点序列的DFT,然后将这样计算出来的N个1点序列DFT的结果进行组合,得到最初的N点 时域序列的DFT值。实际上,这种基本的思想很早就由德国伟大的数学家高斯提出过,在某种情况下,天文学计算(也是现在FFT应用的领域之一)与等距观察的 有限集中的行星轨道的内 插值有关。由于当时计算都是靠手工,所以产生一种快速算法的迫切需要。而且,更少的计算量同时也代表着错误的机会更少,正确性更高。高斯发现,一个富氏级数有宽度N=N1*N2,可以分成几个部分。计算N2子样本DFT的N1长度和N1子样本DFT的N2长度。只是由于当时尚欠东风——计算机还没发明。在 20世纪60年代,伴随着计算机的发展和成熟,库利和图基的成果掀起了 数字信号处理的革命,因而FFT发明者的 桂冠才落在他们头上。 之后, 桑德(G.Sand)-图基等快速算法相继出现,几经改进,很快形成了一套高效运算方法,这就是现在的 快速傅立叶变换(FFT)。这种算法使DFT的运算效率提高1到2个 数量级,为 数字信号处理技术应用于各种信号的实时处理创造了良好的条件,大大推进了数学 信号处理技术。1984年,法国的杜哈梅(P.Dohamel)和霍尔曼(H.Hollamann)提出的分裂基块快速算法,使运算效率进一步提高。 库利和图基的FFT算法的最基本运算为蝶形运算,每个蝶形运算包括两个输入点,因而也称为基-2算法。在这之后,又有一些新的算法,进一步提高了FFT的运算效率,比如基-4算法,分裂基算法等。这些新算法对FFT运算效率的提高一般在50%以内,远远不如FFT对DFT运算的提高幅度。 从这个意义上说,FFT算法是里程碑式的。可以说,正是计算机技术的发展和FFT的出现,才使得数字信号处理迎来了一个崭新的时代。除了运算效率的大幅度提高外,FFT还大大降低了DFT运算带来的累计 量化误差,这点常为人们所忽略。
|