
Acoular麦克风阵列校准全指南XML几何文件与Calib类实战【免费下载链接】acoularAcoustic testing and source mapping software项目地址: https://gitcode.com/gh_mirrors/ac/acoularAcoular 是一款开源的麦克风阵列声学测试与声源定位波束形成Python 软件包。在做阵列声源定位之前有两项地基工作必须做对定义麦克风几何位置XML 几何文件和应用通道校准系数Calib 类。这两步做不好声压级和声源位置都会系统性偏。本文手把手讲清这两块的核心用法帮你快速上手 Acoular 校准流程。一、为什么校准与几何是声源定位的前提麦克风阵列波束形成的原理是依据每个麦克风到候选声源点的传播延迟差对多通道信号做相干叠加。因此输入数据错误后果麦克风位置几何不准波束指向偏移、定位模糊校准系数灵敏度不准声压级偏差多通道间幅度失衡Acoular 用两个类分别处理它们MicGeom源码acoular/microphones.py—— 读取/生成麦克风几何Calib源码acoular/calib.py—— 读取校准系数并把它们乘到信号上。两类数据都采用统一的XML 文件格式项目内即自带多套现成文件几何文件acoular/xml/目录下 17 个阵列文件如array_64.xml、array38.xml、tub_vogel64.xmlVogel 64 麦克风阵列校准文件示例examples/data/example_calib.xml56 通道。64 麦克风阵列的几何位置Vogel 分布由 MicGeom 从 XML 读入后绘制二、XML 几何文件怎么写MicGeom 读取规则以acoular/xml/array38.xml为例格式非常直观——根节点MicArray每个麦克风是一行pos?xml version1.0 encodingutf-8? MicArray namemoeglichkeit3_38mic pos NamePoint 1 x-0.066774 y0.236764 z0/ pos NamePoint 2 x-0.152297 y0.193188 z0/ !-- … 其余 36 个麦克风 … -- /MicArrayMicGeom的导入逻辑acoular/microphones.py第 101–112 行会遍历所有pos标签把Name、x、y、z属性读成一个形状为(3, num_mics)的坐标数组pos_total。常用属性速查属性说明fileXML 几何文件路径设置后自动导入pos_total全部麦克风坐标3 × Npos剔除失效通道后的坐标center阵列几何中心自动计算aperture阵列口径最远两麦克风间距invalid_channels失效通道索引列表如果手头没有现成 XML也可以直接给pos_total赋 NumPy 数组反过来export_mpos(filename)还能把当前几何导出为 XML方便沉淀成标准文件acoular/microphones.py第 114–130 行。三、Calib 校准文件格式与单位校准 XML 的结构与几何文件对称见examples/data/example_calib.xml?xml version1.0 encodingutf-8? Calib name20080506 pos NamePoint 1 factor0.79487275/ pos NamePoint 2 factor0.85377702/ !-- … 每个通道一个 factor … -- /CalibCalib类acoular/calib.py第 118–128 行解析所有pos标签的factor属性得到校准系数数组data单位为 Pa/电学单位例如 Pa/V。Calib的关键设计是既能用文件、也能用数组给file→ 从 XML 读取给data→ 直接用 NumPy 数组。若上游是时域信号形状为(num_channels,)若是频域信号如 FFT 之后的数据形状为(num_channels, num_freqs)——即校准也可以放在 FFT 之后做invalid_channels→ 与几何类保持一致的失效通道列表自动构造有效通道掩码channels。实际校准时最常见的做法把麦克风阵列接到标准声源如 94 dB 声压校准器下逐个通道读出灵敏度换算成系数写进 XML。四、实战把 Calib 接进处理链下面这段流程来自风洞翼型噪声示例examples/wind_tunnel_examples/example_airfoil_in_open_jet_freq_domain_methods.py第 54–65 行展示了数据 → 校准 → 几何 → 导向矢量 → 功率谱的完整链条import acoular as ac from pathlib import Path time_data_file example_data.h5 calib_file Path(example_calib.xml) ts ac.MaskedTimeSamples(filetime_data_file, invalid_channels[1, 7]) # 时域数据屏蔽失效通道 calib ac.Calib(sourcets, filecalib_file, invalid_channels[1, 7]) # 校准系数与数据逐点相乘 mics ac.MicGeom(filePath(ac.__file__).parent / xml / array_56.xml, invalid_channels[1, 7]) # 56 麦克风阵列几何 grid ac.RectGrid(x_min-0.6, x_max0.0, y_min-0.3, y_max0.3, z0.68, increment0.05) env ac.Environment(c346.04) st ac.SteeringVector(gridgrid, micsmics, envenv) f ac.PowerSpectra(sourcecalib, windowHanning, overlap50%, block_size128) # 功率谱以校准后数据为源三个要点链条即数据流Calib.result()acoular/calib.py第 152–173 行是一个生成器对上游每一块数据乘以对应通道的校准系数再交给下游的PowerSpectra全程惰性求值、按需计算失效通道三处一致MaskedTimeSamples、Calib、MicGeom的invalid_channels必须写同一组索引[1, 7]否则维度对不上几何文件定位技巧用Path(ac.__file__).parent / xml / array_56.xml可直接引用 Acoular 自带的 56 通道阵列文件无需自己配置路径。跑完后续波束形成如ac.BeamformerBase即可得到声源图效果类似下图——三个模拟声源被准确点亮基于校准与几何数据完成波束形成后的声压级分布图三个声源清晰可辨五、常见问题排查避坑清单现象原因与解决ValueError: calibration data shape … does not match source data shape …校准数据维度与上游通道数不匹配acoular/calib.py第 130–150 行的校验。频域校准时需num_channels × num_freqs个系数声源位置整体偏移检查 XML 坐标单位米与坐标系是否与实验一致确认center与aperture数值合理某通道结果异常、条纹状干扰该通道可能失效或线束问题把其索引加入三个对象的invalid_channels声压级整体偏大/偏小校准系数单位不是 Pa/V或忘了把Calib插入链条PowerSpectra的source应指向calib而非原始ts 小技巧用plt.plot(mg.pos[0], mg.pos[1], o)一行代码画出阵列俯视图是最快的几何文件自检手段。六、更多资源核心源码acoular/calib.py校准、acoular/microphones.py几何、acoular/xml/17 个现成阵列几何文件校准文件示例examples/data/example_calib.xml完整示例examples/wind_tunnel_examples/example_airfoil_in_open_jet_freq_domain_methods.py、examples/wind_tunnel_examples/example_airfoil_in_open_jet_time_domain_methods.py入门示例examples/introductory_examples/example_basic_beamforming.py单元/回归测试含校准用例tests/unittests/test_calib.py、tests/regression/掌握XML 几何 Calib 校准这条数据地基之后你就可以在 Acoular 上放心开展从经典波束形成到 DAMAS、CLEAN 等高级声源定位算法的完整分析啦。【免费下载链接】acoularAcoustic testing and source mapping software项目地址: https://gitcode.com/gh_mirrors/ac/acoular创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考