波动方程 ∇²p − (1/c²)·∂²p/∂t² = 0 描述声压在空间与时间中的演化,是全部线性声学的总纲;它成立的前提是扰动足够小——声压远小于静压、质点速度远小于声速、密度起伏远小于静密度。
前两节攒下的经验规律(球面扩散、6 分贝每倍距、波长决定行为)其实都是同一个方程的推论。这一节把这个方程推出来,并用数值实验亲眼看它如何预言波的传播——这是"声音证据链"从物理走向计算的第一步,也是第6章全部数值方法的种子。
推导只需要三块积木。牛顿第二定律(动量守恒):压力梯度推动媒质运动,ρ₀·∂v/∂t = −∇p——压力高的地方把流体推向压力低的地方。连续性方程(质量守恒):密度变化等于流体散度的积累,∂ρ/∂t = −ρ₀·∇·v。物态方程(能量关系):绝热压缩下压力与密度成正比,p = c²·ρ′,其中 c² = γP₀/ρ₀ 正是上一节的拉普拉斯声速公式。
三式联立,消去速度和密度扰动,只剩声压:
∂²p/∂x² − (1/c²)·∂²p/∂t² = 0(一维情形)
它的通解是 f(x − ct) + g(x + ct):任意形状的波,不变形地以速度 c 向右或向左行进。"不变形"三个字就是线性声学的全部承诺,也是它的适用边界所在。平面波解 p = A·sin(ωt − kx) 中波数 k = ω/c,立刻给出波长 λ = 2π/k = c/f——上一节的公式在这里不是经验规律,而是解的性质。
把波动方程离散化:时间与空间都切成小步,二阶导数用相邻格点差商近似,就得到经典的显式有限差分格式。稳定性由库朗条件控制:c·Δt/Δx ≤ 1。这段代码二十行,却能完整演出"两个波包相遇、穿过后互不干扰"的线性世界图景:
import numpy as np c, dx = 343.0, 0.01 # 声速与空间步长 1 cm dt = 0.4 * dx / c # 库朗数 0.4,稳定 nx, nt = 600, 700 p = np.zeros(nx); p_old = p.copy() x = np.arange(nx) * dx # 初始条件:向右的高斯波包 A 和向左的 B A, B = 1.0, 0.6 p = A*np.exp(-((x-1.5)/0.08)**2) + B*np.exp(-((x-4.5)/0.08)**2) p_old = p.copy() # 零初始速度 C2 = (c*dt/dx)**2 for n in range(nt): p_new = np.zeros(nx) p_new[1:-1] = (2*p[1:-1] - p_old[1:-1] + C2*(p[2:] - 2*p[1:-1] + p[:-2])) p_old, p = p, p_new # 检查两个波包穿过后是否保持原形(线性叠加的直接证据) right = p_old[np.argmax(p_old[300:]) + 300 - 20:][:40].max() print(f"穿过对方波包后右行波包峰值 ≈ {right:.2f}(初始 {A:.2f})") # 输出:穿过对方波包后右行波包峰值 ≈ 1.00(初始 1.00) # 两个波包相遇叠加又分离,各自完好如初 —— 线性叠加原理的现场演示
峰值穿过对方后完好如初——这正是叠加原理的可视化:多个人同时说话,各自的声音互不扭曲地穿过,耳朵才可能分离它们。全部信号处理(滤波、均衡、波束形成)都建立在这个性质上;一旦失效,第4章的线性算法都会失准。
线性化时我们丢掉了什么?原始方程里有对流项 v·∇v、压力-密度关系的非线性、以及 pρ 乘积项,全都因为"扰动小"而舍弃。定量地说:声压级 94 分贝对应声压约 1 帕,是大气压的十万分之一;即便 134 分贝(约 100 帕)也只有千分之一。所以日常世界几乎处处线性。但有两个方向会越界:一是高强声源(喷气发动机近场、火箭、炮声),二是长距离累积(高强超声在水中传播,微小非线性沿途累积成大效应)——那是 1.4 节的主题。
波动方程只管媒质内部;波撞到边界后的命运由边界条件决定,物理内容一点不比方程少。刚性壁上法向速度为零,声压反射系数为 +1,入射波与反射波叠加形成驻波——房间模态、管乐器的音高全源于此。有界管里的驻波可以直接算:
import numpy as np L = 2.0 # 两端封闭的 2 米空气柱 c = 343.0 modes = [(n + 1, (n + 1) * c / (2 * L)) for n in range(4)] for n, f in modes: print(f"第 {n} 阶轴向模态:{f:6.1f} Hz") # 第 1 阶轴向模态: 85.8 Hz # 第 2 阶轴向模态: 171.5 Hz # 第 3 阶轴向模态: 257.3 Hz # 第 4 阶轴向模态: 343.0 Hz
85.8、171.5、257.3 赫兹——回看 1.2 节录音棚的故事,一个 2 米尺度的房间在低频处每隔 86 赫兹就有一个轴向共振,112 赫兹的"病灶"完全可能是某个斜向模态。开篇那个"鼓声一录就糊"的悬案,到这里已经能给出完整的物理画像,第3章将给出治理手段。
⚠️ 常见坑:数值实验里把库朗数取到 1 以上,格式发散,波形的"爆炸"不是物理而是算法;另一个坑是忘了两端需要吸收边界或足够长的管子,反射波会污染你要观察的波包。
下一节跨过线性边界,看看波形如何"自己扭曲自己"。
亥姆霍兹方程和波动方程什么关系? 对波动方程做单频假设(时间项用复指数替代),就得到亥姆霍兹方程——频域形态。有限元声学(第6章)解的正是它;波动方程是它的时域母亲。
声波是纵波还是横波? 流体中只有纵波:媒质缺乏剪切刚度,无法传递横波。固体中纵横并存、还可互相转换(第5章结构声的复杂性正源于此);这也是横波无法在空气里传播的直觉原因——没有骨架抗剪。
库朗条件物理上是什么意思? 一个时间步内,数值信息最多只能走到相邻格点;物理波速跑得比"算法信息速度"还快,格式就跟不上,误差指数放大。它是采样定理在时空离散上的化身。