快速傅里叶变换(FFT)的原理、实现及代码解析(附C#源码)

 

一、离散傅里叶变换回顾与FFT的引出

对于长度为N点的数字信号序列 ,定义其离散傅里叶变换为:

 我们知道,利用系数 的性质可以大大减少DFT的计算量,这种算法就是快速离散傅里叶变换FFT。需要说明的是,FFT不是一种新的变换,而是一种求DFT的快速计算机算法。

对序列 按奇偶分成两列,重写DFT表达式:

他们分别是偶相列和奇数项列的DFT:

那么,对于一个 的序列进行不断分解,就可以得出如下所谓的蝶形图:

二、FFT运算的规律及实现

  • 观察上面的蝶形图,我们发现,一个N点序列(注意N必须是2的幂次,如果原序列不是,可以填上0。如:1000点的x(n)可以在后面天24个0,使之变为1024点),可以进行M=logN次的抽取,对应蝶形图就有M级。如上图中8点序列的蝶形图就有3级; 每一级都是N/2个蝶形运算;
  • 每一个蝶形的计算如下图:

X(k)=X1+X2*WN=X1_r+j(X1_i)+(X2_r+jX2_i)*(WN_r+jWN_i)

展开得到X(k)的实部和虚步分别为:X_r = X1_r + X2_r * WN_r - X2_i * WN_i,

                                                            X_i = X1_i + X2_i * WN_r + X2_r * WN_i.

  • 11
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值