本文目的是方便地理解傅里叶变换,不一定要掌握原理和计算方法,只要会用即可。
一、傅里叶级数
任何周期函数都可以用正弦函数和余弦函数构成的无穷级数来表示,称为它的傅里叶级数,即:
f(t)=a02+∞∑n=1[ancos(nωt)+bnsin(nωt)]
也有另外一种写法:
f(t)=A0+∞∑n=1Ansin(nωt+ψn)
即分解为无数个余弦函数,带有各自的频率和相位。
 |
傅里叶级数 |
二、非周期函数的频率拆分
注意到傅里叶级数中的频率都是f(x)频率的倍数。随着f(x)的周期变大,其频率变小,那么傅里叶级数中的频率间隔变小。当T接近无限大,即f(x)没有周期时,傅里叶级数的频率会变得连续。也就是:
周期函数的频率组成是离散的;
非周期函数的频率组成是连续的。
 |
周期函数与非周期函数的频率图 |
三、傅里叶级数的求法
其基础是三角函数的正交性:频率不同的三角函数(sin(nx)或cos(mx))相乘在一个周期内(x从-π到π)的积分必定为0
傅里叶级数表达式为:
f(t)=c0+∞∑n=1cncos(nωt+φ)
令an=cncosφ, bn=−cnsinφ,可以变换成:
f(t)=c0+∞∑n=1[ancos(nωt)+bnsin(nωt)]
对上式两边同时乘上sin(kωt)并在一个周期上积分,得到:
∫T0f(t)sin(kωt)dt=∫T0c0sin(kωt)dt+∫T0sin(kωt)∞∑n=1[ancos(nωt)+bnsin(nωt)]dt
根据三角函数的正交性,左边∫T0f(t)sin(kωt)dt只剩k频率bk∫T0sin(kωt)2dt等于bkT2;右边∫T0c0sin(kωt)dt=0,也就得到了:
bn=2T∫T0f(t)sin(nωt)dt
同理,
an=2T∫T0f(t)cos(nωt)dt
变换回去,也就是:
cn=√an2+bn2φ=arctan(−bnan)
四、傅里叶级数的复数表示
根据欧拉公式,eiθ=cosθ+isinθ
利用cosθ是偶函数,sinθ是奇函数的性质,可以得到:
cosθ=eiθ+e−iθ2, sinθ=eiθ−e−iθ2i
带入傅里叶级数中,并化简,得到:
f(t)=c0+∞∑n=1[(an−jbn)2ejnωt+(an+jbn)2e−jnωt]
由于:
a−n=2T∫T0f(t)cos(−nωt)dt=anb−n=2T∫T0f(t)sin(−nωt)dt=−bn
令An=(an−jbn)2,可将上式化简为:
f(t)=∞∑n=−∞Anejnωt
再次利用三角函数的正交性,向两边同时乘一个e−jkωt,再在一个周期内积分,得到:
∫T0f(t)e−jkωtdt=∫T0+∞∑n=−∞Anej(n−k)ωtdt
左边∫T0f(t)e−jkωtdt=∫T0Anejkωte−jkωtdt=AkT
也就是:
An=1T∫T0f(t)e−jnωtdt
五、将T推向∞
ω=2πT→0。An不再是离散的,写成F(ω)。变为
f(t)=12π∫∞−∞F(ω)eiωtdω
F(ω)=∫∞−∞f(t)e−iωtdt
(对其中怎么推的还不清楚)
六、用质心的思想理解傅里叶变换
将e−iωt看作是一个不停旋转的方向,其中w是超参数,t是自变量。那么f(t)e−iωt就是向这个方向伸长了多少。随着自变量t的变化,f(t)将螺旋状地产生轨迹,那么上面的F(ω)就是在ω的转速下,f(t)形成的轨迹的质心。
 |
傅里叶变换与质心 |
当原曲线和转速不匹配时,轨迹会相对均匀地分布,质心距离原点近;当原曲线和转速匹配时,轨迹就会偏向于某一边,质心距离原点远。
如果画出在不同转速下,质心与原点的距离,这样得到的曲线,就是它的频率的组成分析,也就是傅里叶变换(其实还是有点不一样的,因为得到的只是一个复数)。
七、图像的傅里叶变换
将离散的复数形式的傅里叶变换,进行相应改写:
F(u,v)=1MNM−1∑x=0N−1∑y=0f(x,y)e−j2π(ux/M+vy/N)
(为什么e的幂直接是两个相加呢)
(如果我没有理解错的话,u∈[0,2M],v∈[0,2N])
这样,f(u,v)表示方向为从中心到(u,v),频率为(u,v)到中心的距离(具体是什么距离,我不清楚)的三角函数。是一个复数,包含了振幅和相位信息。(所以具有中心对称性是吧)
 |
图片傅里叶变换-未中心化 |
 |
图片傅里叶变换-未中心化-物理含义 |
 |
图片傅里叶变换-中心化 |
实际上,应该分别画出实部和虚部才完整:
 |
图像傅里叶变化及旋转 |
中心点是全图灰度的均值(其它位置我暂时还无法理解)
摘抄自:
- b站:【官方双语】形象展示傅里叶变换
- 知乎:傅里叶变换推导详解
- 知乎:通俗讲解:图像傅里叶变换
可供参考的:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)