声学计权网络:A/C/Z 计权
1. 前言:为什么需要计权网络
当我们进行声压测量的时候,声压级 SPL 的基本定义是:
Lp = 20 log10(p_rms / p0)
p0 = 20 uPa
SPL 是物理量,它只描述声压有效值相对 20 uPa 的大小;但人的听觉系统对不同频率的敏感度不同。同样的声压级,比如 60 dB SPL,频率不同时(比如50 Hz 和 1 kHz) 给人感觉是不一样的。中频,尤其是几百 Hz 到几 kHz,人耳比较敏感;很低的低频和很高的高频,即使物理声压不小,主观响度也可能没有同等声压的中频明显。
计权网络的作用就是,把“纯物理声压”转换成更适合某类评价目标的声级,使客观测量值与主观感受相匹配。A 计权让结果更接近常规噪声评价和人耳敏感度;C 计权保留更多低频和强声信息;Z 计权提供平直参考。本文以IEC 61672规定的计权网络作为标准,通过Python代码生成三种计权网络曲线,并与IEC 61672计权进行对比验证;在此基础上说明三种计权方式的区别和使用场景。
本文和仿真代码同步发在个人博客网站 VoxWorking · 声学与音频知识平台,网站定期更新音频处理、语音处理和声学相关知识,欢迎大家浏览交流~
2. IEC 61672 的 A/C/Z 计权公式
IEC 61672 使用以下频率常数:
f1 = 20.598997 Hz
f2 = 107.65265 Hz
f3 = 737.86223 Hz
f4 = 12194.217 Hz
A 计权的幅频响应可以写成:
WA(f) = 20 log10[
f4^2 f^4 /
((f^2 + f1^2)
sqrt(f^2 + f2^2)
sqrt(f^2 + f3^2)
(f^2 + f4^2))
] - A1000
A1000 = -2.0 dB
C 计权为:
WC(f) = 20 log10[
f4^2 f^2 /
((f^2 + f1^2)(f^2 + f4^2))
] - C1000
C1000 = -0.062 dB
Z 计权最简单:
WZ(f) = 0 dB
这里的 A1000 和 C1000 是归一化补偿,使 1 kHz 附近的计权增益为 0 dB。声级计以 1 kHz 为参考点,这也能解释为什么 1 kHz 校准音常用于声级计校准。
3. Python 代码实现计权曲线
核心函数如下:
def a_weighting_db(frequency_hz):
f = np.asarray(frequency_hz, dtype=float)
f2 = f * f
numerator = (F4 * F4) * (f2 * f2)
denominator = (
(f2 + F1 * F1)
* np.sqrt(f2 + F2 * F2)
* np.sqrt(f2 + F3 * F3)
* (f2 + F4 * F4)
)
return 20.0 * np.log10(numerator / denominator) - A1000
def c_weighting_db(frequency_hz):
f = np.asarray(frequency_hz, dtype=float)
f2 = f * f
numerator = (F4 * F4) * f2
denominator = (f2 + F1 * F1) * (f2 + F4 * F4)
return 20.0 * np.log10(numerator / denominator) - C1000
另外代码也实现了一个离线分析用的 FFT 计权:
weighted = irfft(rfft(signal) * weighting_gain)
但这只是作为计权网络的应用演示,真正的声级计通常会把同一响应实现成时域滤波器,再配合 Fast/Slow 等时间计权进行实时测量。
4. 结果说明
生成的 A/C/Z 曲线如下:
由上图可以看出:A 计权在低频处衰减非常明显,例如几十 Hz 会被压低几十 dB;C 计权在中低频区域更平直,直到很低频和很高频才明显衰减;Z 计权全频保持 0 dB;A/C 都在 1 kHz 附近归一到 0 dB。
运行结果:
Max absolute A-weighting table error: 0.2784 dB
Max absolute C-weighting table error: 0.1387 dB
A(1000 Hz) = 0.000344 dB
C(1000 Hz) = 0.000098 dB
PASS: formula values agree with rounded IEC table values within 0.3 dB
误差图如下:
由误差图可看到,代码生成的计权曲线与基准IEC 61672计权误差很小,基本一致。
5. 各自适用场景
| 场景 | 推荐计权 | 原因 |
|---|---|---|
| 环境噪声、法规限值、产品噪声标注 | A | 最常用,和多数噪声评价标准一致 |
| 职业噪声长期暴露 | A | 常用于等效连续声级和噪声剂量 |
| 演出、爆破、冲击声峰值 | C | 对高声级和低频不过度压低 |
| 低频轰鸣、设备振动感明显 | C + Z 频谱 | A 计权可能低估低频问题 |
| 算法验证、频响测试、原始声压分析 | Z | 不引入额外频率权重 |
| 判断低频是否突出 | A 与 C 同时测 | LC - LA 越大,低频占比通常越明显 |
6. 小结
声学计权网络可以理解为“测量前的标准化滤波器”,把“纯物理声压”转换成更适合某类评价目标的声级,使客观测量值与主观感受相匹配。A 计权最常用于环境噪声和普通噪声评价;C 计权更适合观察强声和低频成分;Z 计权则提供平直参考。本文代码从 IEC 61672 的连续公式出发,生成 A/C/Z 曲线,并与公开的 IEC 1/3 倍频程参考表对比,结果在 0.3 dB 内一致,可以说明实现是正确的。
参考资料
- ANSI Webstore: ANSI/ASA S1.42-2020 - Design Response of Weighting Networks for Acoustical Measurements
- python-acoustics: Weighting documentation
- python-acoustics: IEC 61672-1:2013 standards documentation
- NCBI/PMC: Design of digital filters for frequency weightings A and C
- FHWA: Highway Traffic Noise Measurement Handbook, Frequency Weighting