拓冰建站拓冰建站
首页 / 资讯中心 / 正文

高噪声环境下的离线语音识别方案:基于AU-48双麦阵列的矿山实践

先交代一下背景我上一站项目点在北方一座金属矿山现场负责的是井下和地面车间的语音调度系统改造。那段时间和噪声死磕了将近两个月。破碎站、空压机房、皮带走廊这些点位设备一开人站旁边喊话基本靠吼实测噪声长期在95到110分贝之间徘徊。之前装过一批普通的单麦语音模组结果识别率低到没法看工人用了几次就弃用了设备在那里当摆设。后来整个方案推倒重来换上了AU-48语音模组前后花了两周把硬件、固件、算法参数全部调通识别率从惨不忍睹的三成拉到了九成上下。这篇文章把完整的选型、硬件设计、调参过程和踩过的坑全部盘一遍给正在做高噪声环境语音方案的朋友一个参考。1. 噪声围城矿山现场的语音困局1.1 矿山的噪声围城到底是什么回事矿山环境里说话到底有多难没去过现场的人很难有直观感受。先列几个我实测过的数据破碎站主机运转时噪声最大到过108分贝(A)空压机房两台螺杆机同时运行92到98分贝皮带走廊里皮带摩擦加托辊撞击稳定在88到95分贝井下采场巷道由于空间封闭且有反射混响严重哪怕噪声等级不高语音清晰度也会被大幅拖累。有人可能会说矿山本来就是重工业环境噪声大不是正常吗问题在于调度系统恰恰要在这种环境里起效。井下作业人员遇到突发状况比如皮带跑偏、设备异响必须在最短时间内把消息传递出去。如果语音设备识别不了工人只能脱掉手套掏手机或对讲机这个时间差就是安全风险。更有意思的是矿上很多工人都戴着防尘口罩和降噪耳罩说话声音经过面罩吸收以后语音特征本来就模糊再加上背景噪声语音识别系统听到的基本就是一段噪声微弱人声的混合信号难点叠加。1.2 普通语音模组为什么在矿山集体失灵我拆过不少市面上常见的语音模组单麦为主内置的降噪算法多半是简单谱减法或经典维纳滤波对平稳噪声比如风扇声、电机嗡鸣还有点效果但对矿山这种非平稳噪声基本无解。所谓非平稳噪声就是随时间快速变化的声音风镐的冲击、矿车经过的轰鸣、铲斗落矿的撞击每一帧的频谱都在剧烈变化传统降噪算法算出来的噪声谱永远慢半拍。第一代方案的失败原因总结下来有四条。第一单麦传感器接收到的语音信噪比太低人声距离稍远就完全淹没在噪声本底里。第二没有波束成形麦克风听全方向没有空间选择性设备正前方的人声和侧后方的机械噪声在信号处理器看来没什么区别。第三混响问题被严重低估巷道和车间的墙壁、设备金属表面反复反射声音语音信号到了麦克风那里叠了一堆回声尾巴识别引擎的字对齐全乱了。第四那个方案完全依赖在线识别通过网络把音频上传到服务器矿山的井下根本没有稳定网络时延动不动就几秒甚至直接超时完全不具备现场实用性。所以在做第二次方案选型时我给自己划了几条硬杠杠必须本地离线识别、必须具备多麦克风阵列或者等效的前端降噪能力、必须能适配非平稳强噪声场景、必须低功耗低成本、必须有成熟稳定的串口/GPIO接口方便对接现有控制器。2. 一芯破局AU-48方案选型的逻辑2.1 AU-48语音模组的芯片架构是什么先把这个模组的基本底细说清楚。AU-48语音模组核心是一颗集成了音频前端、降噪算法和本地语音识别引擎的SoC芯片。它内部实际上是双核设计一颗低功耗DSP专门跑音频处理管线包括麦克风阵列同步采样、波束成形、自适应噪声抑制、回声消除AEC、语音活动检测VAD另一颗应用核跑命令词识别和业务逻辑输出识别结果通过串口、GPIO或者I2C和外部主控通信。两个核各司其职音频处理不会占用太多CPU资源整体功耗控制得比较理想整模组峰值功耗不到2瓦待机时还能进入低功耗模式对于电池供电的便携矿用设备很友好。关键指标方面AU-48的ADC采集精度是16位支持最高48kHz采样率双麦克风差分输入内置了可配置的增益放大。需要强调一点它支持的是双麦阵列而非单麦这是它跟普通语音模组的本质区别。双麦可以通过计算两个麦克风接收信号的时延差形成指向性波束把人声方向的声音加强、非目标方向的声音抑制这就是波束成形的基本原理。配合芯片内置的深度神经网络降噪模型对非平稳噪声的适应能力比传统算法强了一大截。实测下来在3米距离、90分贝噪声背景下它依然能保证较高的唤醒率这个水平在工业级离线语音模组里属于比较能打的。2.2 当时对比过的几类替代方案选型阶段我不只看了AU-48市面上主流思路我基本都过了一遍也做了实物测试。把当时对比的几类方案列在下面给选型的朋友一个参考。方案类型代表形态成本区间功耗离线能力高噪识别率开发难度DSP主控自研降噪自己搭音频DSP加算法移植中高中高支持看算法功底极高通用MCU云端识别STM32/ESP32采样上传低中不支持极低中大算力SoC本地ASRRK3588等跑开源识别引擎很高很高支持受麦克风限制高消费级离线语音模组单麦离线识别模组中低低支持较低低工业级双麦语音模组AU-48中低支持高中这里多说一句为什么没选大算力平台。有的朋友一提到识别率第一反应就是上RK3588这类高性能芯片跑更大的模型。但矿山的实际场景限制了很多东西第一井下设备箱空间紧凑很多地方还要求本质安全型电路大算力平台功耗高、发热大对被动散热要求苛刻机箱根本放不下第二成本翻了好几倍一个点位的改造费用如果太高甲方在预算评审阶段就会打回来第三识别率瓶颈其实不在算力而在前端。你算力再强麦克风收到的就一坨噪声混着微弱人声后端识别引擎再大也白搭。行业里常说垃圾进垃圾出语音识别也一样前端信号质量决定天花板。AU-48的价值恰恰是把前端降噪和识别做进了同一颗芯片里从源头保证了进入识别引擎的音频是干净的人声这叫对症下药。2.3 云端方案为什么直接出局另外一个需要说明的点是为什么云端方案压根没进第二轮。第一代方案已经吃过这个亏了。矿山井下的无线网络覆盖本身就稀疏很多采掘工作面可以说完全没有信号即便在地面车间网络波动也很大。语音识别是延迟敏感应用音频上传、服务器推理、结果返回整个链路只要有一环卡顿用户体验就是毁灭性的。更别说矿上还涉及数据不出厂区的合规要求人声数据往云端跑甲方安全部门直接一票否决。AU-48这种完全本地化的方案没有这些顾虑语音数据不出设备不存在隐私或者泄密的争议。3. 硬件设计把模组装进高噪声现场要抠的细节3.1 麦克风阵列布局的几个关键点AU-48支持双麦差分输入但麦克风怎么摆、摆在哪对实际效果的影响是决定性的。我第一版样品就是随手把两个麦克风焊在模组的PCB边缘间距只有2厘米结果现场测试一塌糊涂波束成形几乎没有效果。后来查资料才发现双麦阵列要想在低频段人声基频80-300Hz获得足够的指向性麦克风间距至少要拉大到3厘米以上工程上常用40毫米左右。间距太小两个麦克风接收到的信号时延差微乎其微算法根本算不出有效的波束指向间距太大又会引起空间混叠反而引入新的失真。在矿用设备的机箱设计上我建议把两个麦克风做成独立的拾音小板用排线连接到AU-48模组两枚模拟麦克风分别放置间距保持40毫米朝向来人是主要的操作方向。麦克风开孔要尽量放在机箱正面高度约1.5米与人嘴基本平齐。另外麦克风孔不能正对空调出风口或者振动源风噪和振动会直接叠加到拾音信号里。粉尘环境还要注意开孔直径不能太小不然孔口容易被粉尘堵住我们后来在孔口加了一层不锈钢防尘网密度选80目的既不影响声波透过又能拦住大部分粉尘。3.2 电源和防护设计保证现场不掉链子矿山现场的供电环境非常恶劣这是我做这个项目最大的体会之一。大功率设备频繁启停电网电压波动肉眼可见实测最低掉到标称电压的75%左右瞬间跌落时间在几十毫秒到几百毫秒之间。AU-48模组的电源输入范围是3.3V-5.5V但直接拿矿上电源供电根本不行必须在前端加一级宽压DCDC稳压我用了一颗现有的国产电源管理芯片输入端支持7V-36V宽压输出稳定在5V/1A。输入侧还加了TVS管吸收瞬态浪涌正负极之间并联一个大容量电解电容这个电容的作用是吸收电压跌落瞬间的能量确保模组不会因为一个短暂的电压凹陷而重启。实际测试中从输入电压跌落到10V持续200ms的恶劣条件下输出端依然能维持在5V±3%以内模组运行不受影响。防尘防水方面整机我们做到了IP65也就是完全防尘并且能防低压水柱。麦克风孔的位置除了前面说的防尘网建议在PCB麦克风小板周围做一层硅胶减震垫圈因为矿山的设备振动是持续性的麦克风如果跟着机箱一起振动会产生明显的低频振动噪声这部分噪声靠算法很难完全消除最好的办法是从物理层面隔振。另外注意模组本身和机箱金属板之间不要直接接触用铜柱悬空起来螺纹连接处加弹簧垫圈防松避免长期振动导致地线接触不良。3.3 和主控之间怎么对接AU-48模组对外接口比较齐全。我这边设计时主要用了三组接口一组UART串口用于识别结果输出和参数配置一组GPIO用于唤醒/中断信号另外还接了I2S数字音频输出用来做语音对讲回放。识别到命令词之后模组会把结果通过串口以帧格式发出来同时拉高一个GPIO引脚外部主控收到中断再读取串口数据这样可以避免主控一直轮询串口浪费CPU。帧格式可以自定义我们用的是固定的8字节帧头加2字节CRC16校验具体格式后面讲联调的时候再展开。如果现场有多个设备联动模组也支持一对多的继电器输出能力直接驱动声光报警器或者电机控制回路。这里有一个小细节想提醒一下AU-48模组的串口电平是3.3V TTL如果现场主控用的是5V系统必须做电平转换不能直接怼上去。我们最开始有一块测试板因为忽略了这个串口通信时好时坏排查了很久才发现是电平不匹配导致的。后来加了一颗双向电平转换芯片问题瞬间消失。这种基础但致命的坑做硬件的人一定要引起重视。3.4 安装位置一个被低估的变量模组在机箱里的安装位置很多人觉得随便找个角落放就行实际影响非常大。我们第一台样机装在一个空压机的控制柜里控制柜恰好贴着变频器结果一开机识别率惨跌到不到五成偶尔还莫名其妙地误唤醒。后来排查发现变频器工作的时候会产生强烈的电磁干扰和谐波干扰通过空间辐射直接耦合到麦克风信号线上,把有效信噪比又往下拉了几个dB。解决的办法是把AU-48模组挪到远离变频器的一端麦克风信号线改用屏蔽双绞线屏蔽层单端接地同时在模组电源输入端加了一颗共模电感。改动之后误唤醒基本消失识别率也恢复到了正常水平。所以在现场安装时先观察一下机柜里有哪些大功率设备尤其是变频器、电机驱动器这类开关频率高的设备它们就是隐形的噪声源。麦克风阵列的拾音方向要避开这些设备的正对方向。还有一点模组尽量不要直接固定在会振动的结构件上比如电机底座、机柜门板这些位置的振动会通过PCB传导给麦克风产生结构噪声。挂在减震支架上或者固定在机柜后壁的非振动区域是比较稳妥的选择。4. 固件与调参把算法的能力真正释放出来4.1 词条训练与指令集设计AU-48的本地识别引擎支持用户自定义命令词并不是出厂就固化一套词汇的。这就有个工程问题词条怎么设计才能既满足现场需求又不容易识别混淆。我们最终确定的指令集分两类。一类是调度类指令包括开启皮帶停止皮带启动破碎急停联络调度取消动作另一类是确认类指令比如确认执行收到重复一遍。设计词条的时候有几个坑要避开一个是词条之间的发音相似度比如启动和停止声学特征差异大不容易混淆但皮带启动和皮带停止如果语速过快识别引擎偶尔会听混所以我们在词条里增加了到站这类喊话习惯词让每个指令有更长的区分片段。另一个是词条长度要适中太短比如就一个好字极易在噪声中被误触发太长比如请把三号皮带的运行速度降低百分之二十识别引擎在噪声条件下的置信度会明显下降因为需要匹配的声学特征太多任何一段被噪声污染都可能拉低整体得分。经验值是一个词条控制在2到4个汉字加一个动词比如开启皮带紧急停止识别效果最好。词条训练的过程是这样的AU-48配套的PC端工具会录制标准发音做模板同时支持采集现场噪声环境下的语音增强训练。我们当时在破碎站现场录了大约两个小时的环境噪声连同几条主要指令的标准发音一起导进了训练工具生成的模型再烧录到模组里。这个带噪训练步骤很关键相当于让识别引擎提前见过现场的噪声长相实战识别率会有非常明显的提升。4.2 关键参数怎么调一条我试出来的路线图AU-48开放给用户的调试参数不少但真正决定现场效果的核心参数大概有这么几个降噪等级、麦克风增益、唤醒灵敏度、识别置信度阈值、VAD静音门限、指令去重窗口。先说降噪等级。参数档位一般分低/中/高三档并不是越高越好。降噪强了背景安静了但人声的高频细节也会被误伤识别率反而下降。我自己的调法是先在安静环境里定一个基线把指令词循环识别100次记录基线识别率。然后逐步加大环境噪声分别在中噪声、高噪声下测试不同降噪档位的识别表现找到每个噪声区间最优的档位。实测下来噪声在80分贝以下用中档80到95分贝用中高档95以上用最高档这样识别率能维持在一个相对稳定的水平。再讲唤醒灵敏度。这个参数控制模组对唤醒词的响应积极度灵敏度调太高环境里随便一个尖锐声音都可能唤醒调太低人在近距离喊唤醒词也没反应。我们最终找到一个比较稳妥的中间值然后在程序里加了二次确认逻辑第一次唤醒之后模组输出一个提示音人再说出具体指令模组才执行。这样可以大大降低噪声环境里的误唤醒率。识别置信度阈值也是类似思路模组对每一条识别结果都会给出一个0到100的置信度得分我们设为85分低于这个分数一律不执行。代价是偶尔有个别指令会被误判为不清晰而漏执行但相比误执行一条错误的指令漏执行的安全风险要小得多。安全场景里宁可漏、不可错。VAD静音门限决定模组在什么音量以下判定为无人说话。这个参数要结合现场本底噪声来配。矿山车间即使安静时段本底噪声也有70多分贝所以VAD门限必须设得比普通室内场景高很多否则模组会把持续的背景噪声当成语音以为人一直在说话CPU占用率高不说识别结果也乱七八糟。我的调法是记录一段30秒纯环境噪声看模组上报的等效声压级平均值然后在这个平均值上加6到8个dB作为VAD门限这样能保证噪声环境下有人声时能稳定触发没人声时不会被环境声持续激活。4.3 与STM32主控的联调流程模组调通了接下来就是和主控对接。我们现场的主控板是STM32F103开发环境用的KEIL5。这里提醒一下新入坑的朋友KEIL5安装完以后默认是不带STM32芯片支持的必须先在Pack Installer里安装对应的芯片包不然你新建工程的时候在芯片列表里根本找不到STM32F103C8T6。这个步骤卡了我半小时网上教程不少但很多人漏了说这一步。安装完芯片包以后还要注意在工程配置里选择正确的Flash和RAM大小编译后的固件才能正常下载和运行。STM32主控这边的核心工作就是解析AU-48通过串口发过来的识别结果帧。我把我们用的帧格式简化一下把关键的解析代码列出来方便直接抄作业。串口波特率我们配置为1152008N1。AU-48上报帧格式如下// 帧格式帧头(0xAA 0x55) 数据长度(1字节) 指令类型(1字节) 命令词ID(2字节) 置信度(1字节) CRC16(2字节) typedef struct { uint8_t header[2]; // 0xAA 0x55 uint8_t length; // 数据长度 uint8_t cmd_type; // 指令类型 uint16_t cmd_id; // 命令词ID uint8_t confidence; // 置信度 0-100 uint16_t crc; // CRC16校验 } Au48Frame; uint8_t rx_buffer[64]; uint8_t rx_len 0; void UART_IRQHandler(void) { uint8_t byte UART_ReceiveByte(); // 简单的帧同步检测帧头 if (rx_len 0 byte ! 0xAA) return; if (rx_len 1 byte ! 0x55) { rx_len 0; return; } rx_buffer[rx_len] byte; if (rx_len 8) { Au48Frame *frame (Au48Frame *)rx_buffer; // 校验CRC这里省略具体实现 if (CheckCRC16(rx_buffer, 6) frame-crc) { if (frame-cmd_type 0x01 frame-confidence 85) { HandleCommand(frame-cmd_id); } } rx_len 0; } }这段代码是最简版实际工程里还要加环形缓冲区、超时重同步等机制避免半包或者粘包把状态机搞乱。串口通信调试的时候我一般先拿USB转TTL直接连AU-48模组在PC上用串口助手看裸数据确认模组侧输出正常再去对STM32的程序。这样能快速区分问题是出在模组还是出在主控解析不至于两头一起找。4.4 多设备防串扰同一条巷道里的语音争夺战矿上的语音终端不是一台两台一条巷道可能同时装十几台。如果所有终端都用同一个唤醒词人一喊整条巷道所有设备一起响应场面会很混乱。我们做了三件事来解决这个问题。第一所有终端分区域配置不同的唤醒词比如破碎站区域用破碎机皮带区域用皮带工从源头避免跨区域干扰。第二在识别逻辑里加入了距离衰减特性和方向约束波束成形天然对非正前方的声音有抑制人站在A终端前喊话B终端因为声波到达方向不匹配唤醒概率本身就低。第三应用层加了广播屏蔽机制A终端识别到唤醒词后会通过RS485总线向同组其他终端广播一条消息其他终端收到后在30秒内暂时降低唤醒灵敏度这样人走到哪一台设备前基本只有面前那一台会响应。这套组合拳打下来现场几乎没有再出现一呼百应的情况。5. 实测效果从三成到九成的数据对比5.1 测试场景和测试方法参数调完之后我们在现场做了系统的实测。测试选了三个有代表性的点位空压机房稳定强噪声、破碎站冲击型强噪声、皮带走廊持续中高噪声扬尘。测试人员包括我自己和另一位项目工程师两人都戴着安全帽、防尘面罩模拟真实作业状态。测试时人分别站在距模组1米、3米、5米的位置每个距离、每个点位循环测试80条指令统计唤醒率、识别率、误唤醒次数和平均响应时延。这里要说明一下唤醒率和识别率在我这边的定义。唤醒率是人说出唤醒词后模组在一定时间内响应并进入听指令状态的比例识别率是进入听指令状态后人能明确听到设备反馈指令执行成功的比例。理论上唤醒率再高识别率上不去也没用两个指标要一起看。5.2 第一代单麦方案和AU-48的数据对照拿第一代部署的单麦模组和AU-48在同一测试点位做了对比结果非常直观。测试点位方案1m识别率3m识别率5m识别率唤醒率误唤醒次/小时空压机房单麦模组41%23%9%35%2.1空压机房AU-4892%87%74%96%0.4破碎站单麦模组33%18%6%29%3.4破碎站AU-4891%85%71%95%0.6皮带走廊单麦模组52%31%12%48%0.8皮带走廊AU-4895%91%80%98%0.2数据里值得注意的不只是识别率提升还有误唤醒次数的大幅下降。单麦方案在破碎站一小时误唤醒3.4次这个数字在真实使用场景里是非常烦人的工人会不停地听到设备莫名其妙地回应久而久之就会对这套系统失去信任。AU-48把误唤醒次数压到了0.6次每小时相当于两个多小时才可能出现一次误触发从不可用变成了基本可用。5米距离的识别率虽然相比近场有明显下降但74%-80%的水平在工业现场已经可以接受毕竟实际使用中很少有人会站在5米外喊指令更多是近距离操作。5.3 非平稳噪声和混响条件下的表现除了常规场景我们还专门做了两组比较极端的测试。一组是在铲车经过的时候喊指令模拟突发强噪声一组是在巷道里距离模组2米左右的位置喊话模拟混响严重的场景。铲车经过时噪声瞬间峰值能到112分贝左右噪声频谱和静态噪声差异很大属于典型的非平稳干扰。AU-48在这组测试中1米识别率掉到了82%3米掉到75%虽然相比平稳噪声场景有明显下降但至少还在可用范围。巷道混响测试相对理想识别率保持在88%左右。说明芯片里集成的回声消除和混响抑制模块确实发挥了作用。连续稳定性方面我们在破碎站让模组连续运行了72小时期间每小时统计一次识别率整体波动在正负5个百分点以内没有出现热衰减或者长时间运行后识别率逐渐掉线的现象。整机功耗实测在1.6W上下主控加模组加继电器全套系统不超过3W直接塞进矿用本安箱的热设计也没有压力。6. 现场典型问题与排查实录6.1 误唤醒频发怎么定位是电噪声还是声噪声项目调试过程中遇到最让人抓狂的问题就是误唤醒。有个点位装好后设备每隔几分钟就自动响应一次现场工人来找我们投诉说这玩意儿成精了没人理它自己在那儿说话。第一反应是系统算法有问题结果把模组拆下来拿到办公室测一切正常。再装回去故障复现。这就说明问题不在算法本体而在现场的环境。排查思路是这样的。先在模组串口上接一个监听工具持续打印识别结果结合时间戳判断误唤醒是否有规律。我们发现误唤醒基本发生在大功率设备启动或者变频器调速的瞬间频率上呈现出明显的周期性。然后用示波器测了模组电源引脚上的纹波发现设备启动瞬间纹波峰值高达500mV以上已经远超正常范围。这是典型的电源被干扰变频器的开关谐波通过供电母线耦合到了模组电源模组内部的模拟电路工作点被干扰DSP误把电气噪声当成了语音信号。解决措施就是前面讲的加共模电感、TVS管、加大储能电容并把模组供电从设备的动力电源回路里独立出来。改完之后这个点位的误唤醒彻底消失再也没复发过。6.2 识别率突然下降超过20%先检查麦克风孔另一个高频问题是设备运行一阵子后识别率断崖式下跌。我遇到过一个案例一台皮带走廊的设备刚装好时识别率92%用了两周后掉到70%不到。一开始以为是算法或固件有问题反复刷机调参都没用。最后拆开外壳才发现麦克风孔外面那层防尘网已经被粉尘糊死了声波根本进不去麦克风能听到的全是壳体振动的咕嘟咕嘟声音。处理办法分两步。立即解决是清理防尘网用压缩空气从外往里吹清理完装回去识别率立刻恢复。长期解决是跟矿方约定每周巡检时用软毛刷清理一次防尘网同时把麦克风开孔的角度从水平改成约15度向下倾斜减少粉尘直接沉降堆积。另外在固件层面AU-48支持配置麦克风增益自校准我们设置成上电时根据环境噪声自动调整一次增益这样就算防尘网有轻度堵塞导致麦克风灵敏度下降系统也会自动做补偿把识别率衰减的斜率尽量拉平。6.3 串口丢帧和控制失灵多半不是软件问题还有一个典型问题主控偶尔收不到AU-48的识别结果或者收到的帧CRC校验失败导致指令执行失败。这个问题的排查效率很重要。我们最开始怀疑是串口波特率或者主控解析有bug反复改程序无果后来换了台主控板测试还是偶发。最终发现问题是出在通信线缆的接地方式上现场设备箱外壳和主控板GND之间存在电位差串口线的地线把两个电位不同的地直接连在一起产生地环路电流干扰了串口信号。解决办法也简单串口信号线用屏蔽双绞线屏蔽层在模组侧单端接地主控侧不接地如果两者距离很远可以直接在主控UART和AU-48之间加一个RS485转接模块走差分信号抗干扰能力会强很多。另外我们做了一层保护壳把波特率从115200降到38400误码率进一步下降。虽然传输速率慢了但对偶发的短指令上报来说完全够用。稳比快重要。6.4 供电跌落导致模组反复重启矿上大功率设备启动瞬间电网电压会有一个明显的凹陷严重的时候整条配电线路的照明都跟着暗一下。AU-48模组虽然内部有滤波但耐不住长时间频繁的电压凹陷。有一次在井下调试每次都正好赶上提升机启动模组就重启一次唤醒词喊了也白喊。这个问题靠模组自身解决不了必须在供电前端想办法。我们给容易出现电压凹陷的点位加了一个基于电容储能的掉电保持电路一个4700微法的高品质电解电容配合一个二极管隔离正常工作时电源给电容充电电压凹陷时电容通过二极管给模组供电。实测在200毫秒的电压凹陷期间模组输出电压依然能维持在4.8V以上模组全程不断电、不重启。后来进一步发现电容容量还可以根据凹陷持续时间来估算200毫秒的凹陷大约需要4700微法左右时间长就往上加成本不高但效果立竿见影。6.5 一条指令被重复执行加个去重就解决最后一个是应用层的坑。在混响比较重的巷道里人喊完一条指令之后声音在巷道里来回反射虽然麦克风波束成形会抑制大部分反射声但总有一部分残余会被识别引擎当成第二次指令输入。于是出现了喊一次皮带停止结果系统执行了两次的情况。对皮带这类设备来说重复执行停止指令问题不大但要是重复执行启动指令就可能有安全隐患。解决思路是在主控应用层加指令去重记录最近执行的指令ID和时间戳如果相同指令在30秒内重复出现直接丢弃。AU-48模组本身也有一个指令去重窗口参数默认是10秒我们把它调到了18秒再配合主控层的30秒去重逻辑双重保险。调试完成后再也没出现过重复执行的情况。6.6 问题排查方法小结这几类问题表面上看五花八门但排查思路其实是有共同套路的。先区分问题出在声学前端电气干扰还是应用逻辑三个层面。声学前端问题通常表现为识别率整体下降、方向性变差重点查麦克风、防尘网、安装位置电气干扰问题通常表现为误唤醒频繁、串口通信异常、设备重启重点查电源质量、接地、信号线屏蔽应用逻辑问题通常表现为表现规律性很强比如固定时间点、固定指令触发重点查主控程序。按这个框架来可以把排查时间缩短一大半。做这个项目最大的体会是强噪声环境下的语音方案真正的技术门槛从来不在算法本身而在对现场环境的理解和应对。AU-48给了我们一把好用的钥匙但钥匙怎么用、用在哪还是得靠对矿山现场一个个细节的死磕。从麦克风开孔角度到供电电容容值从唤醒词设计到串口接地每一步都可能决定方案的成败。这个项目做完以后我又把同样的方案复用到附近一家水泥厂和一家钢厂的调度系统改造上流程跑熟了从进场到验收基本两周搞定。如果你也在做类似的高噪声环境语音项目希望这篇文章能帮你少走几个弯路。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门