4. 麦克风阵列基础:从单耳到多耳

各位同学,欢迎来到第四章。前面几章我们聊了单通道的声学处理,说白了就是一个麦克风能做的事。但现实世界里的声音是三维的,有方向、有距离、有混响。一个麦克风就像一只耳朵,你很难判断声音到底从哪来。所以,我们需要多只耳朵——也就是麦克风阵列。

这一章我会带大家把麦克风阵列的底子打牢。我们从麦克风本身的类型讲起,再到阵列怎么摆,最后引出波束形成这个核心概念。嗯,这些都是后面自适应算法的地基。

4.1 麦克风类型:全向 vs 指向性

先说说麦克风本身。我刚开始做项目时,总觉得麦克风就是个拾音器,随便买一个就行。后来在某个会议系统项目里吃了亏——用了全向麦,结果把空调噪声、键盘声全收进来了,后处理怎么降噪都费劲。从那以后,我选型时都会先问一句:你要全向还是指向?

4.1.1 全向麦克风

全向麦克风对所有方向的声音灵敏度基本一致。它的极性图是个圆,像个球体。好处是能捕捉整个声场,适合环境监听、会议录音这种场景。但坏处也很明显——噪声和混响一起收进来,信噪比不好控制。

关键参数: 全向麦克风的频率响应在低频段通常更平坦,但高频段会因衍射效应出现轻微的方向性偏差。实际选型时,我建议关注 20Hz-20kHz 的频响曲线,别只看标称值。

4.1.2 指向性麦克风

指向性麦克风只对特定方向的声音敏感。常见的有心形、超心形、枪式等。它的极性图像个心形或更窄的波瓣。指向性麦克风能有效抑制侧向和后方的噪声,但代价是低频响应会下降,而且对安装角度要求很高。

我在做车载语音系统时,用过一种双振膜差分麦克风,它通过前后声压差实现指向性。这种麦克风对声学端口的一致性要求极高,稍微有点灰尘堵塞,指向性就偏了。嗯,避坑指南来了——

避坑: 我曾经在量产阶段发现一批麦克风指向性不一致,排查了三天才发现是防尘网安装时压得太紧,导致振膜背腔容积变化。所以,指向性麦克风的机械公差控制,比全向麦严格一个数量级。

4.1.3 对比总结

特性 全向麦克风 指向性麦克风
灵敏度方向性 各向均匀 特定方向敏感
低频响应 好 较差(近讲效应明显)
噪声抑制 弱 强(侧向噪声衰减 6-15dB)
典型应用 环境录音、会议 语音通信、枪式拾音
机械公差敏感度 低 高

4.2 阵列几何结构:怎么摆有讲究

麦克风选好了,接下来就是怎么摆。阵列的几何结构直接决定了你能分辨什么方向的声音、能覆盖多宽的频带。我个人习惯把阵列结构分成三类:线性、圆形、球形。每种都有它的脾气。

4.2.1 线性阵列

线性阵列就是把麦克风排成一条直线。这是最简单的结构,也是我最早接触的。它的波束在阵列法线方向最窄,在端射方向最宽。说白了,它只能分辨一个平面内的角度(方位角),不能分辨俯仰角。

线性阵列的阵元间距很关键。间距太大,会出现空间混叠(栅瓣);间距太小,阵列孔径不够,低频指向性差。我一般遵循半波长原则——阵元间距取最高工作频率对应波长的一半。

经验值: 对于语音频段(300Hz-8kHz),阵元间距通常取 2-4cm。如果间距超过 5cm,8kHz 以上就会出现明显的栅瓣。我在做智能音箱时试过 6cm 间距,结果高频方向图乱成一团,后来老老实实改回 3.5cm。

4.2.2 圆形阵列

圆形阵列把麦克风均匀分布在圆周上。它的好处是能实现 360° 全向覆盖,而且方位角分辨率在各方向基本一致。圆形阵列适合做声源定位和全向波束形成。

圆形阵列的半径选择是个权衡。半径越大,低频指向性越好,但高频会出现空间混叠。我建议半径取最低工作频率波长的 1/4 到 1/2 之间。举个例子,如果最低频率是 500Hz(波长约 68cm),半径取 17-34cm 比较合适。

4.2.3 球形阵列

球形阵列是三维结构,麦克风分布在球面上。它能同时分辨方位角、俯仰角和距离,适合做全空间声场分析。球形阵列的数学基础是球谐函数,听起来很唬人,但说白了就是把声场分解成不同阶数的球谐分量。

我记得在做一个 3D 音频采集项目时,用过 Eigenmike 那种 32 通道球形阵列。它的优势是能重建完整的声场,但计算量也大得吓人。如果你只是做简单的声源定位,用圆形阵列就够了,别上来就上球形,容易把自己绕进去。

4.2.4 结构对比

结构 维度 角度覆盖 典型阵元数 主要应用
线性 1D 180°(平面) 4-16 语音增强、波束形成
圆形 2D 360°(平面) 6-32 声源定位、会议系统
球形 3D 全空间 16-64 3D 音频、声场重建

4.3 波束形成的基本概念

好了,麦克风选好了,阵列也摆好了。接下来就是核心问题:怎么让阵列只听某个方向的声音,忽略其他方向?这就是波束形成。

波束形成,说白了就是给每个麦克风的信号加一个时延和权重,然后叠加起来。时延用来对齐目标方向的声音,权重用来控制波束的形状。你想想看,如果所有麦克风都对齐了同一个方向,那这个方向的声音就会同相叠加,信号变强;其他方向的声音相位不一致,叠加后相互抵消,信号变弱。

4.3.1 延迟求和波束形成

这是最简单的波束形成方法。假设目标方向是 θ,那么每个麦克风接收到的信号需要补偿一个时延 τ_i,使得所有麦克风在目标方向上的信号相位一致。然后直接求和。

// 延迟求和波束形成伪代码
function delay_sum_beamforming(signals, theta, mic_positions, fs):
    // signals: 二维数组 [num_mics][num_samples]
    // theta: 目标方向(弧度)
    // mic_positions: 麦克风坐标 [num_mics][2]
    // fs: 采样率
    
    c = 343  // 声速 (m/s)
    num_mics = len(signals)
    output = zeros(len(signals[0]))
    
    for i in range(num_mics):
        // 计算相对于参考点的时延
        tau = (mic_positions[i][0] * cos(theta) + 
               mic_positions[i][1] * sin(theta)) / c
        delay_samples = round(tau * fs)
        
        // 时延补偿后叠加
        for n in range(len(output)):
            if n - delay_samples >= 0 and n - delay_samples < len(signals[0]):
                output[n] += signals[i][n - delay_samples]
    
    // 归一化
    output /= num_mics
    return output

这段代码看着简单,但实际用起来坑不少。时延补偿需要插值,因为采样点是离散的,时延不一定是整数倍。我一般用 sinc 插值或者分数延迟滤波器,直接取整会引入量化误差,波束指向性会变差。

4.3.2 波束图与主瓣

波束图描述了阵列对不同方向信号的增益。主瓣是增益最大的方向,旁瓣是其他方向的泄漏。主瓣越窄,指向性越好;旁瓣越低,干扰抑制能力越强。

衡量波束形成性能有几个关键指标:

  • 主瓣宽度(3dB 波束宽度):主瓣增益下降 3dB 时的角度范围。阵元越多、孔径越大,主瓣越窄。
  • 旁瓣电平:最大旁瓣相对于主瓣的增益。一般要求低于 -20dB,否则干扰信号会从旁瓣漏进来。
  • 指向性指数:主瓣方向增益与全空间平均增益的比值。反映了阵列抑制各向同性噪声的能力。
核心关系: 阵列孔径(物理尺寸)决定主瓣宽度,阵元数决定旁瓣电平。孔径固定时,增加阵元数可以压低旁瓣,但主瓣宽度不变。这就是为什么线性阵列的阵元间距通常取半波长——在保证不出现栅瓣的前提下,最大化孔径。

4.3.3 自适应波束形成

延迟求和是固定的,不能适应环境变化。自适应波束形成会根据接收到的信号实时调整权重,自动在干扰方向形成零陷。最经典的是 MVDR(最小方差无失真响应)波束形成器。

MVDR 的核心思想是:在保证目标方向增益不变的前提下,最小化输出功率。说白了,就是让阵列自动去抑制干扰和噪声。我在做智能语音助手时,用过 MVDR 来抑制电视背景音,效果比固定波束形成好很多,但计算量也大了不少。

注意: 自适应波束形成对阵列校准误差非常敏感。我曾经在测试时发现 MVDR 的零陷深度只有 -15dB,远低于理论值 -40dB。查了半天,发现是麦克风之间的增益不一致,差了 0.5dB。校准之后,零陷深度立刻降到 -35dB。所以,做自适应波束形成前,一定要先做阵列校准。

4.4 知识体系总览

这一章的内容比较多,我画了一张图帮你理清脉络。从麦克风类型到阵列结构,再到波束形成,是一条完整的链路。

麦克风阵列知识体系 麦克风阵列知识体系 麦克风类型 全向 指向性 阵列几何结构 线性 圆形 球形 波束形成 延迟求和 自适应 核心逻辑 麦克风类型决定基础特性 → 阵列结构决定空间采样方式 → 波束形成算法决定最终性能 关键设计参数 • 阵元间距:半波长原则 • 阵列孔径:决定主瓣宽度 • 阵元数量:决定旁瓣电平 • 校准精度:影响自适应性能 • 采样率:决定时延分辨率 常见应用场景 • 智能音箱:圆形阵列 + 自适应 • 会议系统:线性阵列 + 延迟求和 • 车载语音:线性阵列 + MVDR • 3D 音频:球形阵列 + 球谐分解 • 噪声监测:全向阵列 + 波束扫描

这张图把这一章的核心内容串起来了。你从麦克风类型出发,选择适合的阵列结构,再根据应用场景选择波束形成算法。每一步都有它的物理约束和工程权衡。

好了,这一章就到这里。麦克风阵列的基础打牢了,后面我们才能聊自适应波束形成、声源定位这些更高级的话题。记住,阵列设计没有银弹,每个参数都是取舍。多动手仿真,多在实际场景里测试,慢慢你就能找到感觉。