c语言实现fft原理,新手小白一看就会,FFT算法的原理详解

原标题:新手小白一看就会,FFT算法的原理详解

相信网上现在有很多关于FFT的教程,我曾经也参阅了很多网上的教程,感觉都不怎么通俗易懂。在基本上的研究FFT,并且通过编程的形式实现之后。我决定写一篇通俗易懂的关于FFT的讲解。因此我在接下来的叙述中尽量非常通俗细致的讲解。

本人最早知道傅里叶变换的时候是沉迷于音乐的频谱跳动无法自拔,当时就很想做一个音乐频谱显示器。搜阅了很多资料之后,才了解到傅里叶变换,和FFT。当然这都是以前的事情了,最近经过抽空调试,自制了一个FFT的算法,不敢说速度上的优势,但是个人认为是一种通俗易懂的实现方法。经过实际的VC++模拟实验、和STM32跑的也很成功。因此在这里分享给大家。

FFT

算法原理

首先,要会FFT,就必须要对DFT有所了解,因为两者之间本质上是一样的。在此之前,先列出离散傅里叶变换对(DFT):

60ccf582d466c7cd17d0203e98dc4b87.png

但是FFT之所以称之为快速傅里叶变换,就利用了以下的几个性质(重中之重!)

36658830dffa618e6c574deddb2c8860.png

先把这仨公式放到这,接下来会用到。

根据这几个特性,就可以将一个长的DFT运算分解为若干短序列的DFT运算的组合,从而减少运算量。在这里,为了方便理解,我就用了一个按时间抽取的快速傅里叶变换(DIT-FFT)的方法。

首先,将一个序列x(n)一分为二。

对于:

a6f551bad1732597a69d73c2841a15b1.png

设N是2的整次幂 也就是N=2^M。

将x(n)按照奇偶分组:

a0e96cf3556d69d75092408c65babed3.png

那么将DFT也分为两组来预算:

  • 8
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言实现FFT算法可以使用以下步骤: 1. 首先,将输入的序列进行码位倒置。这可以通过按位与、或循环实现,或者使用迭代方法进行推导。码位倒置是为了满足FFT的计算特性,以便后续对信号的相关性质进行研究。 2. 接下来,将倒置后的序列进行分组。以N=8为例,可以将序列分为奇偶两组。 3. 对每个分组进行蝶形运算。蝶形运算是FFT算法的核心部分,它将两个输入值进行加法和乘法运算,并输出两个结果。 4. 重复步骤3,直到完成所有的蝶形运算。 5. 最后,将得到的结果按照正常顺序输出,即得到FFT变换后的结果。 需要注意的是,FFT算法可以按照不同的抽取方式进行实现,包括按时间抽取(DIT-FFT)和按频率抽取(DIF-FFT算法。此外,FFT算法还可以根据蝶形运算的构成不同,分为基2、基4、基8和任意因子的类型。 总结起来,C语言实现FFT算法的步骤包括码位倒置、分组、蝶形运算和结果输出。具体的实现可以根据具体的需求和算法类型进行调整。 #### 引用[.reference_title] - *1* [《C》C语言实现FFT算法](https://blog.csdn.net/yga_airspace/article/details/86688278)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [用c语言实现FFT](https://blog.csdn.net/tf18269639242/article/details/53024276)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值