C语言和MATLAB分别实现FFT计算并对比

FFT(FastFourierTransform,快速傅里叶变换)算法是离散傅里叶变换的快速算法,FFT算法可以分为按时间抽取和按频率抽取,通过FFT可以将一个信号从时域变换到频域。  

一、FFT和IFFT的C语言编程

(1)对于快速傅里叶变换FFT,第一个要解决的问题就是码位倒序。

码位倒序首先要解决两个问题:a、将t位二进制数倒序     b、将倒序后的两个存储单元进行交换

如果输入序列的自然顺序号i用二进制数表示,例如最大序号为7,即用3位就可表示n2n1n0,则其倒序后j对应的二进制数就是n0n1n2,然后利用C语言的移位功能实现倒序。

(2)第二个要解决的问题就是蝶形运算

a、第1级(第1列)每个蝶形的两节点“距离”为1,第2级每个蝶形的两节点“距离”为2,第3级每个蝶形的两节点“距离”为4,第4级每个蝶形的两节点“距离”为8。由此推得,第m级蝶形运算,每个蝶形的两节点“距离”L=2m-1。
     b、对于16点的FFT,第1级有16组蝶形,每组有1个蝶形;第2级有4组蝶形,每组有2个蝶形;第3级有2组蝶形,每组有4个蝶形;第4级有1组蝶形,每组有8个蝶形。由此可推出,对于N点的FFT,第m级有N/2L组蝶形,每组有L=2m-1个蝶形。

 c、旋转因子W_{N}^{k}的确定

以16点FFT为例,第m级第k个旋转因子为,其中k=0~2m-1-1,即第m级共有2m-1个旋转因子,根据旋转因子的可约性,W_{2_{M}}^{K}=W_{N}^{(N/2^{m})k}=W_{N}^{(N/2L)K},所以第m级第k个旋转因子为W_{N}^{(N/2L)k},其中k=0~2m-1-1

(3)算法实现

N点FFT从左到右共有log2N级蝶形,每级有N/2L组,每组有L个。所以FFT的C语言编程只需用3层循环即可实现:最外层循环完成每一级的蝶形运算(整个FFT共log2N级),中间层循环完成每一组的蝶形运算(每一级有N/2L组),最内层循环完成单独1个蝶形

  • 12
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值