1. 声学基础与阵列原理:声波传播特性、麦克风阵列拓扑结构、近场与远场模型、空间采样定理

好,咱们开始第一课。说实话,每次带新人做波束成形项目,我第一件事不是让他们看代码,而是先聊声学基础。为什么?因为很多算法问题,追根溯源都是物理概念没吃透。你想想看,连声音怎么传的、麦克风怎么摆的都没搞明白,后面那些自适应滤波、GSC结构,根本就是空中楼阁。

1.1 声波传播特性

声音的本质是什么?说白了就是机械振动在介质中的传播。空气分子被推来推去,形成疏密相间的纵波。我个人习惯把声波想象成水波——虽然一个是纵波一个是横波,但很多直觉是通用的。

这里有几个关键参数,做阵列设计时必须刻在脑子里:

  • 声速 c:常温常压下约 340 m/s。温度每升高 1°C,声速增加约 0.6 m/s。我在北方冬天做测试时吃过亏,零下十几度声速掉到 320 左右,阵列指向性直接偏了。
  • 频率 f 与波长 λ:λ = c / f。人耳可听范围 20 Hz ~ 20 kHz,对应的波长从 17 米到 1.7 厘米。嗯,这里要注意——阵列的物理尺寸和波长是强相关的。
  • 声压级 SPL:用分贝表示,0 dB SPL 对应 20 μPa。助听器场景下,输入动态范围通常从 30 dB(安静的图书馆)到 100 dB(地铁、嘈杂餐厅)。

核心公式:平面波传播时,声压 p(r, t) = A · ej(ωt - k·r),其中 k = 2π/λ 是波数。这个公式会贯穿整个课程,建议你手抄三遍。

还有一个概念容易被忽略——声波的衍射。当障碍物尺寸与波长可比时,声音会绕过障碍物。我曾经在调试一款耳背式助听器时,发现高频(短波长)被耳廓遮挡严重,低频反而绕过去了。这就是衍射在作怪。

1.2 麦克风阵列拓扑结构

阵列拓扑,说白了就是麦克风怎么摆。我见过最离谱的设计,是有人把四个麦克风随机贴在助听器外壳上,结果波束图惨不忍睹。拓扑结构直接决定了阵列的响应特性,不能乱来。

常见的拓扑结构有以下几种:

拓扑类型 示意图(文字描述) 典型应用 我的经验
线性阵列 麦克风等距排成一条直线 助听器、会议麦克风 端射方向(沿阵列方向)灵敏度最高,但侧向有栅瓣风险
圆形阵列 麦克风均匀分布在圆周上 智能音箱、机器人 360° 无死角,但助听器上空间不够,很少用
差分阵列 麦克风间距极小(< 2 cm) 入耳式助听器 我最喜欢的一种——体积小、低频指向性好,但信噪比低
稀疏阵列 麦克风间距大于半波长 低频增强、DOA 估计 避坑:间距大了会有空间混叠,我踩过这个坑

对于助听器来说,最常见的还是双麦克风线性阵列。为什么?因为耳背式助听器就那么点空间,塞两个麦克风已经是极限了。间距通常在 8 mm ~ 15 mm 之间,对应 8 kHz 的波长(约 4.3 cm)的一半左右。

我的建议:刚开始做阵列设计时,先用仿真工具(比如 MATLAB 的 Phased Array Toolbox)把不同拓扑的波束图跑一遍。别急着打板,仿真能帮你省下至少三版改板的时间。

1.3 近场与远场模型

这个问题,我当年面试时被问过,后来面试别人时也经常问。近场和远场的区别,本质上就是波前是球面还是平面

  • 远场模型:声源距离远大于阵列孔径,波前近似为平面。此时各麦克风接收到的信号只有时延差异,幅度差异可忽略。远场条件通常用 r > 2D²/λ 来判定,其中 D 是阵列孔径。
  • 近场模型:声源距离近,波前是球面。各麦克风不仅有时延差,还有幅度差(球面扩散衰减)。助听器场景下,说话人的嘴离麦克风可能只有 10~20 cm,这妥妥的是近场。

我记得有一次做远场假设,结果实测波束图完全对不上。后来一查,声源距离只有 30 cm,而阵列孔径是 1.2 cm,算下来 r > 2D²/λ ≈ 2*(0.012)²/0.04 ≈ 0.0072 m——等等,这个值太小了,其实远场条件很容易满足?不对,这里要注意:对于助听器,D 很小,所以远场条件其实很容易满足。但为什么实际效果差?因为近场效应不仅取决于距离,还取决于频率。低频时波长长,近场效应更明显。

避坑指南:我曾经在 500 Hz 以下做波束成形,用了远场模型,结果指向性完全失效。后来改用近场模型,把球面波前的幅度衰减也建模进去,效果立竿见影。所以,低频段务必用近场模型,高频段可以偷懒用远场。

1.4 空间采样定理

这个定理,是阵列信号处理的基石。它和时域采样定理是孪生兄弟——时域采样防混叠,空间采样防栅瓣。

空间采样定理:麦克风间距 d 必须满足 d ≤ λ/2,才能无混叠地重建空间声场。为什么是 λ/2?因为两个麦克风之间的最大相位差是 k·d·sinθ,当 sinθ = ±1 时相位差最大。如果 d > λ/2,相位差可能超过 π,导致方向模糊——你分不清声音是从 +30° 还是 -30° 来的。

举个具体的例子:假设你要处理 8 kHz 的信号,λ = 340 / 8000 ≈ 0.0425 m = 4.25 cm。那么 d ≤ 4.25 / 2 ≈ 2.1 cm。助听器上两个麦克风间距通常 1.2 cm,满足条件。但如果想处理 16 kHz,λ = 2.1 cm,d ≤ 1.05 cm,这就有点紧张了。

关键结论:空间采样定理决定了阵列的工作频率上限。如果你想覆盖 8 kHz,间距 2.1 cm 以内就行。想覆盖 16 kHz?间距得小于 1 cm。助听器上空间有限,高频覆盖是个难题。

那如果 d > λ/2 会怎样?会出现栅瓣——在非目标方向上也出现高灵敏度波束。我调试过一款产品,麦克风间距 1.8 cm,结果在 10 kHz 附近出现了明显的栅瓣,用户反馈「感觉声音从四面八方来」。后来把间距改到 1.2 cm,问题解决。

我的习惯:设计阵列时,先确定目标最高频率 f_max,然后算 d_max = c / (2·f_max)。再留 10%~20% 的余量。比如目标 8 kHz,d_max = 340 / 16000 ≈ 2.1 cm,我会选 1.8 cm 或更小。

小结

这一章的内容,说白了就是四个字:打好地基。声波传播特性让你知道声音怎么来,阵列拓扑让你知道麦克风怎么摆,近远场模型让你知道怎么建模,空间采样定理让你知道间距怎么定。这四个点,任何一个出问题,后面的波束成形算法都是白搭。

下一章,我们会进入波束成形的核心——延时求和波束成形器。到时候你会看到,今天讲的这些物理概念,会直接变成代码里的参数。嗯,做好准备。