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

本文是一篇针对新手的FFT算法详细讲解,作者从DFT出发,解释了FFT如何利用特性减少运算量,通过通俗易懂的方式介绍了FFT的原理。文章还提供了作者自己编写的C语言实现FFT的代码,适用于2^N的数据处理,有助于读者理解并应用FFT算法。
摘要由CSDN通过智能技术生成

原标题:新手小白一看就会,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也分为两组来预算:

2ce7ddae1efc724109b2a3b42820d66c.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值