一、前言

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

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

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

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

二、傅里叶变换基础

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

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

傅里叶级数

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

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

signal_1 = sin(2π * 5 * t)

时间域的图像为:

python 绘制傅里叶图像 python进行傅里叶变换_python 绘制傅里叶图像

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

python 绘制傅里叶图像 python进行傅里叶变换_傅里叶变换_02

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

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

python 绘制傅里叶图像 python进行傅里叶变换_傅里叶变换_03

python 绘制傅里叶图像 python进行傅里叶变换_python_04

在频域对应有三个点

python 绘制傅里叶图像 python进行傅里叶变换_人工智能_05

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

python 绘制傅里叶图像 python进行傅里叶变换_计算机视觉_06

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

python 绘制傅里叶图像 python进行傅里叶变换_python 绘制傅里叶图像_07

此处python 绘制傅里叶图像 python进行傅里叶变换_人工智能_08为复数,如果你对欧拉公式、复数的概念比较模糊,建议此处你停下来,上网搜下欧拉公式的解释

推导过程参考:

傅里叶变换

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

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

python 绘制傅里叶图像 python进行傅里叶变换_傅里叶变换_09

可以这么理解这个,将python 绘制傅里叶图像 python进行傅里叶变换_人工智能_10 看成一个基向量

(python 绘制傅里叶图像 python进行傅里叶变换_人工智能_11),f(t)也看成向量(f(1)、f(2)、f(3)…),则上面那个积分可以看成两个向量的点积,即求f向量在该基向量上的投影

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

python 绘制傅里叶图像 python进行傅里叶变换_傅里叶变换_12

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

三、离散傅里叶变换

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

python 绘制傅里叶图像 python进行傅里叶变换_python 绘制傅里叶图像_13

python 绘制傅里叶图像 python进行傅里叶变换_人工智能_14

python 绘制傅里叶图像 python进行傅里叶变换_傅里叶变换_15即三角函数的系数,连续傅里叶变换里用python 绘制傅里叶图像 python进行傅里叶变换_计算机视觉_16表示

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

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

python 绘制傅里叶图像 python进行傅里叶变换_计算机视觉_17

推导过程参考:

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

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

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

# python fft
scipy.fftpack.fft(signal)

# python ifft
scipy.fftpack.ifft(Ck)

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

python 绘制傅里叶图像 python进行傅里叶变换_人工智能_18