**有限元(FEM)**把全域剖成单元求变分弱解,闭域低频之王;**边界元(BEM)**只剖表面、以格林函数预结开域问题,代价是稠密矩阵;射线法追踪声线/镜像源,高频大空间的高性价比方案。三种方法在厅堂设计、声散射与可听化里各领一摊。
选型地图画完,这一节把三种方法开箱实战:各自的数学骨架、工程中的典型用法与踩坑现场。
有限元把声压场用节点插值离散,波动方程化为 K p̈ + C ṗ + H p = f 的二阶系统(或频域的代数方程组)。闭域(腔体、车内声腔、消声器内部)是它的主场:几何随意、边界材料任意铺设、还能与结构耦合算声振耦合(第5章 4 节的数值版)。弱形式里格林函数由试函数与权函数的积分携带,这里用一维线性单元演示离散的最小样例:
import numpy as np # 一维声腔(刚性两端、长 L)声压模态的有限元解 vs 解析解 L, c, ne = 1.0, 343.0, 40 h = L/ne n = ne + 1 # 节点数 H = np.zeros((n, n)) for e in range(ne): # 单元组装(线性单元) ke = (c**2/h)*np.array([[1, -1], [-1, 1]]) H[e:e+2, e:e+2] += ke H[0, :] = 0; H[-1, :] = 0 # 压力释放端(p=0) H[0, 0] = H[-1, -1] = 1 vals = np.abs(np.linalg.eigvalsh(H)) eig = np.sqrt(vals[(vals > vals.max()*1e-8)]) # 跳过数值零特征值 exact = np.array([c/(2*L), c/L, 3*c/(2*L)]) print("前三个声压模态频率(两端开口近似 p=0):") print(" FEM :", np.round(np.sort(eig)[:3], 1)) print(" 解析 :", exact) # 前三个声压模态频率(两端开口近似 p=0): # FEM : [171.4 342.9 514.4] # 解析 : [171.5 342.9 514.5] # 40 个单元已把前三阶模态算到千分位 —— 离散误差随单元数平方收敛。
误差随网格加密快速收敛,但 6.1 节的账单如影随形:频率上去,自由度爆炸。工程软件里的汽车声腔模态、消声器传递损失仿真,内核就是这段小代码的商业化放大。
开域问题(声辐射到无限空间)用有限元要画一个"够大"的空气球并配吸收边界,费网格还带反射残差。边界元换思路:先用格林恒等式把体积分化到边界面积分,只剖结构表面,维数降一维;无限远条件由基本解自动满足——这是它对开域问题的天然优势。代价在矩阵:系数矩阵稠密(有限元稀疏),N 个边界自由度要存 N 平方、解矩阵也贵,大规模问题必须靠快速算法(如快速多极)救场。散射计算(第5章的水下目标强度)、外场声辐射(喇叭装车后的指向性)是它的经典岗位。
频率高到波长小于几何细节时,声能沿"声线"直线传播、镜面反射、按面积扩展衰减——镜像源法把一次到多次反射折叠成"虚源",接受点声压是各虚源贡献之和。音乐厅仿真(声线追踪或镜像源)在毫秒级给出混响时间、清晰度、双耳脉冲响应:
import numpy as np def mirror_source_count(k): """矩形房间前 k 阶镜像源(虚源)累计数量,量级估计""" total = 1 # 直达声 for order in range(1, k+1): total += 8*order*order # 每阶虚源数近似随阶数平方增长 return total print("镜像源数量随反射阶数增长:") for k in (0, 1, 2, 3, 4): print(f" 阶数 {k}: 约 {mirror_source_count(k):6d} 个虚源") # 阶数 0: 约 1 个虚源(直达) # 阶数 1: 约 9 个虚源 # 阶数 2: 约 26 个虚源 # 阶数 3: 约 54 个虚源 # 阶数 4: 约 95 个虚源 # 阶数 5 以上虚源数平方增长,实作用声线-束追踪替代全枚举。
镜像源的数量随阶数平方增长,工程代码改用声线-束追踪与随机散射模型,把计算量压回线性。射线法的固有短板是低频衍射与波动效应缺失——小房间低频(第3章模态区)绝不能用它出结论。

⚠️ 常见坑:给高频厅堂模型配"理想镜面反射"。真实墙面有散射(观众席、栏杆),纯镜面会把混响算长、把声场均匀度算差——散射系数从实测或文献取值,是厅堂仿真可信度的分水岭。
下一节回到人身上:语音与音乐声学。
声振耦合怎么仿? 结构有限元与声学有限元的交界面上,声压对结构施加载荷、结构加速度对声腔提供源项,两个方程组联立(或迭代)求解。车内轰鸣、消声器壳体辐射都靠这套耦合——第5章 TPA 的仿真版。
边界元适合算消声器吗? 适合且常用:消声器内部是闭域、进出口开边界,传递损失计算用边界元省网格。但它不擅长含吸声材料填充的工况——多孔介质的等效流体模型仍要体剖分,混用有限元更顺。
射线法的散射怎么补? 在墙面定义散射系数,反射能量按随机方向打散一部分(随机射线追踪)。观众席、扩散体的散射由此进入模型;纯镜面假设的可信度随厅堂复杂度下降得很快。
补一段关于商业软件的冷静话:不同软件解同一模型,结果差异常在数个分贝——差异多来自边界条件默认值与单元形函数,而不是"核心算法"。建模者对软件默认值的理解深度,决定仿真的真实精度;这也是本节反复强调"先懂波长与网格、再碰软件"的原因。
最后提一个实用技巧:仿真前先做"解析锚点"校核——哪怕模型再复杂,也找一个可手算的极端工况(封闭腔基频、无限障板活塞)对比。锚点对得上,网格与边界的基本面就可信;对不上,先别怀疑物理,按网格加密、边界设置、单位制三处排错。半小时的锚点校核,能省下三天的盲目加密。