ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

双麦语音前端模组AU-48:如何用波束成形与回声消除净化语音信号

双麦语音前端模组AU-48:如何用波束成形与回声消除净化语音信号 做语音交互产品最容易被低估的其实是麦克风前面那十几厘米的路。很多团队拼命优化后端的识别模型结果用户一句“你好小X”都唤不醒回放录音才发现采集到的信号里全是风扇声、嘈杂人声、放音腔体的啸叫混响真正的人声反而淹没在里面。AU-48双麦多功能语音处理模组就是专门解决这类问题的存在——它把双麦克风采集、回声消除、噪声抑制、自动增益这些原本要单独设计算法、单独调布的活全部整合进一块小尺寸模组里输出端直接给出干净的PCM/I2S信号。做智能家居面板、门禁对讲、会议终端、录音笔、老人助听类产品或者做语音交互原型验证这块模组都能让硬件工程师少走好几个月的弯路。1. 为什么我会把双麦前端交给一个“小盒子”1.1 第一版产品的惨痛教训单麦克风在真实房间里的表现我在做第一版室内对讲面板时硬件方案非常“朴素”一颗模拟驻极体麦克风经过前级放大电路直接进主控内置的音频Codec再走音频总线送去云端识别。当时想得很简单麦克风就是把声音变成电信号Codec又是现成的只要增益调好问题不大。结果样机一下产线回访反馈基本集中在三件事上人站在1.5米以外说话对方听到的声音像是隔着一床棉被。面板自己的扬声器正在播放远端声音时本地这头只要一开口远端听到的就是自己的回声啸叫。靠近窗边或者风扇正吹的位置背景噪声完全盖过人声。这三个问题本质上是同一个语音信号在到达ADC之前就已经被声学环境“污染”了。单麦克风没有任何空间选择性做不到区分“你想听的方向”和“噪声的方向”也没有参考信号去做回声消除。后端的降噪算法再强碰到的是已经被混响、噪声、回声叠加的非线性信号能做的很有限。语音识别这行有句老话前端给一分后端省十分。我当时对这句话理解不够后来补课才补得肉疼。1.2 AU-48是一颗“语音前端全家桶”模组认识AU-48是在二次选型的时候。当时我列了一圈需求必须双麦克风最好自带波束成形要有回声消除能力因为产品自带扬声器不能对主控算力提太高要求因为主控还要跑业务逻辑体积要小面板内空间金贵最好能用I2S直接输出处理后的数据流不搞复杂驱动。AU-48几乎是对着这些需求长出来的。它的本质是一个完整的“语音前端子系统”模组上面直接焊好两颗MEMS麦克风板载一颗带音频DSP的处理芯片内部集成了回声消除、噪声抑制、自动增益、去混响、双麦波束成形这些算法。主控只需要通过I2C写几个配置寄存器再从I2S接口读数据就到了“可以送ASR”的干净信号。我后来在几个项目里反复使用这类模组最大的体会是“全能”两个字并不是虚的。它把声学工程师、算法工程师、驱动工程师三个角色的活压缩成了一颗料。对于中小团队和独立开发者来说这意味着不用养一个专门的音频算法岗位也不用对着几百页的DSP开发文档研究滤波器系数省下来的时间可以全部花在业务功能上。2. 拆开“全能”看门道双麦架构和板载处理链路2.1 双麦不是双通道录音而是空间听音能力很多人以为双麦克风就是“录两路声音选一路好的用”这个理解差了十万八千里。人耳之所以能在嘈杂餐厅里听清对面朋友说话靠的是双耳效应同一个声源到达左右耳的时间有微小的先后差强度也有差异大脑根据这些物理线索就能把注意力“指向”声源方向同时把其他方向的声源当成背景噪声压下去。AU-48的两颗麦克风在模组上的间距是固定的两颗麦克风会同时采集信号DSP内部计算两路信号的时间差和相位差合成出一个具有方向选择性的“波束”。这个波束指向设备正前方正前方的声音被保留侧后方来的声音被压制。效果上很像给麦克风装了一个“聚光灯”只照亮说话人的嘴巴其余全部暗场。波束成形并不需要多高的算力本质上就是延时求和的经典算法难的是麦克风间距的一致性。两颗麦克风之间的间距差哪怕只偏差0.5毫米在8kHz频段上就会产生可观的相位误差波束指向就会歪。AU-48把麦克风直接焊在模组上、间距出厂固定反而让开发者避开了这个误差源。自己拿两颗分离式麦克风走线很难做到这个一致性这是模组化方案在声学上最实打实的优势。2.2 板载DSP的四个核心处理模块回声消除AEC设备在播放远端音频时扬声器发出的声音会通过空气和结构振动传回麦克风。AEC的原理是拿“本机正在播放的参考信号”和“麦克风采集信号”做相关性分析自适应估计回声路径的响应然后把麦克风信号里的回声成分减掉。AU-48支持从I2S总线获取参考信号这意味着它可以配合你的音频播放链路做同步抵消而不是盲目地把所有低频能量都切掉。噪声抑制NR这部分处理的是稳态噪声比如空调声、风扇声、车辆胎噪。DSP会持续估计噪声底对人声频段之外的能量做衰减。实测下来它对白噪声和均匀的环境底噪能压得比较干净同时尽量保留语音的辅音部分避免“闷闷的广播音”那种处理痕迹。自动增益AGC说话人和麦克风的距离不可能永远固定。有人贴着设备说话有人坐在两米外的沙发上喊。AGC会根据输入信号的强度动态调整增益近讲不爆音远讲能放大。这一级处理特别重要因为后端的ASR模型通常对输入电平有一个比较窄的适应范围电平忽高忽低识别率一定上不去。双麦波束成形Beamforming如上面说的利用两路信号的空间差异做定向拾音。它是AU-48能“听清前方人声、压掉后方噪声”的核心。波束方向、角度范围都可以通过I2C寄存器配置具体选哪种模式要看产品的使用姿态。2.3 双麦处理链路在模组内是怎么流转的我画过一张自己的理解图这里把处理流程用文字描述一下两颗MEMS麦克风采集到的数字信号先进入DSP第一级是回声消除拿I2S上的播放参考信号做自适应滤波把扬声器串扰减掉第二级做波束成形把两路信号合成一路带空间指向的信号第三级做噪声抑制把残余的稳态噪声继续压掉第四级做AGC把输出电平拉到一个稳定区间最后经过处理的PCM数据从I2S DOUT引脚输出主控直接拿来用。整套链路在模组内部完成延迟被控制在一个语音帧级别做到了人耳几乎察觉不到实时的延迟。对语音ASR来说处理延迟必须低否则会影响VAD检测和交互节奏。这也是为什么不能简单地在主控里跑一个软件降噪替代它——主控CPU跑FFT、跑自适应滤波延迟和功耗都可能不可控而DSP的方案是时间确定性的每一帧都在固定的时钟周期内完成处理。3. 规格表之外的实话信号质量取决于这些细节3.1 看懂信噪比、拾音距离和采样率拿到AU-48的手册我最先看的是这样一组参数参数项参考值我的理解麦克风信噪比SNR62-65dB(A)麦克风自身的底噪水平越高越好采样率支持16kHz / 48kHz16k做语音唤醒/识别48k做音质向回声消除深度45dB稳态回声衰减量够多数免提场景输出接口I2S / PCM / TDM标准化数字音频接口工作电压1.8V-3.3V可直接对接主控IO电平模组尺寸约18mm x 13mm面板、笔杆、摄像头都能装下很多朋友看到“信噪比62dB”就觉得“够用”但要知道麦克风信噪比是指在标准声压级下信号与自身底噪的比它决定的是“下限”。一块只标62dB的模组如果在电路布局时把数字信号和模拟信号搅在一起实际系统信噪比可能掉到40dB以下。所以规格表只能说明麦克风这颗料的潜力最后表现如何还得看整机供电和结构设计后面的实操章节我会展开讲。采样率的选择也别拍脑袋。如果产品只做唤醒词和指令词识别16kHz完全够用数据处理量小模组功耗也更低。如果是做会议记录、语音质检这类要保留音质的场景把模组切到48kHz取到的素材更接近原始听感方便做后续转写和声纹分析。3.2 接口接线最少化I2S加I2C的控制逻辑AU-48对外暴露的引脚非常克制核心就两类音频数据引脚和控制引脚。音频数据走I2S占三条线BCLK位时钟、LRCK左右声道帧时钟、DOUT数据输出。控制走I2C占两条线SCL、SDA。再加上电源和地一块模组接进系统只需要七八根线这在面板空间极度紧张的时候真的太友好了。主控侧的典型角色分配是主控做I2S Master负责产生BCLK和LRCK时钟AU-48做I2S Slave按主控给的时钟节奏输出数据。这样设计的好处是主控能统一音频时钟域配合DMA搬运数据不占用CPU。实际接线时建议BCLK和LRCK尽量短、等长避免时钟抖动影响数据稳定性。I2C部分则用来写配置选择工作模式、调采样率、设AGC目标电平、开关波束模式等。我第一次调通时犯过一个低级错误以为DOUT脚会一直有数据直接接了MCU的I2S RX结果静音时收到一堆随机的噪声底。看了手册才知道AU-48在AKTIVE静音状态或者未使能输出时DOUT会拉低需要主控侧做静音检测或者配置中关闭输出。这个细节不贵但能省半天排查时间。3.3 实测三类典型场景的听感变化我在一个开源语音面板项目里用AU-48做了三轮替换测试对比的是原来单麦直连Codec的方案。测试环境没有进消音室就是普通办公室有中央空调、键盘声、人走动的声音。以下是我记录的听感变化场景一人站在设备正前方1米正常音量说话。单麦方案录出来的语音有比较明显的底噪靠近气流的“嘶嘶”声清晰可闻AU-48方案底噪降低非常明显人声靠前且干涩度更小直接送ASR的识别率肉眼可见地提升。场景二设备自带扬声器正在播放音乐人在2米外说话。单麦方案完全不能用于双工通话远端会听到自己的音乐声人声混合AU-48方案里音乐声被压制得很干净局部音量稍微有点“起伏”的感觉但人声内容完整双工感可以接受。场景三房间里有另一组人在半米外开小会。单麦方案几乎无法分离两路说话人混在一起AU-48方案能明显把正面说话人突出侧面的声音像退到了很远的背景层ASR识别时主说话人的内容基本不受干扰。这三个场景恰好对应回声、远距离、多人干扰三大语音痛点。AU-48每一项都不是“彻底消灭”但联合起来相当于给一个本来没法用的声学环境做了一次系统性的净化和提纯。这个提升不是靠某个单一参数能够衡量的而是整体可用性的跃迁。4. 把它批量放进产品之前硬件上必须先处理好三件事4.1 三种供电方式下我踩到的电源噪声第一次把AU-48放进整机后录到的声音里持续存在一种“滋滋”的电流感尤其安静环境下特别刺耳。查了半天最终定位到是电源纹波。整机用一颗DC-DC从12V降到3.3V开关频率的纹波直接耦合到音频电路被DOUT原样带出来了。后来我按三种供电路径分别做了测试纯LDO供电纹波最小底噪几乎消失低噪声DC-DC加后级LC滤波底噪接近LDO水平但布局要更小心直接用普通DC-DC即使加了磁珠底噪仍然明显。最终方案是AU-48的电源从系统3.3V主轨再串一颗小封装低噪声LDO单独供电AVDD和IOVDD分别加0.1uF10uF去耦电容PCB上把LDO尽量靠近模组的电源引脚。模拟电路的地线同样不能马虎。我的板子把数字地和模拟地直接整片分割结果I2S数据线跨越分割带反而引入更大的回流噪声。后来改成了单点接地策略模拟地、数字地在底部汇合所有音频信号线走在同一层、避开高频开关节点。这个改动之后之前的滋滋声彻底消失。4.2 麦克风开孔与结构密封决定波束成败模组上有两颗麦克风但最终“听”到的声场并不只是这两颗麦本身决定的还和外壳的开孔、音腔、密封方式强相关。一个常见的翻车案例是模组卖得很好装进整机后正面拾音距离骤减侧后方噪声反而压不下去。问题往往出在结构开孔上。开孔直径建议2-3mm不要超过3mm否则会引入风噪和高频染色孔口建议做60度倒角或者漏斗状凹槽正向声波能平滑进入避免形成窄带共振麦克风与面板孔之间要加硅胶套或者泡棉圈形成前后音腔隔离否则声音会从缝隙绕到麦克风背面破坏双麦的相位关系波束成形直接失效防尘网选择高透气率、低声阻的网布优先用声学网布而不是普通无纺布后者会让高频滚降。很多工程师不重视“声路”觉得麦克风有孔就行。实际上双麦波束成形特别依赖两路信号的相位一致性前后音腔一旦形成声短路两颗麦接收到的信号相关性就会被破坏算法再怎么算也没法从错误数据里还原出正确的空间信息。结构评审阶段就把麦克风孔和密封设计一起评审能避免后续改模的大代价。4.3 音量、增益和时间常数设置和主控的分工AU-48的AGC不是“出厂就完美”需要和主控侧的音量策略配合。我的经验是模组输出的目标电平设置在-12dBFS左右留给后级算法一定余量主控侧不再做额外的大幅增益调整只保留音量线性控制。如果模组AGC已经拉高了主控再去提增益底噪会被二次放大信噪比反而下降。回声消除的参考信号接入也很关键。AU-48从I2S总线取参考信号时这个参考信号最好在模组的数字域和播放通路保持同步否则参考和实际播放之间存在延迟AEC算法会估算出一个偏掉的回声路径效果打折。我在一个项目里把播放通路经过了蓝牙SoC内部重采样参考信号取的是重采样前的数据导致回声消不干净。后来改成从DAC前一级取参考症状立刻消失。AGC的时间常数也可以按需调。近讲为主的设备比如对讲面板AGC响应可以快一点远讲为主的设备比如会议全向麦则需要更长的窗口避免偶尔的停顿导致增益猛拉产生“呼吸感”。这些参数别看小直接影响用户第一耳朵的体验。5. 调试AU-48的实用方法和常见症状诊断表5.1 可复现的音频测试流程音频调试最怕“凭感觉”。同一段话今天调一版觉得可以明天换个环境又觉得不行。我自己固定了一套测试流程可以复现准备一个标准语音素材内容包含男声、女声、不同音量和停顿时长约10秒使用全频扬声器放在设备正前方1米处固定声压级约70dB SPL回放素材在同等位置放一只噪声源手机播放粉红噪声作为背景干扰分别记录AU-48的原始输出禁用算法和处理后输出对比信噪比再重复一次但这次把扬声器播放背景音乐的同时在正面读一段话测试AEC效果用录音软件查看波形和频谱重点看100Hz以下、1kHz-4kHz人声核心频段的能量分布以及噪声底是否明显抬升。这个流程花不了多少时间但能形成一批可量化的对比数据。像AU-48这类模组算法本身已经是个黑盒我们没法改每个系数但我们能验证“在什么条件下它能达到什么效果”把这些数据和产品需求对齐验收就有标准了。5.2 症状到根因一张排查表我在多个项目里收集了一些典型故障整理成一张排查表遇到问题先对号入座症状可能原因处理建议环境安静但底噪明显电源纹波/地环路换LDO供电检查I2S线布线有声音但人声发闷结构开孔太小/防尘网声阻过大增大孔径换声学网布回声消除无效参考信号没接对/参考有延迟核对参考信号路径取DAC前级拾音方向感不到前后音腔密封失效/波束模式配错检查硅胶套和泡棉重配寄存器音量忽大忽小AGC时间常数不合适调响应窗口或改目标电平只有一侧近场有声音其中一颗麦克风堵塞或焊接不良产测时做单麦信号检查高频有明显“刺刺”声PDM时钟干扰/供电不稳检查MCLK时钟和去耦电容这些症状里有硬件问题也有配置问题。遇到问题第一反应不要怀疑“模组坏了”先查电源、再查结构、最后查配置按这个顺序能过滤掉80%的假故障。5.3 量产阶段的语音产测建议AU-48这类语音模组和普通传感器不太一样它的麦克风有方向性两颗麦之间的相位一致性直接影响模组效果。到了量产阶段只测功能“有没有声音”是不够的建议做一轮基本语音产测用同一台校准过的扬声器在产线上固定位置播放扫频信号分别读取AU-48两路麦克风的RMS电平设置上下限筛掉焊偏、开孔堵塞、麦克风损坏的板子再播放一小段语音素材提取1kHz-3kHz频段能量比判断出声路是否正常记录每块板子的峰值电平和信噪比形成SPC趋势图发现一致性漂移时及时调整产线工艺。产测的额外好处是它能倒推结构件的一致性。比如有一批外壳的开孔毛刺比较多产测时高频能量比值明显下降立刻就能反馈到模具抛光工艺避免整批货流入市场之后才被用户发现“声音闷”。6. AU-48的边界在哪里何时不该用6.1 中小型远场阵列与云端后处理的分工AU-48帮前端解决的是声学问题但它不会替你做语义理解。ASR后端的唤醒词模型、指令解析、大模型对话全部需要主控或云端来完成。也就是说AU-48处理完的信号仍然要经过VAD、唤醒引擎、识别引擎才能变成业务动作。有些方案喜欢把降噪和识别都丢到云端处理本地只采原始音频。这种思路在带宽充足时可行但遇到网络抖动、隐私要求高的场景就很尴尬。把AU-48放在本地先把声音“擦干净”再决定是本地识别还是上云产品的实时性和隐私性都会更好。它跟云端后处理不是替代关系而是把前端的脏活累活先干完让云端只面对相对干净的语音。6.2 与单麦方案、四麦阵列的取舍如果做一个成本极其敏感的玩具级产品单麦克风主控内置Codec仍然能战。它的拾音距离有限也没有空间选择性但胜在便宜、开发快。AU-48适合的是“既要控制体积、又要明显提升拾音质量”的中间地带。如果做的是全屋智能音箱想在客厅角落、厨房、卧室这种360度无死角的场景下语音唤醒双麦的固定波束就不够了通常需要四麦甚至更多麦的环形阵列配合驱动端的全方位波束扫描。AU-48的分工更偏向“有一个明确朝向”的设备比如面板、门铃、摄像头、桌面终端人在设备正前方范围内说话效果最理想。三类方案可以简单对比如下方案拾音范围处理能力开发难度适合场景单麦Codec0.5-1m无方向性基本无前端算法低玩具、近距离按键对讲双麦DSP模组AU-482-4m定向波束AEC/NR/AGC/BF低到中面板、门铃、会议终端四麦环形阵列5-8m360度全向波束高级降噪高智能音箱、全屋语音6.3 我自己的最终选型原则跑了这些项目之后我现在选语音前端基本按三条原则来判断第一产品是否明确有“正面朝向”第二拾音距离是否落在2-4米这个区间第三团队有没有精力去维护自研音频算法。三条都满足就会优先考虑AU-48这类模组。这个模组最让我认可的地方是它把“音频算法的专业壁垒”转译成了“普通硬件工程师也能hold住的模块参数”做得足够多又不过度承诺。如果第一版做对讲面板时就按这个思路来大概能少折腾两三个月。现在再遇到“要不要自己做音频算法”的讨论我的回答都是先算算账你的产品核心竞争力到底在算法还是在交互、外观、价格和生态。在多数智能硬件里音频前端更像是地基地基不需要你亲自烧砖用一块好砖——比如AU-48——把它铺平楼才能盖得又快又稳。
返回列表