快速傅里叶变换FFT算法源码经典
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
N / 2−1
N / 2−1
∑ ∑ F[k] =
f [n]WNkn +
f [n + N / 2]WNk(n+N /2) 0 ≤ k ≤ N −1
n=0
n=0
(5)
1
1 一维 DFT 的快速算法—FFT
由于
W k(n+N /2) N
= WNknWNkN / 2
=
(−1)k WNkn
(5)式两项又可合并为
1.2 时域抽取的基 2 算法 .......................................................................................5
2 一维基 2 FFT 算法编程..........................................................................................6 3 一维任意非基 2 FFT 算法....................................................................................10
1.一维 DFT 的基 2 FFT 算法 VISUAL C++程序 ...............百度文库...............................34
(1) 频域抽取的 FFT 和 IFFT 算法 .......................................................................................34 (2) 时域抽取的 FFT 和 IFFT 算法 .......................................................................................39
本文通过各种流程图和表格,较为深入系统地阐述了 FFT 的算法原理;运 用 Matlab 编程,通过大量生动的实例,图文并茂地列举出了 FFT 算法的各种应 用,并在每个实例中都附上了完整的 Matlab 程序,可供读者参考。由于篇幅所 限,本文未涉及 FFT 变换以及其应用的数学理论背景知识。
关键词:FFT 算法的应用,一维基 2 FFT 算法,频域抽取,时域抽取,非基 2 FFT 算法,Cooley-Tukey 算法,素因子算法,线形卷积,信号压缩和滤波,二 维 FFT 算法
5 二维 DFT 的快速变换算法及应用简介 ..............................................................32 5.1 二维 FFT 变换及其算法介绍 ........................................................................32 5.2 二维 FFT 变换算法的应用 ............................................................................33
1.1.1 正变换的计算.......................................................................................................................1 1.1.2 逆变换的计算.......................................................................................................................4
1
1 一维 DFT 的快速算法—FFT
当序列 f [n]的点数不超过 N 时,它的 N 点 DFT 定义为
∑N −1
−i 2π kn
F[k] = f [n]e N
n=0
反变换 IDFT 定义为
0 ≤ k ≤ N −1
(1)
∑ f [n] =
1
N −1
i 2π kn
F[k]e N
0 ≤ n ≤ N −1
⎪⎨F[2] = f [0]WN20 + f [1]WN21 + f [2]WN22 +L + f [N −1]WN2(N −1)
⎪⎪M
⎪⎩F[N −1] = f [0]WN(N −1)0 + f [1]WN(N −1)1 +L + f [N −1]WN(N −1)(N −1)
(3)
由上式可见,直接按照定义计算 N 点序列的 N 点 DFT 时,每行含 N 个复乘 和 N 个加,从而直接按定义计算点的总计算量为 N 2 个复乘和 N 2 个加。当 N 较 大时, N 2 很大,计算量过大不仅耗时长,还会因字长有限而产生较大的误差, 甚至造成计算结果不收敛。所谓快速傅里叶变换就是能大大减少计算量而完成全 部点计算的算法。下面介绍两种经典的 DFT 的快速算法:频域抽取的 FFT 算法 和时域抽取的 FFT 算法。
2.一维任意非基 2 FFT 算法 VISUAL C++程序 .................................................44 3.二维 DFT 的基 2 FFT 算法 VISUAL C++程序 ...............................................49 4.二维 DFT 的任意非基 2 FFT 算法 VISUAL C++程序 ...................................57
4 一维 FFT 算法的应用...........................................................................................16 4.1 利用 FFT 计算连续时间信号的傅里叶变换 ................................................16 4.2 利用 FFT 计算离散信号的线性卷积 ............................................................19 4.3 利用 FFT 进行离散信号压缩 ........................................................................21 4.4 利用 FFT 对离散信号进行滤波 ....................................................................24 4.5 利用 FFT 提取离散信号中的最强正弦分量 ................................................27
快速傅里叶变换 FFT 算法及其应用
目录
1 一维 DFT 的快速算法—FFT .................................................................................1 1.1 频域抽取的基 2 算法......................................................................................1
N / 2−1
∑ F[k] = { f [n] + (−1)k f [n + N / 2]}WNkn 0 ≤ k ≤ N −1 n=0
(6)
当k
=
2r
为偶数时,注意到 (−1)k
= 1 ,WNkn
=
W 2rn N
= e−i2π 2rn / N
=
W rn N/
2
,(6)式
变为
N / 2−1
∑ F[2r] = ( f [n] + f [n + N / 2])WNrn/2 n=0
参考文献......................................................................................................................33 附 录............................................................................................................................34
N k=0
(2)
二者形式相似,快速算法的原理一样,这里先就其正变换进行讨论。令
WN = e−i2π / N ,当 k 依次取为 0,1, 2,L, N −1时,可表示为如下的方程组:
⎧F[0] = ⎪ ⎪F[1] =
f [0]WN00 + f [0]WN10 +
f [1]WN01 + f [2]WN02 +L + f [N −1]WN0(N −1) f [1]WN11 + f [2]WN12 +L + f [N −1]WN1(N −1)
1.1 频域抽取的基 2 算法
1.1.1 正变换的计算
这里仅介绍基 2 算法,即是 2 的整次幂的情况。由定义
N −1
∑ F[k] = f [n]WNkn 0 ≤ k ≤ N −1 n=0
(4)
把 f [n]分成两半,即 f [n]和 f [n + N / 2] (0 ≤ n ≤ N / 2 −1) ,代入(4)式得
快速傅里叶变换 FFT 算法及其应用
摘要
本文较为系统地阐述了快速傅里叶变换的算法原理及其在数字信号处理等 工程技术中的应用。根据抽取方法的不同,一维基 2 FFT 算法分为两种:频域抽 取的 FFT 算法和时频域抽取的 FFT 算法。第 1 节阐述了这两种 FFT 算法的原理。 第 2 节给出了两种算法的编程思想和步骤。第 3 节阐述了一维非基 2 FFT 的两种 算法:Cooley-tukey FFT 算法和素因子算法(Prime Factor Algorithm)的思想原理, 给出了在把一维非基 2 DFT 的多层分解式转化为二层分解的过程中,如何综合 运用这两种算法以达到总运算次数最少的方案;并以 20 点 DFT 为例描述了非基 2 FFT 算法实现的一般步骤。第 4 节介绍了一维 FFT 算法在计算连续时间信号的 傅里叶变换、离散信号的线性卷积、离散信号压缩和滤波等数字信号处理中的典 型应用。第 5 节把一维 FFT 变换推广到二维 FFT 变换,并在一维 FFT 算法的基 础上,给出了二维 FFT 算法的原理和实现过程。最后在附录中给出了一维 DFT 的基 2 FFT 算法(包括频域抽取的 FFT 和 IFFT 算法、时域抽取的 FFT 和 IFFT 算法),一维任意非基 2 FFT 算法,二维 DFT 的基 2 FFT 算法以及二维 DFT 的 任意非基 2 FFT 算法的详细的 Visual C++程序。
N / 2−1
∑ =
g(n)WNrn/ 2
n=0
= G(r) 0 ≤ r ≤ N / 2 −1
(7)
当 k = 2r +1为奇数时,
WNkn
= W (2r+1)n N
= e−i2π (2r+1)n / N
= WNnWNrn/ 2 ,(6)式变为
N / 2−1
∑ F[2r +1] = {( f [n] − f [n + N / 2])WNn}WNrn/2 n=0 N / 2−1 ∑ = p(n)WNrn/2 = P(r) 0 ≤ r ≤ N / 2 −1 n=0
3.1 COOLEY-TUKEY FFT 算法..............................................................................10 3.2 素因子算法(PRIME FACTOR ALGORITHM, PFA) ..............................................11 3.3 一维任意非基 2 FFT 算法..............................................................................13