C++实现快速傅里叶变换

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

基础公式

傅里叶变换(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)etdt
离散傅里叶变换(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)=0N1x(n)WNkn(k=0,1,2,3N1)
其中WNkn=e−j2πNknW_N^{kn}=e^{-j\frac{2\pi}{N}kn}WNkn=ejN2π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)=0n1aixi=a0+a1x+a2x2++an1xn1
按照下标的奇偶性把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++an2x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值