我的书桌上现在摊着两本笔记:左边是线性代数,右边是量子力学。标题里“线性代数 or 量子力学”其实是个伪命题,因为这两本笔记翻到后面,都会跳出一个共同的名字——傅里叶。这篇外传要写的,就是我从一次跨学科复习中整理出来的《傅里叶级数与傅里叶变换学习笔记》,记录我如何用线性代数的视角重新理解傅里叶,又如何在量子力学的位置-动量表象切换中看到同一个数学工具。
这篇笔记适合谁读?正在啃线性代数、却被“内积空间”“正交基”搞得云里雾里的人;正在学量子力学、被位置表象和动量表象来回切换绕晕的人;以及在信号处理里看过无数频谱图、却始终没弄明白它和数学课里傅里叶级数有什么关系的人。我不会绕开公式,但每个公式我都会解释一遍它到底在干什么。
1. 为什么傅里叶是一道连接线性代数与量子力学的桥
1.1 把傅里叶变换看成一次换基
线性代数最核心的事就一件:选一组基,然后把向量表示成这组基的线性组合。三维空间里,随便一个向量都可以写成三个坐标轴方向的叠加,坐标就是它在每个方向上的投影大小。如果换一组基,坐标会变,但向量本身没变,这就是坐标变换。
函数也可以这样想:把函数看成一个无穷维的向量。什么叫无穷维?你每隔一个极小的时间间隔记一个函数值,把时间间隔取得越来越密,函数就有无穷多个取值,这就是一个无穷维向量。傅里叶级数做的事,就是把这个无穷维向量投影到一组由 cos 和 sin 构成的坐标轴上。每一个频率分量的系数,就是函数在那个方向上的坐标。
这个视角一旦建立,很多问题顿时就通了:“傅里叶变换是连续版本的坐标变换”这句话,比我当年背下来的任何性质都更有用。它解释了为什么傅里叶变换可逆、为什么有帕塞瓦尔定理、为什么频域和时域是同一件事的两种描述——因为向量还是那个向量,只是换了坐标系。
1.2 位置表象与动量表象:量子力学里的换基
量子力学里,同一个量子态可以用坐标波函数 ψ(x) 描述,也可以用动量波函数 φ(p) 描述。数学上两者互为傅里叶变换。用线性代数的语言说,这就是同一个向量在“位置基”下的坐标和在“动量基”下的坐标,傅里叶变换就是这两套坐标之间的转换矩阵。
你会看到量子力学教材翻几页就会出现傅里叶变换,这不是数学老师在刷存在感,而是因为位置算符和动量算符天然不对易。想要从位置表象切到动量表象,唯一自然的线性变换就是傅里叶变换。另一件有意思的事是,测量位置就是把态矢投影到某个点对应的基矢上,测量动量就是投影到一个平面波对应的基矢上。
所以为什么标题写成“线性代数 or 量子力学”?因为这两个领域在傅里叶这里根本不是二选一,而是同一套线性代数思想在不同物理场景里的两个投影。这也是我把这篇笔记称为“外传”的原因:主线是量子力学,但数学内核是线性代数。
1.3 这篇笔记的结构安排
下面我会按自己的学习顺序展开:先讲傅里叶级数,也就是周期信号的分解;再让周期趋于无穷,自然引出傅里叶变换;然后讨论离散傅里叶变换和 FFT 的实操细节;最后用线性代数的语言重新讲一遍傅里叶,包括算符本征函数和不确定性原理的代数根源。每一段都会把公式背后“为什么要这样做”讲清楚。
2. 傅里叶级数:周期信号在无穷维空间里的坐标展开
2.1 先找到一组正交基:三角函数系的正交性
先说展开式。一个周期为 T 的函数 f(t),可以写成
f(t) = a₀/2 + Σₙ (aₙ cos(nωt) + bₙ sin(nωt)),其中 ω = 2π/T。
这个式子的结构像极了向量分解:左边是原始函数,右边是无穷多个基向量乘上对应的坐标。a₀/2 这种写法看着别扭,但这样规定之后,a₀ 正好等于 f(t) 在一个周期内的平均值,后续公式也都能统一。
为什么偏偏用三角函数,而不是随便一组别的函数?关键在正交性。定义函数内积为 ⟨g,h⟩ = ∫ g(t)h(t)dt,积分区间取一个周期。在这个内积下,不同频率的三角函数相互垂直:∫ cos(nωt)cos(mωt)dt 在 n≠m 时为 0,∫ sin(nωt)sin(mωt)dt 在 n≠m 时也为 0,任意 cos 和 sin 的乘积积分同样等于 0。而同一个函数和自己做内积不为零,∫ cos²(nωt)dt 和 ∫ sin²(nωt)dt 都等于 T/2。
这就是基的判定条件:一组基里的向量彼此正交,且都有非零的“长度”。后面计算系数的时候你会发现,正是这种正交性让所有交叉项自动消失,否则求每个 aₙ 会变成解一个无穷维线性方程组,完全没法动手。
2.2 傅里叶系数的计算:把函数投影到基上
有了正交性,求系数就是一次简单的内积操作。把展开式两边同时乘以 cos(mωt) 并在一个周期内积分,右边除了和 cos(mωt) 匹配的那一项之外,其余项全部因为正交性归零,于是得到
aₘ = (2/T) ∫ f(t)cos(mωt)dt,
同理
bₘ = (2/T) ∫ f(t)sin(mωt)dt。
这个推导我当年用了一整页纸,现在回头看其实只有一行:系数 = 函数与基函数的内积 / 基函数与自身的内积。换成生活化的类比,你站在一面墙前,想知道你的影子在墙上有多少成分,只需要把光源调整到某个特定方向,让其他方向的影子全部消失,剩下的就是那个方向的投影长度。傅里叶系数就是一组“频率方向”的投影长度。
建议你自己手动推一次这个公式。推完你才会明白,傅里叶系数从来不是从天而降的,而是内积的自然结果。课本上那些积分表,本质上就是帮你查“投影长度”的便利工具。
2.3 完备性、帕塞瓦尔定理与一个方波例子
为什么确定这些三角函数基够用?这就涉及完备性。简单说,L² 空间里的任何函数都可以用这套基展开到任意精度,项数取得越多,误差越小并趋于零。这就像三维空间里只用三个互相垂直的单位向量就能表示任何向量,只是函数空间是无穷维的,需要无穷多个基。
帕塞瓦尔定理是坐标观点的直接推论:∫|f(t)|²dt = (T/2)Σ(aₙ² + bₙ²)。左边是信号能量,右边是各频率分量的能量之和。它的几何含义就是勾股定理:向量长度的平方等于各坐标分量平方之和。价值在于,你可以在时域算能量,也可以转到频域算能量,哪个方便用哪个。
举个具体例子。周期 T=2 的方波,在 [-1/2, 1/2] 上取 1,其余取 0。代入系数公式算出来 bₙ 全为 0,aₙ = 4 sin(nπ/2)/(nπ),所以偶数项全部消失,奇数项按 1, 1/3, 1/5, ... 衰减。这个 1/n 的衰减速度是重点:方波有突变,不光滑,所以需要很多高频分量才能逼近;而一个纯正弦函数只要一项就精确表达了。函数的平滑程度决定频谱高频分量的衰减速度,这是做信号压缩时最基本的直觉。
2.4 一级注意事项:吉布斯现象和系数约定
第一个坑是吉布斯现象。用有限项傅里叶级数逼近方波时,在跳跃点附近会出现大约 9% 的过冲,而且无论加多少项,这个过冲都不会消失,只会越来越窄、越来越靠近跳变点。直观解释是:方波在跳变处有无限陡的斜率,有限项三角级数永远达不到那样的陡峭程度,只能以过冲和振铃来“挣扎”。图像压缩中边缘出现振铃伪影,根源就在这里。
第二个坑是约定不统一。有的教材用 e^(iωt) 作为正变换核,有的用 e^(-iωt);逆变换前面的系数 1/2π 放哪边,各家也不一样。我吃过亏:拿着 A 教材的系数公式,直接用 B 教材的逆变换写程序,结果频谱形状对了,但幅值差了一个因子。后来学乖了,在自己的笔记第一页固定写清楚:正变换用 e^(-iωt),逆变换带 1/2π,之后所有推导和程序都跟这套约定对齐。
3. 傅里叶变换:从离散频谱到连续频谱
3.1 周期趋于无穷:级数如何变成积分
非周期函数不能直接套傅里叶级数,因为根本没有“基频”这个概念。处理办法是把周期 T 推向无穷:频域里相邻谐波的间隔 Δω=2π/T 会越来越小,当 T→∞,离散的频谱线连成一片,叠加号就变成了积分号。
于是得到傅里叶变换对:
F(ω) = ∫f(t)e^(-iωt)dt,逆变换 f(t) = (1/2π)∫F(ω)e^(iωt)dω。
很多人一开始对 1/2π 放哪里非常纠结。我的建议是不要纠结到影响学习,认准一套定义用到底。物理学家喜欢对称写法,正逆变换各带 1/√(2π);工程领域常常把 1/2π 全部塞到逆变换里。本质是一样的,只是能量如何分配的问题,就像同一笔钱,左边口袋还是右边口袋的区别。
从级数到积分的过渡,建议亲手写一遍。你会看到离散频率 nω 如何变成连续变量 ω,积分核 e^(-iωt) 如何取代离散的 e^(-inωt),以及求和符号如何退化成广义积分。这个过程比死记定义有价值得多。
3.2 常用性质与变换对:记住这几组就够用
傅里叶变换的性质不需要全背,但下面这几条必须熟到条件反射的程度。
线性:变换是线性的,叠加原理直接可用,处理多个信号的和根本不用重新推。
时移:f(t-t₀) 的频谱是 F(ω)e^(-iωt₀)。意思很直观:时间轴上平移一个量,不会改变频率成分,只是让每个频率分量都转了一个与频率成正比的相位。频移:乘以 e^(iω₀t) 会把整个频谱搬到 ω₀ 处,调制技术的基础就是这个性质。
尺度变换:f(at) 对应的频谱是 (1/|a|)F(ω/a)。时间被压得越窄,频谱越宽,这就是后面要说时宽带宽积的由头。
卷积定理:时域卷积对应频域乘积。这是整个信号处理课的镇店之宝,它把复杂的卷积积分变成一次乘法,无数滤波器设计都是靠这条性质推出来的。
常用变换对我列几个高频出现的:矩形脉冲对应 sinc 函数;高斯函数变换后仍是高斯函数;δ 函数对应常数;常数对应 δ 函数;单位阶跃对应 1/(iω) 加上一个 δ 项。把这些当成“坐标系转换表”背下来,做题和读文献会快很多。
3.3 从连续到离散:采样、频谱泄漏与 FFT 实操
计算机没法处理连续的 F(ω),只能对采样后的离散序列做离散傅里叶变换。设采样间隔为 Ts,采样率为 fs=1/Ts。离散化之后,频谱会在频率轴上以 fs 为周期重复,这就是数字频谱里必然出现镜像的原因。如果原始信号里有高于 fs/2 的成分,这些高频会被“折叠”回低频区,形成混叠,看起来像低频成分凭空多了不少。这个 fs/2 就是奈奎斯特频率。
工程实操里还有两个最常见的坑。第一个是频谱泄漏:对一段有限长的正弦波做 FFT,频谱不是干净的一根线,而是变成一根带拖尾的峰。原因是你对无限长信号开了一个有限长的“观察窗”,本质上是乘了一个矩形窗,矩形窗在频域对应 sinc 函数,于是谱线就被 sinc 卷积“抹糊”了。解决方法是加汉宁窗、海明窗这类窗函数,让截断变得平滑,但代价是主峰变宽,频率分辨能力下降,这是不可避免的取舍。
第二个坑是归一化。很多人直接用 FFT 结果画幅值,发现峰值根本不是信号原本的振幅。因为 FFT 没有自动除以序列长度 N,需要手动除以 N;如果只画单边谱,正频率的幅值还要再乘以 2,直流分量除外。这个细节能让你的频域图从“不知道为什么差一个因子”变成“严丝合缝对上”。
频率分辨率的计算公式也建议刻在脑子里:Δf = fs / N。采样率固定时,点数越多、观察时长越长,频率分辨得越细。如果你想分辨两个间隔只有 0.1Hz 的频率峰,采样率和点数必须保证 Δf 小于 0.1Hz,否则两个峰必然糊在一起。
3.4 数值实验:用一段短代码看清傅里叶变换
理论说再多,不如跑一个实验直观。我用一个非常经典的双正弦叠加信号演示一下,两段代码就可以看完频域视角。
import numpy as np import matplotlib.pyplot as plt fs = 1000 # 采样率 1000Hz N = 1000 # 采样点数 t = np.arange(N) / fs f1, f2 = 50, 120 x = np.sin(2 * np.pi * f1 * t) + 0.6 * np.sin(2 * np.pi * f2 * t) X = np.fft.fft(x) freqs = np.fft.fftfreq(N, 1/fs) mags = np.abs(X) / N # 归一化 mags_single = mags[:N//2] * 2 # 只看正频率,幅值乘2 freqs_single = freqs[:N//2] plt.stem(freqs_single[:200], mags_single[:200]) plt.xlabel('Frequency (Hz)') plt.ylabel('Amplitude') plt.show()这段代码跑完,你会看到两个干净的单峰,一个在 50Hz 处幅值约为 1,一个在 120Hz 处幅值约为 0.6。信号在时域是两组正弦波形交织起来的样子,但在频域只需要两根尖峰就能描述同一件事。很多人第一次跑出这种图时,才会真正理解什么是“时域和频域是同一信号的两种投影视角”。
重点提醒一句:这个示例里 fs=1000、N=1000,时间长度正好 1 秒,所以频率分辨率 Δf = fs/N = 1Hz。两个信号频率间隔 70Hz,远大于 1Hz,完全分得开。如果改成间隔 0.5Hz 的两个信号,同样的采样条件它们会合在一起,那时你才会体会到“分辨率不足”到底是什么感受。
4. 用线性代数语言重新讲一遍傅里叶
4.1 复指数:所有微分算符的“特征向量”
把傅里叶和线性代数焊在一起的,是一个关键观察:函数 e^(iωt) 是微分算符 d/dt 的本征函数。因为
d/dt e^(iωt) = iω · e^(iωt)。
这就像矩阵特征值问题 Av = λv:算符作用在这个函数上,结果还是这个函数,只是整体乘了一个常数 iω。频率越高的分量,对应的本征值 iω 的模越大,微分时被放大的倍数也越大。
为什么这个性质如此重要?因为物理规律大量由线性微分方程描述,而线性微分方程在复指数基下会变得像代数方程。想象你要解一个带阻尼的振动方程,直接用时间域函数来解,可能是一通复杂的微分运算;把方程两端做傅里叶变换后,微分变成乘以 iω,方程立刻变成普通代数方程,解得 F(ω) 之后再逆变换回来就行。傅里叶变换之所以是好工具,本质上就是因为复指数同时是平移算符和微分算符的本征函数。
4.2 不确定性原理的傅里叶根源
信号在时域和频域不可能同时被压缩。矩形脉冲时域越窄,频谱的主瓣越宽;高斯函数是唯一能在傅里叶变换后保持高斯形态的函数,并且恰好达到时宽带宽积的下界。这不是微分方程的神奇结论,纯粹是傅里叶变换的数学结构。
量子力学里的位置-动量不确定性关系 Δx·Δp ≥ ħ/2,其实就是这个数学事实加上物理单位的映射。粒子的位置波函数越是局域化,意味着波包越窄,那么它的动量波函数必然越宽,对应动量分布越分散。理解这一点,很多量子力学公式会祛魅不少:原来不确定性并不是只有量子理论才有的怪现象,而是任何服从叠加原理的波动系统都具备的普遍性质。
必须小心一点:这里的“不确定”不是测量误差,不是仪器不够精细,而是量子态本身在位置基和动量基下的坐标分布宽度受到数学约束。把这一点说清楚,能避免不少概念上的混乱。
4.3 别把傅里叶和线性代数对立起来
我见过不少同学,线性代数课不碰积分,傅里叶课上不写矩阵,两边老死不相往来。实际上,离散傅里叶变换就是标准线性代数。
Xₖ = Σₙ xₙ W^(kn),其中 W = e^(-2πi/N)。
写成矩阵形式是 X = Wx,其中矩阵元素 W(k,n) = W^(kn)。这个矩阵是 N×N 的对称、可逆矩阵,归一化之后是酉矩阵。酉矩阵意味着什么?基变换保持内积不变,能量守恒就是它的直接推论。连续傅里叶变换也可以理解为积分核为 K(ω,t) = e^(-iωt) 的连续线性变换,把函数空间里的向量映射到另一个坐标系统。
一旦接受这种观点,你会获得巨大好处:傅里叶变换的可逆性、正交性、帕塞瓦尔定理,都可以套用线性代数中关于基变换和酉矩阵的全部直觉,而不用每一条都单独记。我后来讲给同学听时用得最多的类比是:傅里叶变换就是函数空间里的“旋转”,选好角度之后,本来缠绕在一起的信息会变得干干净净。
4.4 一个容易混淆的小点:实信号的频谱对称性
实信号 x(t) 的傅里叶变换满足 F(-ω) = F*(ω),也就是频谱幅度是偶对称的、相位是奇对称的。这就是为什么画频谱图常常只画正频率一半,因为另一半是完全冗余的信息。
有人问负频率是不是“不物理”的。答案在坐标视角下很清晰:实信号要由复指数叠加生成,就必须让正、负频率两个分量成对出现,二者的虚部恰好抵消,最终才得到实数。这就像用两个复数相加构造一个实数,中间过程的复数成分不代表独立存在的物理对象,只是坐标分解里的组成部分。
5. 我的学习路线与问题排查备忘
5.1 推荐的学习顺序:先级数、再变换、后离散
回到标题,如果让我给一条经过验证的学习路线,我会这样说:先手算三角函数的正交性,确认余弦系和正弦系确实构成正交基;再算方波、三角波、锯齿波各一组傅里叶系数,体会“投影”到底是什么;接着把级数写成复数形式,让 T→∞ 看离散谱怎么变成连续谱;然后熟记常用变换对,逐个推导性质;最后上 FFT 做实验,拿正弦叠加信号和方波信号验证理论。
别反着学。先跑 FFT 再回头补理论,容易把工具当成黑盒,遇到频谱异常也不知道该查哪一环;只看理论不作实验,又很难建立“频域图像”的直觉。两条腿交替迈,效果最好。
学量子力学时,如果卡在表象变换上,我建议把位置-动量表象切换对应到傅里叶正逆变换,再把傅里叶正逆变换对应到基底变换矩阵。这个对应一旦贯通,波函数的坐标意义会比抽象的公设清晰得多。
5.2 常见问题速查表
| 现象 | 可能原因 | 排查与解决 |
|---|---|---|
| 频谱峰值比信号幅值大很多 | FFT 结果未除以序列长度 N | 对全部频率点幅值统一除以 N |
| 单边谱幅值比预期小一半 | 正频率未乘 2 | 正频率(不含直流)幅值乘 2 |
| 谱线周围出现大片拖尾 | 截断造成频谱泄漏 | 加汉宁窗、海明窗等窗函数 |
| 高频处出现与实际不符的峰 | 采样率不足导致混叠 | 提高采样率,采样前加抗混叠低通滤波 |
| 两个邻近频率峰合成为一个 | 频率分辨率不足 | 增加采样时长或 FFT 点数 |
| 用两个教材的公式写程序,结果差常数倍 | 傅里叶变换约定不统一 | 固定一个约定,检查 1/2π 和指数符号 |
| 相位谱看起来完全随机 | 幅值接近零的频率点噪声放大 | 先按幅值阈值筛选,再解读相位 |
这七条是我在学习和写代码时踩过的真实问题,每条都可以对应一次“对着频谱图发呆半天”的经历。排查顺序也有技巧:先确认归一化,再看泄漏和混叠,最后才怀疑相位,因为相位对数值误差远比幅值敏感。
5.3 几个让我少走弯路的经验
经验一,把三种傅里叶版本做成一张对照表。傅里叶级数处理连续周期信号,得到离散频谱;傅里叶变换处理连续非周期信号,得到连续频谱;离散傅里叶变换处理离散周期信号,得到离散频谱。工程里实际用的是 DFT 和它的快速算法 FFT。这张表贴在笔记第一页,遇到问题先定位自己在哪个象限,再决定用哪套公式。
经验二,不要试图背所有变换对。我只需要记住大约八组核心变换对,剩下的都可以用性质推导。比如记住了矩形脉冲对应 sinc,就能通过尺度变换推出窄脉冲的主瓣宽度;记住了高斯对应高斯,就能立刻理解高斯波包在位置和动量表象下的宽度关系。性质和少量变换对互相配合,比死记一大张表可靠得多。
经验三,写代码验证数学公式时,先拿最简单信号做实验,再逐步增加成分。先把单正弦的 FFT 幅值调到完全正确,再叠加第二个正弦、加窗、加噪声。每加一个环节只引入一个新变量,出了问题立刻能定位。我见过太多次一上来就分析一段复杂信号,频谱一团糟,连是混叠还是泄漏都分不清楚的情况。循序渐进,反而最快。
我个人最深的体会是:傅里叶分析不是某一个学科的工具箱,而是把线性代数、信号处理和量子力学串成一条线的公共接口。每次学一门新课,都会在傅里叶这儿遇到老朋友。所以如果有人问我“线性代数还是量子力学”,我的答案出乎意料地简单:先都学一遍,然后在傅里叶这里汇合。
最后分享一个小技巧:把常用公式做成一张双栏卡片,左边时间域、右边频率域,用尺度变换和时移性质互相推导,比对着书背要轻松得多。这篇外传笔记是我重新整理自己的学习路线时顺手写下的,希望它也能帮你在几个学科的教材之间少走几次弯路。