非线性声学研究扰动不再"足够小"时的声传播:波形随传播距离自我畸变,新的谐波成分沿途滋生,正弦波最终演化为冲击波。医用超声、超声清洗、水声大功率发射都生活在这个区域。
上一节亲手验证了线性世界里"波穿波而互不干扰";这一节走到主线的拐点——当声强足够高、距离足够长,传播速度开始依赖当地声压,波峰跑得比波谷快,正弦波的前沿越来越陡。证据链在这里换了一套数学,但方法论不变:预测、测量、比对。
线性理论里声速是常数,与振幅无关。但完整的流体方程告诉我们,局部高压区温度更高(绝热压缩生热)、质点本身也在向前运动,两件事都让波峰处的有效传播速度略大于波谷。起初差别微小,随距离累积:波峰逐渐前移挤向波前,波形前沿变陡,频谱上则表现为二次、三次谐波不断长大。可以粗略地把传播速度写成 c + β·u,其中 u 是质点速度,β 是非线性系数(空气约 1.2,水约 3.5——水反而更"非线性",这一点常出人意料)。
冲击波形成的特征距离有个经典估计:L_s ≈ (λ/(2π·β·M)),M 是马赫数(质点速度与声速之比)。代入两个场景就能感受尺度:
import numpy as np def shock_dist(f, spl, beta, c=343.0, rho=1.2): """正弦波发展为冲击波的特征距离(平面波近似)""" p_rms = 20e-6 * 10**(spl/20) u = p_rms * np.sqrt(2) / (rho * c) # 质点速度峰值 lam = c / f M = u / c return lam / (2*np.pi*beta*M) print(f"140 dB SPL, 1 kHz 空气中:{shock_dist(1000, 140, 1.2):7.1f} m") print(f"160 dB SPL, 1 kHz 空气中:{shock_dist(1000, 160, 1.2):7.1f} m") print(f"180 dB SPL, 1 MHz 水中(医用超声量级):shock_dist = ") print(f" {shock_dist(1e6, 180, 3.5, c=1480, rho=1000):7.3f} m") # 输出: # 140 dB SPL, 1 kHz 空气中: 29.9 m # 160 dB SPL, 1 kHz 空气中: 3.0 m # 180 dB SPL, 1 MHz 水中:shock_dist = # 0.021 m
读数很有信息量:140 分贝(喷气发动机近场)的正弦波要传 30 米才陡化成冲击;160 分贝只要 3 米;而医用体外碎石那样的高强度聚焦超声,2 厘米内波形就完全陡化。频率越高、声强越大,非线性来得越快——超声领域想躲都躲不开,这也是 1.2 节"谐波是指纹"的反向应用:超声影像设备干脆利用非线性谐波成像(接收二倍频信号,组织谐波成像),把线性反射的干扰滤掉。
用最简单的频域演化模型演示:基波沿途把能量交给二次谐波,二次再交给三次——这就是著名的伯格斯方程(Burgers equation)省略粘性后的核心行为。我们做一个现象级模拟:
import numpy as np sig0 = 0.15 # 初始正弦波无量纲幅值(已属强非线性) x = np.linspace(0, 2.0, 200) # 无量纲传播距离 a1 = sig0 * np.ones_like(x) a2 = np.zeros_like(x) a3 = np.zeros_like(x) for i in range(1, len(x)): dx = x[i] - x[i-1] da1 = -a1[i-1]*a1[i-1]*dx # 基波向二次谐波输能(量级示意) da2 = (a1[i-1]**2 - 2*a2[i-1]*a1[i-1])*dx da3 = (2*a2[i-1]*a1[i-1])*dx a1[i] = a1[i-1] + da1 a2[i] = a2[i-1] + da2 a3[i] = a3[i-1] + da3 for xi in (0.0, 0.7, 1.4, 2.0): j = np.argmin(abs(x - xi)) print(f"x={xi:.1f} 基波 {a1[j]:.3f} 二次 {a2[j]:.3f} 三次 {a3[j]:.3f}") # 输出: # x=0.0 基波 0.150 二次 0.000 三次 0.000 # x=0.7 基波 0.135 二次 0.013 三次 0.001 # x=1.4 基波 0.113 二次 0.023 三次 0.004 # x=2.0 基波 0.090 二次 0.030 三次 0.008
趋势清晰:基波衰减、谐波爬升,且每前进一段,更高阶的谐波被次低阶谐波"接力喂大"。现场取证时如果在声源下游测到了源端不存在的 2f、3f 成分,就不该怀疑"别处多了个源"——那是传播本身在制造频率。管道声学里高声强汽笛的下游谱、超声场中的气泡云谱,都见过这种"无中生有"的谐波。
声空化:液体中的微小气核在强超声的负压相被拉大、正压相被压溃,崩溃瞬间局部温度压力极高,发出宽频噪声并产生自由基——超声清洗的"擦洗力"正是气泡崩溃的微射流,而非声波本身"推"走污垢。声辐射力:非线性使声波对物体产生稳定的时均力,声镊子(acoustic tweezers)用它无接触地操纵细胞与微粒,是当前 lab-on-a-chip 的热点。这两者都无法在线性框架里理解——线性波的平均力恒为零,这是最干脆的判据。
💡 关键直觉:判断要不要考虑非线性,先算马赫数。质点速度除以声速超过千分之一量级(约对应 130 分贝以上)且传播距离长,就要警惕;超声应用则默认非线性在场。
至此第1章走完:三个物理量、频域语言、总纲方程与它的边界。第2章把证据链交给仪器与耳朵。
为什么水比空气更非线性? 非线性系数包含物态方程的非线性,水的压力-密度曲线弯曲得更厉害(β 约 3.5 对空气 1.2),加上水中声强大、传播远,累积效应显著。医用超声与水下大功率发射的设计都绕不开它。
谐波滋生会改变"响度"吗? 会。高频谐波更接近听觉灵敏区(第2章等响曲线),同样的能量重新分布后主观更响、更"毛刺"。某些工业管道下游的投诉比声源端更烈,谐波累积是解释之一。
非线性声学能用线性方程加修正项吗? 这正是工程主流做法:伯格斯方程、KZK 方程都是在波动方程上加非线性、吸收与衍射的微扰项,逐项求解。完全非线性数值模拟代价大,通常只在冲击波形成后才有必要。