傅里叶级数与变换

一个热学问题

傅里叶级数 Fourier Transform 是法国数学家、物理学家 Joseph Fourier 在研究一个热学问题提出的。

想象一根长度为 1 的理想细杆,在时刻 0,其各处温度分布不均匀,可以用一个函数 \(f(x)\) 表示位置 \(x\) 处的温度。接下来,随着时间流动,只考虑细杆内部的热交换,杆子各处的温度将趋于一致。此时,我们需要一个二元函数 \(f(x,t)\) 来描述时刻 \(t\) 的各处温度。如果我们知道了 \(f(x,0)\) ,如何推出 \(f(x,t)\) 呢?

https://images.shwstone.cn/heateq_eee98166ed7e997e913e0c76e220b3fe.png

一个工具是傅里叶定律。它表明,通过材料的热传递率与温度的负梯度以及与热量流经的垂直于该梯度的面积成正比。既然是细杆,我们就不考虑面积。不妨设各点的内能为 \(Q\),各点热流速度为 \(q\) ,我们可以描述如下:

\[ \begin{aligned} q &= -k\frac{\partial f}{\partial x} \\ -\frac{\partial q}{\partial x}&=\frac{\partial Q}{\partial t} = c \rho \frac{\partial f}{\partial t}\\ \Rightarrow \frac{\partial f}{\partial t} &= \frac{k}{c\rho}\frac{\partial ^2f}{\partial x^2} \end{aligned} \]

最后得到的是著名的扩散方程。这方程有什么特点呢?

一个事实是,如果 \(f(x,0)\) 是三角函数,这个方程将会很容易:

\[ \begin{aligned} \frac{\partial f}{\partial t} &= -\frac{k}{c\rho}f \\ \Rightarrow f(x, t) &= f(x, 0) e^{-\frac{k}{c\rho}t} \end{aligned} \]

直观地说,棒上各处温度将以相同的指数衰减速度趋向平均值。

接下来,傅里叶研究了三角函数,发现了一个有趣的性质:许多函数都可以被看作可数个三角函数的和。

这其实蕴含了一种思想:如果我们定义 \(\frac{1}{\pi}\int_{-\pi}^{\pi}f(x)g(x)\mathrm dx\) 为函数 \(f,g\) 的内积,会发现一个事实:

\[ \begin{aligned} \frac{1}{\pi}\int_{-\pi}^{\pi}\sin(nx)\sin(mx)\mathrm dx &= \left \{ \begin{aligned} 1 &, n=m\\ 0 &, n\ne m\end{aligned} \right . \\ \frac{1}{\pi}\int_{-\pi}^{\pi}\cos(nx)\cos(mx)\mathrm dx &= \left \{ \begin{aligned} 1 &, n=m\\ 0 &, n\ne m\end{aligned} \right . \\ \frac{1}{\pi}\int_{-\pi}^{\pi}\sin(nx)\cos(mx)\mathrm dx &= 0 \end{aligned} \]

这说明在我们定义的内积空间中,所有的 \(\sin(nx),\cos(nx)\) 互相正交。我们所没有说明的一点是,这些函数不仅是正交的,还是完整的,共同构成了在 \([-\pi,\pi]\) 上可积的函数空间的一组标准正交基基。完整性的证明需要一些我还不会的函数和希尔伯特空间知识。

回到正题。傅里叶发现,对于大多数周期为 $ 2$ 的函数,可以写成如下形式:

\[ f(x) = A_0 + \sum_{n=1}^{\infty}A_n\cos(nx) + B_n\sin(nx) \]

这有什么好处呢?我们已经说了,三角函数有扩散方程的一个简单解,而微分方程的解是线性可加的,不难想到,如果将函数转化成三角函数的和,每一项随时间的变化都可以得到,则原函数关于时间的变化也可以得到了。

如何才能够确定上式的 \(A,B\) 呢?

简单借助线性代数的视角:如果说三角函数(和常函数 \(\frac12\))构成一组标准正交基,确定每个基的系数只需要与基向量做一次内积。在我们这里也就是进行一次积分:

\[ \begin{aligned} A_0 &= \frac{1}{2\pi}\int_{-\pi}^{\pi}f(x)\mathrm dx\\ A_n &= \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cos(nx)\mathrm dx\\ B_n &= \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\sin(nx)\mathrm dx \end{aligned} \]

值得注意的是如下几点:

  1. \(A_0\) 代表了函数的平均值。这一点在后面被一直沿用。

  2. 对于周期为 \(L\) 的函数,我们往往选择 \(\sin(\frac{2n\pi}{L}x)\) 做基,具体计算方法扩展如下:

    \[ \begin{aligned} A_0 &= \frac{1}{L}\int_{-\frac L2}^{\frac L2}f(x)\mathrm dx\\ A_n &= \frac2L\int_{-\frac L2}^{\frac L2}f(x)\cos(\frac{2n\pi}{L}x)\mathrm dx\\ B_n &= \frac2L\int_{-\frac L2}^{\frac L2}f(x)\sin(\frac{2n\pi}{L}x)\mathrm dx \end{aligned} \]

  3. 具体积分区间也可以变化,只要记得根据周期确定系数。

这代表了什么?

对傅里叶级数有一点了解的人,应该都能明白,它把函数拆成了一堆三角函数的和。比如说,一段由钢琴弹奏的和弦,使用傅里叶变换后,可以清晰地知道这个和弦由哪些音组成(事实上,由于钢琴也具有其音色特征,傅立叶变换结果应该还会有一些小幅度的频率)。

但是,一旦你翻开一本高等数学教材,就会看到下面这个式子:

\[ f(x) = C_n\sum_{n=-\infty}^{\infty}\mathrm \exp(\mathrm i \frac{2n\pi}{L} x) \]

这又是啥呢?

从前文的式子推出这个式子是容易的:注意到 \(e^{i0\pi}=1\)\(\sin(x)=\frac{\exp(\mathrm ix) - \exp(\mathrm -ix)}{2\mathrm i}\)\(\cos(x)=\frac{\exp(\mathrm ix) + \exp(\mathrm -ix)}{2}\)。不难得出:\(C_0 = A_0\)\(C_n = \frac{A_n-\mathrm iB_n}{2}\)\(C_{-n}=\frac{A_n + \mathrm iB_n}{2}\)

回带可以证实:

\[ C_n = \frac{1}{L}\int_{-\frac L2}^{\frac L2} f(x)\exp(-\mathrm i \frac{2n\pi}{L} x) \mathrm dx \]

从形式上我们理解了这个式子的来历,但这个式子到底说明了什么?有两个问题:

  1. 原来的级数表现了三角函数的叠加,现在的级数表现了什么?
  2. 这个式子并没有限制 \(f\) 为实函数。如果 \(f\)\(\mathbb R \to \mathbb C\) 的函数会如何呢?

有趣的是,解决了第二个问题,我们才能解决第一个问题。

想象一个 \(\mathbb R \to \mathbb C\) 的性质良好的周期函数,随着自变量从小到大,函数值在复平面上应该画出一个封闭曲线。你可以想象 \(f\) 是任何复杂形状,比如你的自画像。

我们来考察一些简单的 \(\mathbb R \to \mathbb C\) 函数。比如 \(C_n\exp(\mathrm i \frac{2n\pi}{L} x)\)

随着 \(x\) 的变化,这个函数在复平面上会画出一个起点为 \(C_n\) 的圆。当 \(x\)\(-\frac L2\) 变化到 \(\frac L2\),这个圆将被正好画 \(n\) 次。换句话说,\(C_n\) 决定了圆的大小和相位,\(n\) 决定了画圆的频率。

接下来将所有级数相加。单个级数就像一个圆规,绕着起点转动;而多个级数相加,意味着下一个圆规的针脚始终跟随上一个圆规的笔尖。就像下图:

https://images.shwstone.cn/fourier_tri_5_4f747a613ce8dc6fbbf9ac7c28dc2006.gif

很形象了吧。

另外有几点 POV:

  1. \(C_0\) 仍然是函数的重心。
  2. \(\exp(\mathrm i 2n \pi)\) 也构成了一组复函数空间的基。
  3. 实函数只是一种特殊情况。如果两个频率相同方向相反的圆起点互为复共轭,这两个圆的叠加将始终在实轴上。也就是说,实傅里叶级数有 \(C_n = \overline{C_{-n}}\)

这一段本来很详细结果没保存直接关了,摆烂了。

更进一步!

上面,我们只是讨论了一个有限区间内的函数如何变换。如果函数定义域是整个实数域呢?

不妨定义 \(k_n = n \Delta k, \Delta k = \frac{2\pi}{L}\)。我们有:

\[ \begin{aligned} f(x) &= \sum_{n = -\infty}^{+\infty}C_n \exp(\mathrm i k_nx) = \sum_{n = -\infty}^{+\infty}\frac{C_n 2\pi}{\Delta k} \exp(\mathrm i k_nx) \frac{\Delta k}{2\pi}\\ C_n &= \frac{1}{L}\int_{-\frac L2}^{\frac L2} f(x)\exp(-\mathrm i k_n x) \mathrm dx \end{aligned} \]

现在,我们定义:

\[ F(k) \equiv \lim_{L \to +\infty}\left[\frac{C_n 2\pi}{\Delta k}\right]_{k_n = k}= \int_{-\infty}^{+\infty}f(x)\exp(- \mathrm i kx)\mathrm dx \]

要理解为何 \(F(k)\) 是收敛的,只需要注意到 \(C_n\) 中的 \(\frac 1L\)\(\Delta k\) 中的 \(\frac 1L\) 约分了。

再回来看 \(f(x)\),当 \(L \to +\infty\)

\[ f(x) = \lim_{L\to +\infty} \left[\sum_{n = -\infty}^{+\infty}\frac{C_n 2\pi}{\Delta k} \exp(\mathrm i k_nx) \frac{\Delta k}{2\pi}\right] = \int_{-\infty}^{+\infty}F(k)\exp(\mathrm ikx)\frac{\mathrm dk}{2\pi} \]

我们把 \(F\) 叫做 \(f\) 的傅里叶变换结果,反之叫做逆傅立叶变换。整理一下,他们之间的互换公式为:

\[ \begin{aligned} F(k) &= \int_{-\infty}^{+\infty}f(x)\exp(- \mathrm i kx)\mathrm dx \\ f(x) &= \frac {1}{2\pi} \int_{-\infty}^{+\infty}F(k)\exp(\mathrm ikx)\mathrm dk \end{aligned} \]

推导很快,意义不明。这到底说了个啥呢?

整篇文章中,线性始终是我们的有力工具。如果我们能搞清楚一个特定频率的圆周行为如何,那么将不同圆周的叠加就很好想象。

比如对于一个复平面上频率为 \(w\) 的圆周 \(f(x) =\exp(\mathrm i wx)\),它的傅里叶变换结果如下:

\[ F(k) = \left\{\begin{aligned} &+\infty,& k=w\\ &0,& k \ne w \end{aligned}\right. \]

Cool!显然积分是一个很好的滤波器。但是结果发散到无穷去了。这不太好,我们就只能知道有哪些频率,但对他们的振幅一无所知。所以傅里叶变换对函数还是有一些要求。我们希望对于 \(f\),有:

\[ \int_{-\infty}^{+\infty}\mathrm dx |f(x)|^2 \]

如果做不到这一点,或在实践中无法得到全域的函数,傅里叶变换也可以在一个定区间上进行:

\[ F(k) = \int_{L}^{R}f(x)\exp(- \mathrm i kx)\mathrm dx \]

此时会有一个很有趣的现象:由于区间有限,与 \(w\) 不同的 \(k\) 对应的 \(F(k)\) 无法收敛到 0。区间越短,这个误差越大。反之,区间越长,这个误差越小。这被称作时域-频域测不准原理,是测不准原理的一种宏观体现。

具体探究 \(F(k)\) 的大小:这两个量由 \(\exp(\mathrm ikx)\) 分量在原函数出现的幅度和占比共同决定。可以被看作是频率 \(k\) 的权重。不难发现,无论该分量在函数的前半定义域出现,还是在后半定义域出现,\(F(k)\) 的值不会有任何影响。所以,傅里叶变换在抽离频域之后,完全丧失了时域信息。在实践中,我们往往采用分段傅里叶变换来补充时域信息,或是采用小波变换等其他工具。

最后是一些 POV:

  1. \(F(0)\) 依旧是原函数的重心。

  2. 为了真实理解积分起到的“滤波器”作用和 \(\exp\) 出现的原因,你可以想象将函数按照一定速度“缠”在一个圆周上。改变缠绕的速度,观察函数的重心变化。“缠”的动作其实就是乘上了一定频率的圆周 \(\exp(\mathrm ikx)\),之后再积分得到新函数的重心。你也可以想象整个函数在频域上平移了 \(k\),这样新的 \(F(0)\) 就是原来的 \(F(k)\)3Blue1Brown 的视频清晰地展示了这一点。或者这个网站也可以。

    https://images.shwstone.cn/fouriertransform_1a00d1cbb7c22483d3917d67e8a6e1c7.gif
  3. 始终记住实数只是复数的特殊情况。上一条的视频只是展示了实函数怎么变换的。对于一个复值函数,你仍然可以想象复平面一个非常复杂的曲线,只是现在无需闭合。

后记

这只是一篇理解向的关于傅里叶变换的文章。其中有很多内容,比如是否收敛,收敛到复数域究竟意味着什么,以及所具有的一些性质(例如加减、卷积等操作对应的频域变换)都没有提及。有些内容已经是我暂不能及的复变函数知识,就权当为自己抛砖引玉。

现在的高数书上都只说复指数形式只是为了“方便”,抛却了复数正真的完整性和优美,将傅里叶变换事实上变成了一个黑箱工具。这是最不方便的。应该意识到,所有的实数只是复平面的一部分,只有将复数完全考虑,才能发挥傅里叶的潜力。