傅里叶变换及应用python版(1)

欢迎关注公众号:sumsmile /专注图形学、Android开发

一、前言

傅里叶变换是科学、数学、通信领域最重要的算法之一。Joseph Fourier 在19世界发明傅里叶变换,最开始用于热传导分析,后来在各个领域得到广泛应用。

这篇文章谈谈我对傅里叶变换的理解和学习方法,既有理论基础,也讲代码实践。

  • 前置知识要求:无(零基础也能看懂)
  • 读完你能收获什么:
    • 理解傅里叶变换原理
    • 用python处理简单的一维、二维信号(图像滤波)

限于篇幅,不会详细展开每个公式,对于疑惑的地方,建议读者先记录下来,不要打断本篇文章的学习,之后再逐个查阅资料

二、傅里叶变换基础

傅里叶变换的深入理解,可以参考文末列举的学习资料。此处简单说明相关概念。

开始接触可能会比较抽象,不用着急,毕竟我们不是做基础科研,能理解基础概念,能合理的运用以实现功能即可。

傅里叶级数

傅里叶理论讲的是:任何信号可以由一组正余弦函数表达。其中,每个函数有相位、频率、幅值属性。(相比相位,更多的关注幅值)

比如信号signal_1,只有一个频率为5,即每秒经过5个周期

signal_1 = sin(2π * 5 * t)

时间域的图像为:

在频域空间,则只有一个频率5

比如信号signal_2,由三个正弦函数组成,

  • 频率为5,幅值为1:sin(2π * 5 * t)
  • 频率为7,幅值为1:3*sin(2π * 7 * t)
  • 频率为14,幅值为6:6*sin(2π * 14 * t)

s i g n a l 2 = s i n ( 2 π ∗ 5 ∗ t ) + 3 ∗ s i n ( 2 π ∗ 7 ∗ t ) + 6 ∗ s i n ( 2 π ∗ 14 ∗ t ) signal_2 = sin(2π*5*t) + 3*sin(2π*7*t) + 6*sin(2π*14*t) signal2=sin(2π5t)+3sin(2π7t)+6sin(2π14t)

在频域对应有三个点

由此,可以提炼出傅里叶级数公式,一个周期函数,可以由多个正余弦函数组合而成,每个子函数有不同的周期、幅值:

通过欧拉公式写成复数形式:

此处 C k C_k Ck为复数,如果你对欧拉公式、复数的概念比较模糊,建议此处你停下来,上网搜下欧拉公式的解释

推导过程参考:
https://www.cnblogs.com/TaigaCon/p/4917553.html

傅里叶变换

到此,我们只是知道一个函数可以用多个三角函数组合,但是我们并不知道这些三角函数是什么,它们的频率、幅度是多少呢?

傅里叶变换,即求每个分量的系数:

可以这么理解这个,将 e 2 π i s t e^{2πist} e2πist 看成一个基向量

( e 2 π i s ∗ 1 、 e 2 π i s ∗ 2 、、 e 2 π i s ∗ 3 . . . e^{2πis * 1}、e^{2πis * 2}、、e^{2πis * 3}... e2πis1e2πis2、、e2πis3...),f(t)也看成向量(f(1)、f(2)、f(3)…),则上面那个积分可以看成两个向量的点积,即求f向量在该基向量上的投影

傅里叶逆变换,即根据分量求出原信号函数:

建议有时间,参考我文末给的必读项参考资料,里面有严谨的数学推导。

三、离散傅里叶变换

从连续很自然过渡到离散的傅里叶变换:

F f [ m ] \mathcal{F}f[m] Ff[m]即三角函数的系数,连续傅里叶变换里用 C k C_k Ck表示

观察上面的公式,其实就是将连续的函数f(x)积分,替换到离散的点积。

离散傅里叶逆变换,即求原离散信号:

推导过程参考:
https://www.cnblogs.com/TaigaCon/p/4992463.html

四、快速傅里叶变换(fft)

快速傅里叶变换并没有改变傅里叶变换的原理,只是在计算形式上,做了算法优化。

要完整讲清楚快速傅里叶变换,要花点时间,而且理解起来也有点费劲。对初次接触的同学,知道有这种算法即可,python里对fft有非常好的实现,用的时候知道如何调用即可。

# python fft
scipy.fftpack.fft(signal)

# python ifft
scipy.fftpack.ifft(Ck)

原理是将积分写成矩阵乘法,利用矩阵的周期性、对称性,将原矩阵乘法简化

推导过程可以参考:
https://www.cnblogs.com/TaigaCon/p/5111679.html

五、参考资料

我参考的学习资料 or 课程

https://zhuanlan.zhihu.com/p/19763358

几乎没有公式符号,小白扫盲贴

https://space.bilibili.com/230105574/channel/seriesdetail?sid=1569597

纯数学公式推导,逻辑清晰,帮你建立严谨的认知

https://www.bilibili.com/video/BV1Qx411J7ER/?vd_source=7f6a092b306354c9eef8f3cd5bd5307d

全球经典课程,全程手写板书、幽默热情。有时间的话可以学一遍,比国内老师讲的好太多了。

https://www.cnblogs.com/TaigaCon/category/1189650.html?page=1

https://www.bilibili.com/video/BV12b411W7DN?p=1&vd_source=7f6a092b306354c9eef8f3cd5bd5307d

上面的公开课里需要点微分方程知识,作为简单的复习

https://www.bilibili.com/video/BV1X8411a74G/?vd_source=7f6a092b306354c9eef8f3cd5bd5307d

通过python代码演示,深入浅出讲傅里叶变换的原理及应用,非常棒的课程

下一篇讲代码实践

欢迎关注公众号:sumsmile /专注图形学、Android开发

猜你喜欢

转载自blog.csdn.net/daozi20/article/details/128699594