通俗易懂的傅立叶分析入门 http://download.csdn.net/source/2209943
1、为什么要进行傅里叶变换,其物理意义是什么?
傅立叶变换是数字信号处理领域一种很重要的算法。要知道傅立叶变换算法的意义,首先要了解傅立叶原理的意义。
傅立叶原理表明:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。而根据该原理创立的傅立叶变换算法利用直接测量到的原始信号,以累加方式来计算该信号中不同正弦波信号的频率、振幅和相位。
和傅立叶变换算法对应的是反傅立叶变换算法。该反变换从本质上说也是一种累加处理,这样就可以将单独改变的正弦波信号转换成一个信号。
因此,可以说,傅立叶变换将原来难以处理的时域信号转换成了易于分析的频域信号(信号的频谱),可以利用一些工具对这些频域信号进行处理、加工。最后还可以利用傅立叶反变换将这些频域信号转换成时域信号。
从现代数学的眼光来看,傅里叶变换是一种特殊的积分变换。它能将满足一定条件的某个函数表示成正弦基函数的线性组合或者积分。在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变换。
在数学领域,尽管最初傅立叶分析是作为热过程的解析分析的工具,但是其思想方法仍然具有典型的还原论和分析主义的特征。"任意"的函数通过一定的分解,都能够表示为正弦函数的线性组合的形式,而正弦函数在物理上是被充分研究而相对简单的函数类:1. 傅立叶变换是线性算子,若赋予适当的范数,它还是酉算子;2. 傅立叶变换的逆变换容易求出,而且形式与正变换非常类似;3. 正弦基函数是微分运算的本征函数,从而使得线性微分方程的求解可以转化为常系数的代数方程的求解.在线性时不变杂的卷积运算为简单的乘积运算,从而提供了计算卷积的一种简单手段;5. 离散形式的傅立叶的物理系统内,频率是个不变的性质,从而系统对于复杂激励的响应可以通过组合其对不同频率正弦信号的响应来获取;4. 著名的卷积定理指出:傅立叶变换可以化复变换可以利用数字计算机快速的算出(其算法称为快速傅立叶变换算法(FFT))。
正是由于上述的良好性质,傅里叶变换在物理学、数论、组合数学、信号处理、概率、统计、密码学、声学、光学等领域都有着广泛的应用。
2、图像傅立叶变换的物理意义
图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低;而对于地表属性变换剧烈的边缘区域在图像中是一片灰度变化剧烈的区域,对应的频率值较高。傅立叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅立叶变换就表示f的谱。从纯粹的数学意义上看,傅立叶变换是将一个函数转换为一系列周期函数来处理的。从物理效果看,傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。换句话说,傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数
傅立叶变换以前,图像(未压缩的位图)是由对在连续空间(现实空间)上的采样得到一系列点的集合,我们习惯用一个二维矩阵表示空间上各点,则图像可由z=f(x,y)来表示。由于空间是三维的,图像是二维的,因此空间中物体在另一个维度上的关系就由梯度来表示,这样我们可以通过观察图像得知物体在三维空间中的对应关系。为什么要提梯度?因为实际上对图像进行二维傅立叶变换得到频谱图,就是图像梯度的分布图,当然频谱图上的各点与图像上各点并不存在一一对应的关系,即使在不移频的情况下也是没有。傅立叶频谱图上我们看到的明暗不一的亮点,实际上图像上某一点与邻域点差异的强弱,即梯度的大小,也即该点的频率的大小(可以这么理解,图像中的低频部分指低梯度的点,高频部分相反)。一般来讲,梯度大则该点的亮度强,否则该点亮度弱。这样通过观察傅立叶变换后的频谱图,也叫功率图,我们首先就可以看出,图像的能量分布,如果频谱图中暗的点数更多,那么实际图像是比较柔和的(因为各点与邻域差异都不大,梯度相对较小),反之,如果频谱图中亮的点数多,那么实际图像一定是尖锐的,边界分明且边界两边像素差异较大的。对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。将频谱移频到圆心除了可以清晰地看出图像频率分布以外,还有一个好处,它可以分离出有周期性规律的干扰信号,比如正弦干扰,一副带有正弦干扰,移频到原点的频谱图上可以看出除了中心以外还存在以某一点为中心,对称分布的亮点集合,这个集合就是干扰噪音产生的,这时可以很直观的通过在该位置放置带阻滤波器消除干扰
另外我还想说明以下几点:
1、图像经过二维傅立叶变换后,其变换系数矩阵表明:
若变换矩阵Fn原点设在中心,其频谱能量集中分布在变换系数短阵的中心附近(图中阴影区)。若所用的二维傅立叶变换矩阵Fn的原点设在左上角,那么图像信号能量将集中在系数矩阵的四个角上。这是由二维傅立叶变换本身性质决定的。同时也表明一股图像能量集中低频区域。
2 、变换之后的图像在原点平移之前四角是低频,最亮,平移之后中间部分是低频,最亮,亮度大说明低频的能量大(幅角比较大)
为了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、蝶形算法: 有关蝶形算法的介绍和思想大家百度或者Google一下就很容易找到,这里只是说一下要注意的地方。 蝶形算法中有这样一个有趣的规则:若输入信号的顺序为自然顺序,那么输出信号的顺序就为倒位序(算法参见4)顺序。 2、二维FFT的变换顺序: 首先进行行变换,对变换后的结果再进行列变换。 3、关于二维FFT运算后的结果 按照公式运算出的结果中,能量大部分分集中在四个角,如果我们想要能量集中在中间,我们需要成一个欧拉数,其实也简单,你可以在输入信号时做一个简单的变换,如下描述: 设i,j为输入信号的坐标,那么 输入信号可表示为x(i, j), 若(i + j) % 2 == 0 则取源信号为输入信号,否则取源信号的相反数为输入信号,即 -x(i, j)。 运算出来的结果中,能量就集中在中间位置了。 4、关于倒位序算法 倒位序:就是将数字的各个尾反过来排序后得到的数字后的顺序,举个例子吧 如我们的输入8个信号,我们只需要三个位就可以描述着写信号的下标,比如1 = 001B, 2 = 010B等等,那么1的倒位后为100B = 4, 010B = 2,依此类推,这就是倒位序,最后生成的新的顺序就是排序后的结果,这个结果有一个特点,那就是把偶数和奇数分开,这也就是FFT的理论基础。 注:但是这个排序需要收到输入信号总量的限制,比如我们输入8个信号,虽然在计算机里我们的取值范围为00000000B ~ 00000111B 但是倒位序的却只针对最后三位,即只在最后三位的范围内倒位排序,如上面1的倒位序是100B而不是10000000B,这点请非常注意! 下面就是倒位序的算法的应用,用C写的,可惜CSDN的粘贴代码不支持C,大家将就看吧,至于原理,谈不上,只是个技巧,大家用手简单模拟算一下就可以完全理解了~ 这个片段讲述了如何进行到位需排序,假设输入信号的实部为x,虚部为y,这里j是标示着要与当前位置i交换的元素的下标,如果不交换的话就会出现i >= j 的情况,整个过程还是建议大家拿手算一下,这样来的比较快。 n为输入信号的个数,k只是个中间变量而已。 // ... FFT变换步骤 做好了上面的准备,我们来概览一下FFT的变换步骤: 1、若输入信号的个数不是2的整数次方我们就要补齐信号,用零补齐就可以,详细参见笔者博客中《FFT实践中的一些补充》一文。 2、将输入信号进行倒位序排序 3、将输入信号成一个欧拉数,为的是输出结果中能量集中在中间,不乘也可以,视具体应用而定。 补充:只有一个变换方向可以产生能量及中的频谱图 4、进行傅立叶变换,若是二维FFT,那么先进行行变换,再对变换后的结果进行列变换,体现了二重积分的思想。 5、得到的结果通常不能直接输出谱图,因为值可能会很小,我们可以乘以255后输出,至于谱图,其实其实际意义没有多大,输出方法也不一样,比如matlab中就是取实部并乘以255然后输出,并且没有将能量中心移到屏幕中心,而笔者喜欢输出其乘以255后取模再除以100后的图。
第一幅是原图512 * 512 第二幅是它的谱图 |
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。