FFT算法的理解

离散傅立叶变换(DFT)的定义:

X(k)= \sum_{n=0}^{N-1}x(n)e^{-j\tfrac{2\pi}{N}},0\leq k\leq N-1

为了表达简洁,令W^{N}=e^{-j\frac{2\pi }{N}},则X(k)=\sum_{n=0}^{N-1}x(n)W^{kn}_{N}

FFT实际上是一种分治算法。FFT将长度为𝑁的信号分解成两个长度为𝑁/2信号进行处理,这样分解一直到最后,每一次的分解都会减少计算的次数。FFT可以分为以下3个步骤:

(1)分解

(2)DFT运算

(3)组合

步骤1:分解

将信号x[n]分解成两个子信号

偶数样本点采样信号:x[2n];         n=0,1,2,…N/2-1

奇数样本点采样信号:x[2n+1];     n=0,1,2,…N/2-1

步骤2:DFT运算

分别计算x0(n)的N/2点DFT X0(k)和X1(k)的N/2点DFT X1(k);  用以下公式进行计算:

 

例如:

 

步骤3:组合

最后对X0(k)和 X1(k)进行组合,可以得到x(n)的DFT X(k):

而该式又可以改写成以下公式: 

这个公式是从步骤2的两条公式推演过来的,X(k)将自己的计算拆成了偶数的X0(k)和奇数的X1(k),偶数的X0(k)和奇数的X1(k)中k的取值范围是0~(N/2-1),那么X(k)在0~(N/2-1)的取值范围上,可以用上式来表达。

k的取值范围0~(N/2-1)搞定了,那么根据DFT的周期性(如果不了解或者不记得可以去查),X0(k)和X1(k)的周期均为N/2,只要知道0~(N/2-1)的X0(k)和X1(k)取值 ,那么N/2~(N-1)范围的X0(k)和X1(k) 取值也一样知道了。

最后利用旋转因子的特性:

W_{N}^{k+N/2}=W_{N}^{N/2}W_{N}^{k}=-W_{N}^{k}

 将上式改写成以下式子:

 X(k)=X_{0}(k)+W_{N}^{k}X_{1}(k),k=0,1,...,N/2-1

X(k+N/2)=X_{0}(k)-W_{N}^{k}X_{1}(k),k=0,1,...,N/2-1 

 呈现的蝶形运算如下所示:

总结这三个步骤就是FFT的计算过程:

(1)分解

(2)DFT运算

(3)组合

参考资料:

如何理解和掌握快速傅里叶变换的计算和概念? - 知乎 (zhihu.com)

《深入浅出数字信号处理》

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值