快速傅立叶(FFT)算法实现

本文介绍了快速傅立叶(FFT)算法的原理和实现,包括蝶形运算、二维FFT变换顺序、倒位序算法以及在JPEG和数据压缩中的应用。通过实例展示了如何使用C语言进行倒位序排序,并概述了FFT变换的步骤。
摘要由CSDN通过智能技术生成

  为了WinCE机器人设计,我要学习JPEG,还有视频压缩技术,在JPEG的时候,我就被前面的DCT给挡住了,现如今我终于写了一个FFT程序,发了我好长的时间。如果说是因为我的无知,还是什么,我对学习这类有关数学的东西,总是显得那么的迟钝,也许是因为人老了吧。其它我还像个小孩子一样,唉,这年头,还真是搞不懂自己了。
进入正题吧,我对FFT的完全不了解,到最后,实现FFT正变换与反变换,其中有太多的细节,如果我现在能说明的,一定全力说明,以让与我一样对FFT这东西有点害怕,但又不得不理解的人来说,也许会有些用处。
首先,FFT(快速傅立叶变换)的作用是要是用于将一个有限数字信号从时间域转换到频率域。什么是时间域呢?简单的可以这样理解,就是一个信号是与时间相关的,用平面坐标来说就是横坐标是以时间t,纵坐标是时间t上的一个函数值f(x),我们叫这个函数f(x)为时间域。当一个信号经过FFT变换之后,将变成频率域。什么是频率域呢?同样可以这样理解,它其实就是一个用频率与相位来标识的一个函数。像F(x) = Asin(ωx+φ),在数学中A表示幅值,而ω表示频率,φ表示相位。我们假设F(x)一个频率域函数,那么其频率谱就是|F(x)| = [R^2(x)+I^2(x)]^(1/2),其中R与I表示取实部与虚部函数。需要说明的一点,那就是FFT变换是一个复数变换,所以F(x)是一个复数函数。

我们知道了时间域与频率域的概念之后,下一步就是为什么我们要使用时间域到频率域的转换呢?现在我也只知道其中的一点,那就是在JPEG中可以将数据的高频部分找出来,也就是相关性,这样方便数据压缩。总之一点,你学习这个东西,那么你一定是知道这东西可以用到你想做的东西上面。其实FFT代码在很多网站上都有源码,而且到处都有下载,如果说你想自己研究一下,学习一个这个东西是个啥样,那么我想那还是有必要看一下理论知识的。其实给你一个公式,如果你能马上写出其代码,那已经是很不错的了。我在学FFT的时候看到那个DCT(离散余弦变换)的公式,然后是一个很不知道来源的代码,还真不知道如何下手。呵呵,经过努力还是将FFT完成了。

FFT中理论知识有很多,我想要学会如何变换,知道其中一种就可以了,至于其它优化算法,那就要慢慢研究。FFT中快速算法的理论我们需要知道的就是“蝶形运算”。

1、蝶形算法:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值