基础公式
傅里叶变换(FT):
F(ω)=F[f(t)]=∫−∞+∞f(t)e−jωtdt F(\omega)=F[f(t)]=\int_{-\infty}^{+\infty}f(t)e^{-j\omega t}dt F(ω)=F[f(t)]=∫−∞+∞f(t)e−jωtdt
离散傅里叶变换(DFT):
X(k)=∑0N−1x(n)WNkn(k=0,1,2,3⋯N−1) X(k)=\sum_0^{N-1}x(n)W_N^{kn} \quad (k=0,1,2,3\cdots N-1) X(k)=0∑N−1x(n)WNkn(k=0,1,2,3⋯N−1)
其中WNkn=e−j2πNknW_N^{kn}=e^{-j\frac{2\pi}{N}kn}WNkn=e−jN2πkn,称为旋转因子。
\quadFFT是基于DFT的一种算法,将长序列的DFT分解为短序列的DFT,利用旋转因子的周期性、对称性、可约性,减少了重复运算。
FFT原理
对于一个多项式
A(x)=∑0n−1aixi=a0+a1x+a2x2+⋯+an−1xn−1A(x)=\sum_0^{n-1}a_ix^i=a_0+a_1x+a_2x^2+\cdots +a_{n-1}x^{n-1} A(x)=0∑n−1aixi=a0+a1x+a2x2+⋯+an−1xn−1
按照下标的奇偶性把A(x)分成两部分
A(x)=(a0+a2x2+a4x4+⋯+an−2xn−2)+(a1x+a3x3+a5x5+an−1xn−1) =(a0+a2x2+a4x4+⋯+an−2xn−2)+x(a1+a3x2+a5x4+an−1xn−2)A(x)=(a_0+a_2x^2+a_4x^4+\cdots+a_{n-2}x^{n-2})+(a_1x+a_3x^3+a_5x^5+a_{n-1}x^{n-1}) \\ \quad\quad\; =(a_0+a_2x^2+a_4x^4+\cdots+a_{n-2}x^{n-2})+x(a_1+a_3x^2+a_5x^4+a_{n-1}x^{n-2}) A(x)=(a0+a2x2+a4x4+⋯+an−2x

本文深入介绍了傅里叶变换(FT)及其离散形式(DFT),详细阐述了离散傅里叶变换的递归计算方法——快速傅里叶变换(FFT)。通过复数类的设计,展示了如何用C++实现FFT,并通过示例验证了其正确性。此外,还提及了更高效的蝶形算法作为FFT的另一种实现方式。
436

被折叠的 条评论
为什么被折叠?



