Acoular滤波器组与频率计权:1/3倍频程、A/C计权处理完整指南
【免费下载链接】acoularAcoustic testing and source mapping software项目地址: https://gitcode.com/gh_mirrors/ac/acoular
Acoular 是一款开源的声学测试与声源定位软件,除波束形成外,它还提供完整的时域信号处理链。本指南带你快速掌握 Acoular 的滤波器组与频率计权功能:包括 1/3 倍频程带通滤波(FiltOctave、FiltFiltOctave)、整组倍频程滤波器组(OctaveFilterBank)、A/C/Z 计权滤波(FiltFreqWeight)以及指数时间平均(TimeExpAverage),全部实现位于 acoular/tprocess.py 中。
为什么倍频程滤波是声学分析的基础?
声呐与风洞试验中,原始麦克风信号是连续的时间波形。要分析噪声,通常需要:
- 按频带拆分:把信号切分成倍频程(Octave)或 1/3 倍频程(Third octave)频带,逐带分析声压级;
- 计权处理:按人耳听觉特性施加 A 计权、C 计权(IEC 61672 标准);
- 时间平均:对声压平方做指数或算术平均,得到稳定的声级数据。
Acoular 把这三类操作做成可"串链"的类:每个类的source指向上一级的输出,按需惰性计算,改参数后自动重算,非常适合交互式分析。
快速上手:一行代码完成 1/3 倍频程滤波
FiltOctave(acoular/tprocess.py 第 1477 行起)实现了 IIR 倍频程/1/3 倍频程带通滤波器,关键参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
band | 1000 | 频带中心频率(Hz) |
fraction | 'Octave' | 取'Octave'或'Third octave' |
order | 3 | IIR 滤波器阶数 |
滤波器边缘频率按 ANSI 1.11 标准做了修正,保证频带内的功率带宽准确,而不仅仅是 -3 dB 带宽正确。一个典型用法:
import acoular as ac ts = ac.TimeSamples(file='three_sources.h5') f1 = ac.FiltOctave(source=ts, band=4000, fraction='Third octave')官方示例 examples/io_and_signal_processing_examples/example_filter.py 演示了如何对比多个相邻倍频程带滤波后的功率谱,并与未滤波谱求和进行验证。
需要零相位?用 FiltFiltOctave
FiltOctave是因果滤波器,会带来相位延迟。FiltFiltOctave(第 1518 行起)采用正向 + 反向两次滤波(sosfiltfilt),实现零相位滤波,对双程滤波还做了额外带宽修正。注意它会一次性缓存全部样本,内存占用较大,因此只适合对时间信号离线处理。
风洞桨叶时间域波束形成示例 examples/wind_tunnel_examples/example_airfoil_in_open_jet_time_domain_methods.py 就是用它锁定 4 kHz 的 1/3 倍频程频带,再送入BeamformerTime/BeamformerCleant等时域方法成像:
cfreq = 4000 ft = ac.FiltFiltOctave(source=calib, band=cfreq) # 4 kHz 1/3 倍频程上图为 Acoular 在 8000 Hz、1/3 倍频程带宽下对三个声源的定位结果,三个局部极大值即对应模拟声源位置。
用 OctaveFilterBank 一次生成全部倍频程通道
逐个建FiltOctave对象比较繁琐。OctaveFilterBank(第 1719 行起)是并行的滤波器组,一次把所有频带的滤波结果按通道拼接输出:
| 参数 | 默认值 | 说明 |
|---|---|---|
lband | 21 | 最低频带索引(21 → 125 Hz) |
hband | 40 | 最高频带索引(40 → 8000 Hz) |
fraction | 'Octave' | 倍频程或 1/3 倍频程 |
频带中心频率按 $10^{i/10}$ 生成,1/3 倍频程模式时步长为 1,倍频程模式步长为 3。输出通道数为num_bands × 输入通道数,即每个频带、每个麦克风各占一列,可无缝接给后续的PowerSpectra等类。
A/C/Z 频率计权:FiltFreqWeight 的用法
FiltFreqWeight(第 1615 行起)按 IEC 61672 标准实现频率计权滤波器:
weight='A':A 计权,模拟人耳对中低频的衰减,用于 LAeq 等环境噪声评价;weight='C':C 计权,低频衰减较小,常用于峰值/冲击声测量;weight='Z':Z 计权,平直响应,即不做计权。
内部使用双线性变换把 s 域标准系数离散化为 SOS 形式,采样率取自数据源,因此对任意采样频率都能生成正确的数字滤波器。
时间计权与指数平均:TimeExpAverage 补充
声级计除了频率计权还有时间计权。TimeExpAverage(第 1589 行起)按 IEC 61672-1 实现指数平均:
weight='F':Fast,时间常数 125 ms;weight='S':Slow,时间常数 1 s;weight='I':Impulse,35 ms(非标准扩展)。
把它接在FiltFreqWeight之后,就得到一条与手持声级计等价的"计权 + 时间平均"链路。
串链思路小结 📋
Acoular 的时域处理链是"乐高式"组合,常见组合方式:
- 倍频程分析:
TimeSamples → FiltFiltOctave → PowerSpectra / TimePower → Average - 全频带扫描:
TimeSamples → OctaveFilterBank → PowerSpectra(所有频带一次算完) - 声级评价:
TimeSamples → FiltFreqWeight(A/C) → TimeExpAverage(F/S) → TimePower - 波束形成预处理:
Calib → FiltFiltOctave(4 kHz, 1/3 oct) → BeamformerTime
所有类的完整参数说明可参考 API 参考文档 docs/source/api_ref/index.rst,更多示例见 examples/io_and_signal_processing_examples/ 目录。
掌握以上四个类,你就能在 Acoular 中完成从原始时域信号到倍频程声谱、A/C 计权声级的全部标准处理,并进一步接入它的波束形成与声源定位功能。
【免费下载链接】acoularAcoustic testing and source mapping software项目地址: https://gitcode.com/gh_mirrors/ac/acoular
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考