一、前言

1. 简谐运动

因为傅里叶变换涉及到周期函数、三角函数的相关概念,因此我们有必要在了解傅里叶变换之前先来复习一下简谐运动,简谐运动的函数定义为:

$$ y=A\sin(\omega x+\varphi), \ \omega=\frac{2\pi}{T}=2\pi f $$

其中:

  • $A$:振幅,表示振动物体离开平衡位置的最大距离;
  • $T$:周期,完成一次全振动所需要的时间;
  • $f$:频率,单位时间内完成全振动的次数;
  • $\omega$:角速度(角频率)。

为了更好的理解$A$与$T$的概念,我在Desmos网站中做出$y=2\sin(\pi x+\pi)$的图像:

这下$A$与$T$的概念就比较直观了。

关于相位这个概念,我们单独拿出来再说。

假设:一质点在半径为1的圆周上逆时针做匀速圆周运动,质点的轨迹就是一个以1为半径的圆周。而如果把历史轨迹平铺到时间轴上,也就是把一次次重复的圆用时间拉开,那么我们就得到了正弦函数$y=\sin x$的图像。

为了更好的理解,我从香港科技大学的网站上偷了一张图:

由上面偷来的动图中就可以观察出:

  • $\varphi$:初相位,其实就是$t=0$时候,相位所对应的角度;
  • $\omega t+\varphi$:相位,其实就对质点运动的某一时刻$t$进行“拍照”,即可得到该质点与坐标原点所连接的直线与x轴正方向所形成的角度。

明白了简谐运动的这几个概念,就足够用来理解傅里叶变换中的周期函数和三角函数了。

关于简谐运动的更多介绍请查看:《Python Numerical Methods》——The Basics of Waves

2. What

什么是傅里叶分析?简单来说,就是一句话:

任何一个周期性函数$f(x)=f(x+T)$都可以写成一系列正余弦函数的和。

举个?,在Desmos网站中分别做出

$$ \begin{equation*} \begin{split} y_1 &= \sin x,\\ y_2 &= \sin 2x,\\ y_3 &= \sin 3x,\\ y_4 &= \sin x + \sin 2x + \sin 3x\\ \end{split} \end{equation*} $$

的图像。

为了区分重叠的图像,在每个函数等号左边都加上一个自然数使函数图像可以在Y轴上进行偏移。

由图中可以看出,对于周期函数$y_4 = \sin x + \sin 2x + \sin 3x$的图像,原本是十分复杂的,但是在对其中不同的$\omega$对应的项进行拆分后,就会发现其实这个函数也“不过如此”。

在上面的拆分过程中,$y_4$函数可以看作是一个具有两个维度的函数,第一个维度就是x轴——时间维度,在研究傅里叶分析相关的问题中,我们习惯将其称之为时域。

这种以时间作为参照来观察动态世界的方法我们称其为时域分析。

从这个维度进行分析,我们会发现世间万物都在随着时间不停的改变,并且永远不会静止下来。

而实际上对于一个周期函数$y_4$,其由不同频域$\omega$的函数$y_1$、$y_2$、$y_3$构成,因此我们还可以从另一维的角度来看它,这个维度就是频域。

上面的图片可能过于抽象,我们将其转化为三维空间的图像:

从这张图片中,我们就可以很容易看出来,对于周期函数$y_4$,如果从时域维度看,其是一个随时间变化的函数。但是如果从频域角度来看,其是由频域中不同$\omega$对应的函数$y_1$、$y_2$、$y_3$构成;而且,从频域的角度看,各个函数不再是随时间变化,而是一个永恒不变的曲线。

你眼中看似落叶纷飞变化无常的世界,实际只是躺在上帝怀中一份早已谱好的乐章。

在时域中,基本单元就是“1秒”;而在频域中,基本单元就是$\omega_0$。在时域中,我们使用“0”表示什么都没有,那么在频域中,我们应该怎么表示“0”呢?

频域的“0”是就是当$\omega=0$时,其对应的图像就是$\cos(0·t)$——一个周期无限长的正弦波,也就是一条直线!所以在频域,0频率也被称为直流分量,在傅里叶级数的叠加中,它仅仅影响全部波形相对于数轴整体向上或是向下而不改变波的形状。

3. Why

为什么要进行傅里叶变换?开始讨论这个问题之前,我们先来聊一聊什么叫做变换。

如图所示:

在一个二维平面空间中存在一个平行四边形,我们仅知道三点的坐标(0, 0)(5, 2)(3, 4),如何求最后一个点的坐标呢?

在这个二维空间里,我们可以通过平移两个向量,做出一个平行四边形,然后写出平行四边形顶点的坐标。

上面通过平移求交点的方法,我们运用的是平面几何的思想,而如果我们运用代数的思想来解决这个问题就非常简单了。

另两条边的向量分别为:

$$ \mathbf{x}=[5, 2]^T,\ \mathbf{y}=[3, 4]^T $$

采用代数的方法,我们很容易计算出:

$$ \mathbf{z}=\mathbf{x}+\mathbf{y} = \begin{bmatrix} 5 \\ 2 \end{bmatrix} + \begin{bmatrix} 3 \\ 4 \end{bmatrix} = \begin{bmatrix} 8 \\ 6 \end{bmatrix} $$

而$\mathbf{z}$其实就是坐标原点到平行四边形顶点的一条连线。

这里我们运用的就是变换的思想,我们将一个平面几何的问题转化为了代数问题,从而使问题得到了简化,更容易处理。

傅里叶分析存在的必要性,就是其可以贯穿时域与频域。傅里叶分析可分为傅里叶级数(Fourier Serie)和傅里叶变换(Fourier Transformation)。

Decomposing Fourier transforms — an introduction to time-frequency decomposition
Decomposing Fourier transforms — an introduction to time-frequency decomposition

Tips / 提示

傅立叶级数是针对周期函数的,为了可以处理非周期函数,需要傅立叶变换。

看懂了上面的讲解,其实就很容易理解傅里叶变换可以用来干嘛了。就例如$y_4 = \sin x + \sin 2x + \sin 3x$,如果想从时域维度将其中的$\sin 2x$拿走,几乎是一件办不到的事情,而如果在频域,其只是一条竖线而以。

很多在时域看似不可能做到的数学操作,在频域相反很容易,这就是需要傅里叶变换的地方。尤其是从某条曲线中去除一些特定的频率成分,这在工程上称为滤波,是信号处理最重要的概念之一,只有在频域才能轻松的做到。

二、傅里叶级数的公式推导

这一节,我们将从一个$T=2\pi$的函数周期性函数进行推导,得出傅里叶级数的基本形式;然后再在此基础上,推导一个更为一般的情况,一个$T=2L$的周期性函数的傅里叶级数(Fourier Series)。

1. 三角函数的正交性

三角函数系是:

$$ \{0,\ 1,\ \sin x,\ \cos x,\ \sin 2x,\ \cos 2x, \ \cdots, \ \sin nx, \ \cos nx\} $$

而其中的0、1其实是$\sin (0·x)$与$\cos (0·x)$,所以上述集合也可以写成:

$$ \{\sin nx, \cos nx | n \in R\} $$

类似于空间坐标系中的标准正交基,三角函数系中任意取出两项,对其进行积分的结果必为0:

$$ \left\{\begin{matrix} \int_{- \pi}^{\pi} \sin nx \cos mx\ \mathrm{d}x =0 \\ \int_{- \pi}^{\pi} \cos nx \cos mx\ \mathrm{d}x=0 \end{matrix}\right. $$

其中$m\ne n$。

上面给出的条件是在$m\ne n$的情况下,即在集合系中任意选出两个不相同的基,对其进行相乘结果必然为0。那么如果$m=n$,结果会是怎样呢?

以$\cos mx$为例:

$$ \begin{equation*} \begin{split} & \int_{- \pi}^{\pi} \cos mx \cos mx\ \mathrm{d}x \\ = & \int_{- \pi}^{\pi}[\frac{1}{2}(1+\cos 2mx)] \mathrm{d}x \\ = & \frac{1}{2} (\int_{- \pi}^{\pi}1 \mathrm{d}x + \int_{- \pi}^{\pi} \cos 2mx \mathrm{d}x) \\ = & \frac{1}{2} (x|_{-\pi}^{\pi}+\frac{1}{2m} \int_{- \pi}^{\pi} \cos 2mx \mathrm{d}(2mx)) \\ = & \frac{1}{2}[\pi-(-\pi)+0] \\ = & \pi \end{split} \end{equation*} $$

2. 周期为2π的函数展开为傅里叶级数

设存在一个周期$T=2 \pi$的周期函数$f(x)=f(x+2\pi)$,那么该函数的傅里叶展开级数就可以写为:

$$ \begin{equation*} \begin{split} f(x)&=\sum_{n=0}^{\infty}a_n \cos nx + \sum_{n=0}^{\infty}b_n \sin nx\\ &=[a_0 \cos (0·x)+ \sum_{n=1}^{\infty}a_n \cos nx] + [b_0 \sin (0·x)+ \sum_{n=1}^{\infty}b_n \sin nx]\\ &=a_0+\sum_{n=1}^{\infty}a_n \cos nx+\sum_{n=1}^{\infty}b_n \sin nx \end{split} \end{equation*} $$

有些教材中会写为:

$$ f(x)=\frac{a_0}{2} +\sum_{n=1}^{\infty}(a_n \cos nx + b_n \sin nx) $$

可以看出,下面的式子中多了一个$\frac{1}{2}$,至于这个为什么会多出来这个$\frac{1}{2}$,当我们找出来$a_0$具体的值时就可以明白了。

上面的公式中有两个未知数$a_0$与$a_n$,接下来就是如何求出这两个未知数,从而得到周期函数$f(x)=f(x+2\pi)$的傅里叶展开式的一般表达。

Ⅰ、找$a_0$:

对上式等号两端同时积分,可得

$$ \begin{equation*} \begin{split} \int_{- \pi}^{\pi}f(x)\mathrm{d}x &= \int_{- \pi}^{\pi}a_0\mathrm{d}x + \int_{- \pi}^{\pi}\sum_{n=1}^{\infty}a_n \cos nx\mathrm{d}x + \int_{- \pi}^{\pi}\sum_{n=1}^{\infty}b_n \sin nx \mathrm{d}x\\ &= a_0x|_{-\pi}^{\pi}+\frac{1}{n} \int_{- \pi}^{\pi}\sum_{n=1}^{\infty}a_n \cos (nx)\mathrm{d}(nx)+\frac{1}{n} \int_{- \pi}^{\pi}\sum_{n=1}^{\infty}b_n \sin (nx)\mathrm{d}(nx) \\ &= 2\pi a_0+0+0 \end{split} \end{equation*} $$

所以移项即可求得

$$ a_0=\frac{1}{2\pi}\int_{- \pi}^{\pi}f(x)\mathrm{d}x $$

所以说,上式中第二种表达方法中的$\frac{1}{2}$仅仅是为了好消去,而故意写出来的。

Ⅱ、找$a_n$:①先对等式两边同时乘上$\cos mx$;②两边同时积分。

$$ \int_{- \pi}^{\pi}f(x)\cos mx\mathrm{d}x = \int_{- \pi}^{\pi}a_0\cos mx\mathrm{d}x + \int_{- \pi}^{\pi}\sum_{n=1}^{\infty}a_n \cos nx\cos mx\mathrm{d}x + \int_{- \pi}^{\pi}\sum_{n=1}^{\infty}b_n \sin nx\cos mx \mathrm{d}x $$

由于三角函数的正交性,

$$ \int_{- \pi}^{\pi}\sum_{n=1}^{\infty}b_n \sin nx\cos mx \mathrm{d}x = 0,\\ \int_{- \pi}^{\pi}a_0\cos mx\mathrm{d}x=0 $$

而对于

$$ \begin{equation*} \begin{split} \int_{- \pi}^{\pi}a_n \cos nx\cos mx\mathrm{d}x= \left\{\begin{matrix} 0,\ \text{if } n= m, \\ a_n\int_{- \pi}^{\pi} (\cos nx)^2\mathrm{d}x=a_n \pi,\ \text{if } n\neq m . \end{matrix}\right. \end{split} \end{equation*} $$

带入上式即可化简,求出

$$ \int_{- \pi}^{\pi}f(x)\cos nx\mathrm{d}x =a_n \pi\\ a_n = \frac{1}{\pi} \int_{- \pi}^{\pi}f(x)\cos nx\mathrm{d}x $$

Ⅲ、找$b_n$:按照与Ⅱ中相同的方法即可求得$b_n$,①先对等式两边同时乘上$\sin mx$;②两边同时积分。

$$ b_n = \frac{1}{\pi} \int_{- \pi}^{\pi}f(x)\sin nx\mathrm{d}x $$

总结,根据上面的公式化简,即可求得,对于一个周期函数$f(x)=f(x+2\pi)$,其傅里叶展形式可以写为:

$$ f(x)=a_0+\sum_{n=1}^{\infty}a_n \cos nx+\sum_{n=1}^{\infty}b_n \sin nx $$

其中:

$$ \left\{\begin{matrix} a_0 = \frac{1}{2\pi}\int_{- \pi}^{\pi}f(x)\mathrm{d}x \\ a_n = \frac{1}{\pi} \int_{- \pi}^{\pi}f(x)\cos nx\mathrm{d}x \\ b_n = \frac{1}{\pi} \int_{- \pi}^{\pi}f(x)\sin nx\mathrm{d}x \end{matrix}\right. $$

3. 周期为“2L”的函数展开为傅里叶级数

设存在一个周期$T=2L$的周期函数$f(t)=f(t+2L)$,利用换元的方法进行操作。

另$t=\frac{L}{\pi}x$,当$t=2L$时,$x=2\pi$,另

$$ f(t) = f(\frac{L}{\pi}x)=g(x) $$

所以说,周期函数$g(x)=g(x+2\pi)$的周期$T=2\pi$。由上一节所推导的结果即可写出$g(x)$的展开形式,仅需要对换元后的参数进行变化即可:

$$ x=\frac{\pi}{L}t\Longrightarrow \begin{cases} \cos nx=\cos \frac{n\pi}{L}t \\ \sin nx=\sin \frac{n\pi}{L}t \\ g(x)=f(t) \\ \int_{- \pi}^{\pi}\mathrm{d}x = \frac{\pi}{L}\int_{- L}^{L}\mathrm{d}t \end{cases} $$

带入化简即可求得

$$ f(t)=a_0+\sum_{n=1}^{\infty}a_n \cos \frac{n\pi}{L}t+\sum_{n=1}^{\infty}b_n \sin \frac{n\pi}{L}t $$

其中:

$$ \left\{\begin{matrix} a_0 = \frac{1}{2L}\int_{-L}^{L}f(t)\mathrm{d}t=\frac{1}{T}\int_{0}^{T}f(t)\mathrm{d}t \\ a_n = \frac{1}{L} \int_{- L}^{L}f(t)\cos \frac{n\pi}{L} \mathrm{d}t=\frac{2}{T}\int_{0}^{T}f(t)\cos n \omega t \mathrm{d}t \\ b_n = \frac{1}{L} \int_{- L}^{L}f(t)\sin \frac{n\pi}{L} \mathrm{d}t=\frac{2}{T}\int_{0}^{T}f(t)\sin n \omega t \mathrm{d}t \end{matrix}\right. $$

三、傅里叶变换的公式推导

1. 问题的提出

在工程应用中,$t$一般都从0开始,当周期$T=2L$的周期函数$f(t)=f(t+2L)$时,$ \omega=\frac{2\pi}{T}$。在这种情况下,积分的形式可以变为:

$$ \int_{- L}^{L}\mathrm{d}t \Rightarrow \int_{0}^{2L}\mathrm{d}t \Rightarrow\int_{0}^{T}\mathrm{d}t $$

对于一个没有周期性的函数,是否可以将其看作一个$T \to \infty$的周期函数?

Tips / 提示

傅里叶变换就是将一个时域非周期的连续信号,转换为一个在频域非周期的连续信号。

2. 欧拉公式

欧拉公式:

$$ e^{i\theta}=\cos \theta+ i \sin \theta $$

一个包含了指数、虚数、三角函数的宇宙最美公式。

Euler's formula
Euler's formula

由欧拉公式可以推导出:

$$ \left\{\begin{matrix} \cos \theta = \frac{1}{2}(e^{i\theta}+e^{-i\theta}) \\ \sin \theta = -\frac{1}{2}i(e^{i\theta}-e^{-i\theta}) \end{matrix}\right. $$

暂可不必去了解欧拉公式的推导过程。

3. 将欧拉公式带入傅里叶级数

$$ \begin{equation*} \begin{split} f(x) &= a_0+\sum_{n=1}^{\infty}a_n \cos nx+\sum_{n=1}^{\infty}b_n \sin nx \\ &= a_0 + \sum_{n=1}^{\infty}[\frac{1}{2}a_n(e^{in\omega t}+e^{-in\omega t}) -\frac{1}{2}ib_n(e^{in\omega t}-e^{-in\omega t})] \\ &= a_0 + \sum_{n=1}^{\infty}[\frac{a_n-ib_n}{2}e^{in\omega t}+ \frac{a_n+ib_n}{2}e^{-in\omega t}] \\ &= a_0 + \sum_{n=1}^{\infty}\frac{a_n-ib_n}{2}e^{in\omega t}+ \sum_{n=1}^{\infty}\frac{a_n+ib_n}{2}e^{-in\omega t} \end{split} \end{equation*} $$

另上式中的第三项中$-n=x$,第三项即可化简为:

$$ \sum_{n=1}^{\infty}\frac{a_n+ib_n}{2}e^{-in\omega t}=\sum_{x=-\infty}^{-1}\frac{a_{-x}+ib_{-x}}{2}e^{ix\omega t} $$

而第一项则可以写为:

$$ a_0=\sum_{n=0}^{0}a_0e^{in\omega t} $$

带入化简后的第一项与第三项到原式中,得:

$$ \begin{equation*} \begin{split} f(x) &= a_0 + \sum_{n=1}^{\infty}\frac{a_n-ib_n}{2}e^{in\omega t}+ \sum_{n=1}^{\infty}\frac{a_n+ib_n}{2}e^{-in\omega t} \\ &= \sum_{n=0}^{0}a_0e^{in\omega t} + \sum_{n=1}^{\infty}\frac{a_n-ib_n}{2}e^{in\omega t} + \sum_{n=-\infty}^{-1}\frac{a_{-n}+ib_{-n}}{2}e^{in\omega t} \end{split} \end{equation*} $$

另:

$$ C_n = \left\{\begin{matrix} \frac{a_{-n}+ib_{-n}}{2}, \text{if } n<0, \\ a_0, \text{if } n=0, \\ \frac{a_n-ib_n}{2}, \text{if } n>0. \\ \end{matrix}\right. $$

所以得:

$$ f(x)=\sum_{n=-\infty}^{\infty}C_ne^{in\omega t} $$

对于$C_n$,带入

$$ \left\{\begin{matrix} a_0 = \frac{1}{2L}\int_{-L}^{L}f(t)\mathrm{d}t=\frac{1}{T}\int_{0}^{T}f(t)\mathrm{d}t \\ a_n = \frac{1}{L} \int_{- L}^{L}f(t)\cos \frac{n\pi}{L} \mathrm{d}t=\frac{2}{T}\int_{0}^{T}f(t)\cos n \omega t \mathrm{d}t \\ b_n = \frac{1}{L} \int_{- L}^{L}f(t)\sin \frac{n\pi}{L} \mathrm{d}t=\frac{2}{T}\int_{0}^{T}f(t)\sin n \omega t \mathrm{d}t \end{matrix}\right. $$

可得,当$n>0$时:

$$ \begin{equation*} \begin{split} C_n &= \frac{a_{n}-ib_{n}}{2} \\ &= \frac{1}{2}[(\frac{2}{T}\int_{0}^{T}f(t)\cos n \omega t \mathrm{d}t)-i(\frac{2}{T}\int_{0}^{T}f(t)\sin n \omega t \mathrm{d}t)] \\ &= \frac{1}{T}\int_{0}^{T}f(t)(\cos n \omega t-i\sin n \omega t)\mathrm{d}t \\ &= \frac{1}{T}\int_{0}^{T}f(t)e^{-in\omega t}\mathrm{d}t \end{split} \end{equation*} $$

当$n<0$时:

$$ \begin{equation*} \begin{split} C_n &= \frac{a_{-n}+ib_{-n}}{2} \\ &= \frac{1}{2}[(\frac{2}{T}\int_{0}^{T}f(t)\cos n \omega t \mathrm{d}t)-i(\frac{2}{T}\int_{0}^{T}f(t)\sin n \omega t \mathrm{d}t)] \\ &= \frac{1}{T}\int_{0}^{T}f(t)(\cos n \omega t-i\sin n \omega t)\mathrm{d}t \\ &= \frac{1}{T}\int_{0}^{T}f(t)e^{-in\omega t}\mathrm{d}t \end{split} \end{equation*} $$

当$n=0$时:

$$ C_n = \frac{1}{T}\int_{0}^{T}f(t)\mathrm{d}t $$

所以,$C_n$可以写为:

$$ C_n = \frac{1}{T}\int_{0}^{T}f(t)e^{-in\omega t}\mathrm{d}t $$

所以说,一个周期为T的函数的展开傅里叶级数复数形式为:

$$ f(t)=\sum_{n=-\infty}^{\infty}[\frac{1}{T}\int_{0}^{T}f(t)e^{-in\omega t}\mathrm{d}t]e^{in\omega t} $$

4. 傅里叶变换公式

对于一个周期为T的函数$f(t)_T=f(t+T)$,其复数形式的傅里叶展开式为:

$$ f(t)=\sum_{n=-\infty}^{\infty}C_ne^{in\omega_0 t} $$

其中$\omega_0=\frac{2\pi}{T}$被称为基频率。

对于一个非周期函数(也可以称之为周期无穷大的函数),其$T \to \infty$,那么$\omega$就会无穷小,与之对应

$$ \Delta \omega = (n+1)\omega_0-n\omega_0=\omega_0=\frac{2\pi}{T} $$

不同频率之间的“间隔”也会越来越小,原来的离散型分布也会变成连续型分布。

所以说,原来

$$ f(t)_T=\sum_{n=-\infty}^{\infty}[\frac{\Delta\omega}{2\pi}\int_{-\frac{T}{2}}^{\frac{T}{2}}f(t)e^{-in\omega_0 t}\mathrm{d}t]e^{in\omega_0 t} $$

中的

$$ \sum_{n=-\infty}^{+\infty}\Delta\omega = \int_{-\infty}^{+\infty}\mathrm{d}\omega $$

所以,原函数的可以写成:

$$ f(t)=\frac{1}{2\pi}\int_{-\infty}^{+\infty}\left [\int_{-\infty}^{+\infty}f(t)e^{-i\omega t}\mathrm{d}t\right ]e^{i\omega t} \mathrm{d}\omega $$

其中,上式被称为傅里叶变换的逆变换(Inverse Fourier Transform, IFT),中括号内部的

$$ F(\omega)=\int_{-\infty}^{+\infty}f(t)e^{-i\omega t}\mathrm{d}t $$

被称为傅里叶变换(Fourier Transform, FT)。

四、参考阅读

  1. YouTube @李永乐老师:傅立叶变换如何理解?美颜和变声都是什么原理?李永乐老师告诉你
  2. Jez Swanson[由杜尚明翻译]:傅里叶变换交互式入门
  3. 知乎 @Heinrich:傅里叶分析之掐死教程(完整版)
  4. Bilibili @DR_CAN:纯干货数学推导_傅里叶级数与傅里叶变换
  5. Duke Institute for Brain Sciences Methods Meetings
  6. 《Python Numerical Methods》——Chapter 24. Fourier Transform
  7. Clean Up Data Noise with Fourier Transform in Python

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=15u5vv5oyb6kc