ARTICLE DETAIL

资讯详情

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

ADAU1452 ANC主动降噪实战:从硬件选型到量产避坑

ADAU1452 ANC主动降噪实战:从硬件选型到量产避坑 做了快半年基于ADAU1452的ANC主动降噪方案从最初在开发板上拖模块、调参数到后面一步步把方案推到可小批量的状态这中间踩的坑、绕的路比我想象中多得多。很多朋友看到“ANC”三个字母觉得就是“把噪声反相再放出来”这么简单可真做过一遍就知道Demo和产品之间隔着一条等级不低的河。这篇文章我不打算只讲原理重点放在硬件选型、性能优化和避坑上把我经历过的真实问题和处理思路都摊开来说给准备上手ADAU1452做ANC、或者正卡在某个环节的朋友一个参考。1. 为什么选ADAU1452做ANC先想清楚“能干什么”1.1 ANC对音频DSP的核心诉求主动降噪不是简单地把采集到的噪声信号做个反相输出。实际声场里的噪声是宽带的、时变的而且声学路径一直在变比如耳机佩戴松紧、头转动、环境温度变化都会影响最终效果。一个能做ANC的音频DSP至少要满足三个硬性条件信号链延迟足够低、运算能力足以跑滤波算法、输入输出通道数量和接口形式足够灵活。前馈式降噪最能说明问题。参考麦克风采集环境噪声DSP对噪声信号做滤波和反相再经扬声器发出“反噪声”。这个反噪声到达人耳的时延要和外部噪声通过耳机壳体泄漏到人耳的时延大致匹配才能有效抵消。声波在空气中的传播速度约343m/s路径差1cm就是接近30us3cm就将近90us。如果DSP的电声链路延迟比泄漏路径大出好几倍降噪带宽就会被严重压缩可能只剩100Hz以下那点“隆隆声”连引擎低频嗡声都处理不干净。所以ANC方案的第一优先级永远是延迟预算。1.2 ADAU1452哪些规格是ANC真正用上的ADAU1452是ADI SigmaDSP系列中通道规模较大的型号4路ADC输入、8路DAC输出采样率最高到192kHzDSP内核主频在两百多MHz级别每个采样周期能执行大量音频处理指令。这些规格在ANC场景下很有意义4路ADC可以同时接入参考麦克风、误差麦克风还能留一路做语音通话或环境音采集8路DAC可以驱动双声道乃至多扬声器系统甚至可以用一路DAC输出做测试激励信号一路做实际降噪输出。更重要的是ADAU1452这类SigmaDSP是流式音频处理架构DSP在硬件时序的控制下逐采样周期处理数据处理时延是确定且可预估的不会像通用MCU那样受中断调度和系统负载影响产生延迟抖动。这对ANC来说几乎是最关键的优势。用通用处理器做音频时操作系统、驱动、任务切换都可能引入毫秒级的不确定性ANC系统一旦出现几十微秒的抖动效果就会明显劣化。1.3 Demo和产品之间的差距Demo阶段用ADI官方EVAL板USB接上PC在SigmaStudio里拖模块、在线调参几分钟就能听到降噪效果这容易让人产生“已经做完了”的错觉。但此时所有参数都存在DSP的RAM里断电即失。产品要面对的是上电后DSP怎么把程序自动加载起来不依赖电脑和调试器每颗麦克风的灵敏度公差不同批量产品怎么保证效果一致性整机装配后声学结构变化原先调的系数是否还成立产线几十上百台机器怎么快速烧录、校验、存档。我的经验是从Demo第一天起就要想清楚产品的最终形态。即使手里只有一块开发板也要先把从麦克风到扬声器的完整音频链路画出来参考MIC从哪个ADC进误差MIC从哪个ADC进DSP处理后从哪个DAC出功放用哪颗扬声器怎么接。这张链路图就是后面硬件选型和程序结构的蓝图越早确定后面返工越少。2. 硬件选型ANC系统的骨架怎么搭2.1 麦克风最容易被忽视的选择细节ANC对麦克风的要求和普通语音通话很不一样。参考麦克风和误差麦克风角色不同参考麦克风负责拾取环境噪声适合放在设备外侧要求灵敏度一致性高、相位一致性高否则左右声道或者同型号不同个体之间会有明显差异误差麦克风靠近扬声器或人耳位置用于拾取残余噪声要求线性度好、低频响应稳定因为低频段的降噪效果最终要靠它来验证和闭环。仿真和实测下来我建议优先考虑MEMS麦克风特别是数字PDM输出的型号。一方面MEMS贴片封装适合产线自动化焊接一致性和温漂表现普遍比驻极体好另一方面数字输出可以避免模拟信号在长距离PCB走线上被干扰。如果选模拟MEMS或驻极体需要额外加运放放大和抗混叠滤波电路PCB面积和成本都会增加。数字MEMS则要考虑将PDM转成I2S要么用带PDM输入的MCU要么加一颗音频编解码芯片这会增加系统复杂度。对于以ADAU1452为核心的方案我最终选的是模拟MEMS加运放前端理由是和ADC的连接最直接链路最短延迟最好控。麦克风选型时重点盯三个参数信噪比SNR、灵敏度公差、声学过载点AOP。SNR高的麦克风底噪低ANC静音时不会听到沙沙声灵敏度公差越小批量一致性越好产线校准压力越小AOP要覆盖目标噪声的最大声压比如车载场景可能有110dB SPL以上的高频轰击麦克风提前削波了后面滤波做得再好也没用。2.2 功放与扬声器输出链路要盯死延迟和失真ANC输出链路的延迟会直接吃掉前面辛辛苦苦省的预算。D类功放效率高、发热小但内部调制和解调会带来额外延迟低端型号可能到几百微秒这在ANC里是致命的。AB类功放线性度和延迟特性都好但效率低电池供电的产品要仔细算功耗。耳机类产品常见做法是选低延迟D类或AB类小功率功放具体看系统总延迟预算。车载或家电类设备对功耗不那么敏感AB类或者高性能D类都能接受。扬声器选型要看低频下限和失真。ANC降噪最核心的是中低频扬声器低频响应太差反噪声发不出来效果自然归零。此外扬声器的相位响应要尽量平缓因为相位突变会干扰反馈环路的稳定性。功放和扬声器的功率匹配也要算清楚如果功放在目标频段输出能力不足反而会把反噪声变成新的失真源。我踩过的坑是一开始只关注扬声器的额定功率和频响忽略了功放的延时指标结果整个前馈环路延迟超标后来换了一颗低延迟功放才解决问题。所以输出链路的延迟一定要在选型阶段就列入硬指标。2.3 EEPROM、时钟、电源决定能不能自启动的三件套ADAU1452的Self-Boot自引导功能决定了产品能否脱离电脑独立工作。芯片上电后通过引脚配置选择从I2C或SPI接口的EEPROM加载程序。在SigmaStudio里可以把编译好的DSP程序和数据导出为Self-Boot镜像文件烧写到EEPROM中。EEPROM容量建议256Kbit到1Mbit之间程序大小和参数数量决定具体容量。I2C接口的EEPROM是主流选择比如AT24C256系列注意I2C上拉电阻通常用4.7kΩ走线尽量短。时钟部分ADAU1452可以用外部有源晶振/MCLK输入或者接无源晶振配合片上振荡器电路。48kHz采样率系列常用12.288MHz晶振96kHz系列用24.576MHz。ANC对时钟精度的要求不算极端普通±20ppm晶振就够但要注意晶振起振时间和稳定度这会影响上电引导时序。电源方面模拟AVDD和数字DVDD建议分开用LDO供电中间串磁珠隔离每个电源引脚旁边放0.1uF陶瓷电容整体再放一颗10uF储能电容。上电顺序上尽量让MCLK稳定后再释放DSP复位信号否则PLL可能锁不住DSP工作异常。2.4 PCB布局音频走线的“生死线”ANC系统的PCB布局核心原则是低噪声、低串扰、低延迟路径。参考麦克风和误差麦克风的前端电路要尽量靠近麦克风放置模拟走线远离数字信号、电源开关节点和I2C/SPI信号。模拟地和数字地虽然最终要连在一起但布局上要分区处理避免数字回流噪声串进模拟电路。I2S/TDM数字音频走线要等长控制串扰避免数据采样出错。功放的扬声器输出走线要粗短并且远离麦克风输入走线。很多时候ANC样机底噪大查到最后是功放输出信号串扰到了参考麦克风输入端导致DSP把反相声信号当成噪声又采了进来形成不必要的二次处理。这种问题很难在软件里完全补偿只能从布线上解决。3. SigmaStudio搭建ANC信号链从理论到图形化3.1 前馈、反馈、混合式先定拓扑再动手ANC的拓扑结构决定了信号链的复杂度。前馈式结构清晰参考麦克风放噪声源侧通过一个控制滤波器驱动扬声器理论上降噪带宽宽适合发动机等平稳噪声但前馈对参考麦克风和扬声器之间声学路径的稳定性要求很高路径一变化性能就会下降。反馈式结构只用误差麦克风不需要参考麦克风算法上等效于一个负反馈控制系统能抑制一定随机噪声但反馈环路容易不稳定增益不能调太高否则某个频段会啸叫。混合式是消费级耳机的主流做法前馈加反馈结合前馈负责宽频带和主要噪声反馈负责补偿前馈没处理好的残余。在ADAU1452上做混合式的好处是通道数够用4路ADC刚好够接两只参考麦克风和两只误差麦克风8路DAC够驱动左右扬声器。但混合式意味着信号链更复杂参数更多调试工作量会成倍增加。我的建议是如果目标噪声相对稳定先用前馈做垂直验证等声学结构和算法框架跑通再叠加反馈通道。3.2 在SigmaStudio里搭一条最简ANC链路打开SigmaStudio新建一个ADAU1452工程第一步是配置采样率和时钟。48kHz是常用选择MCLK对应12.288MHz。ADC输入配置为参考麦克风通道DAC输出配置为扬声器通道。最简的前馈ANC信号链是参考MIC → ADC → IIR滤波模块 → 反相增益 → DAC → 功放 → 扬声器。这里有个容易被忽略的环节在ADC输出和滤波模块之间加一级DC Blocking滤掉麦克风前端的直流偏移否则直流进入滤波器和功放会造成扬声器偏移甚至爆音。还有一个环节是增益管理SigmaStudio里信号是定点格式0dBFS是满量程多级滤波后信号可能溢出需要随时检查每一级的电平指示确保不削波。单纯的IIR滤波模块并不能自动完成ANC还需要通过测量和设计把滤波器系数填进去。整个开发过程就是“搭链路-测路径-算系数-回灌-实测-再调”的循环。3.3 自适应滤波在ADAU1452上的落地方式很多朋友一上来就想在ADAU1452上跑自适应滤波期待它能自动适应路径变化。实操中需要冷静看待这件事。SigmaStudio本身提供了一些自适应滤波相关的模块但真正的FxLMSFiltered-x Least Mean Square结构也就是把参考信号经过次级路径模型后参与LMS更新并不是拖一个“ANC模块”就能完成的。要在DSP上实现完整的FxLMS通常需要自己用DSP汇编或者标准DSP模块组合搭出参考信号、误差信号、次级路径模型的运算关系开发难度不小。另一个更务实的方式是离线设计固定系数滤波器在最终声学结构上实测主路径和次级路径的传递函数离线计算出最优的控制滤波器系数再烧进DSP。固定系数的好处是开发周期短、行为可预测、稳定性和延迟都有保障。如果实际产品要适应佩戴变化、温度变化等场景可以在MCU侧做分档参数切换或者用MCU同步音频数据、离线更新滤波系数再写回DSP。这样既能利用ADAU1452的低延迟信号处理能力又能获得一定的适应性。我在项目中就是先固定系数验证了降噪潜力再在此基础上做了多套参数分档切换效果和复杂度取得了比较好的平衡。4. 声学路径测量与滤波器设计ANC的核心数学4.1 主路径、次级路径与理想控制滤波器前馈ANC中主路径P(z)是参考麦克风位置的噪声传播到误差麦克风位置的传递函数次级路径S(z)是DSP输出经DAC、功放、扬声器、声学空间再到误差麦克风的传递函数。理想的极简解是控制滤波器W(z)近似等于P(z)/S(z)。但问题在于反向路径S(z)往往存在延迟和非最小相位成分直接求逆会产生不稳定的滤波器。所以在实际设计中要在这个理想等式上加入正则化、约束和稳定裕度控制Wiener解在高增益频段不过度放大。这个过程中最容易犯的错误是把P(z)、S(z)测错或者测的环境不对。次级路径要在最终的整机声学结构下测量把电路板装进去、扬声器装好、麦克风位置固定这时候测到的S(z)才代表真实工作状态。如果开发时在半开放式测试治具上测装进产品后声学边界变了整套系数基本作废。4.2 用对数扫频测量传递函数实际操作中我用的是对数扫频信号比如从20Hz到10kHz、持续几秒的chirp信号通过DSP的辅助DAC播放给扬声器误差麦克风采集响应再离线用FFT计算传递函数。对数扫频的好处是可以把非线性谐波失真与环境背景噪声的影响分离测量精度更高。测量时要注意激励信号电平不要过大避免扬声器或功放进入非线性区否则测出来的频响是喇叭失真的结果不是路径的真实响应。为了让测量稳定同一个路径最好重复测几次取平均避免环境噪声和时间漂移的干扰。另外一定要保证测量时设备和最终使用状态的一致性比如说好误差麦克风的声学密封圈装没装、扬声器网罩有没有盖这些细微差异都会反映在相位曲线上进而影响滤波器设计。4.3 把测量结果变成DSP系数拿到P(z)和S(z)的实测频响后我会先用Matlab做离线设计。根据目标频段的降噪需求结合正则化约束设计一个IIR滤波器逼近理想控制滤波器W(z)。Matlab里的invfreqz和fdatool是常用工具设计完后把级联二阶节的系数导出再在SigmaStudio里填写或导入IIR滤波器模块。FIR模型虽然线性相位特性更好但同样的频响精度需要更多阶数群延迟也更大ANC这种对延迟敏感的场景我优先用IIR。设计出来的系数不能直接盲烧。先在Matlab里用实测的P(z)、S(z)做仿真把理论残余噪声算出来看各个频段是否达到预期。如果仿真中某个频段出现增益过大或者相位裕度不足就先调整设计约束不要急着上机试错。仿真结果没问题了再烧到DSP里做实测。这个过程看着繁琐但能极大地减少实机反复试错的时间。5. 性能优化降噪量、稳定性和延迟的平衡5.1 延迟预算拆解每个环节各占多少ANC性能优化的核心是延迟预算。在48kHz采样率下单个采样周期是20.8us。ADC转换本身有固定群延迟可能在几十到上百微秒区间DSP处理是逐采样周期流水执行的至少增加一个采样周期也就是约20.8usDAC转换同样有群延迟功放和扬声器电声转换再加一部分延迟。把这些加起来整个电声链路的延迟经常在200us到300us的量级。对照前馈ANC的约束外部噪声从参考麦克风到误差麦克风的声学传播时间大约只有几十到几百微秒所以电声延迟越短越好。如果总延迟超过300us前馈降噪的高频延伸就会明显受限。优化手段主要有几个方向提高采样率到96kHz甚至192kHz虽然每周期时间缩短但ADAU1452有足够的处理能力系统整体群延迟未必线性增加尽量用IIR滤波器代替长FIR选低延迟的功放在结构允许范围内把扬声器靠近泄漏路径减少声学位移差。每一项能省几十微秒最后加起来就很可观。5.2 滤波器结构与稳定性权衡ANC系统稳定性是个系统工程。反馈环路天生有稳定性约束增益余量和相位余量必须留够否则某一段频带会出现噪声放大甚至啸叫。前馈部分虽然不存在闭环振荡但当W(z)增益过大时由于次级路径建模仿真和实际不完全一致也可能在某些频段产生“过抵消”造成瞬态尖峰。实际听感上降噪量不是越高越好尤其是在耳机类产品中突然的非均匀频段补偿会让人产生闷耳、不适的感觉。处理方法是给滤波器设计加上输出能量约束不让反噪声在非目标频段乱放大。具体可以在Matlab设计时限制最大增益或者在SigmaStudio里加一个峰值滤波器压低不必要的频段。还有一个经验不要追求单个滤波器解决所有问题而是分频段、分目标设计两三个滤波器级联每个滤波器只负责一段整体结果更容易控制。5.3 实测降噪量需要看什么指标性能验证不能只听“感觉安静了”。我的做法是搭建一套固定测试环境用人工头或者实际设备上的误差麦克风作为测量点播放粉红噪声或真实目标噪声录音对比ANC开启和关闭两种情况下的误差麦克风频谱用1/3倍频程粒度计算各频段降噪量。最终呈现出一张“降噪量-频率”曲线才能明确知道低频段降了多少、中频段是否有放大、整体是否符合预期。这里还要注意时域指标。用瞬态噪声测试比如方波脉冲、开关机噪声可以检验系统在突变噪声下是否会出现振铃或短暂不稳定。稳定性测试不可少持续播放较长时间的带限噪声然后切换到另一个频段观察系统是否收敛、是否出现自激漂移。这些测试都通过了产品才算有了基本的可靠性。6. 避坑指南从Demo到量产那些“说明书没写”的坑6.1 上电和自引导的坑第一个坑就是上电时序。ADAU1452要求MCLK稳定后再释放复位如果复位信号释放时MCLK还没起振PLL可能锁不到正确频率DSP直接处于异常状态。产品中我加了简单的复位延时电路用RC延时或者MCU的GPIO控制复位引脚确保晶振起振稳定后再释放复位。另一个坑是EEPROM自引导失败。I2C EEPROM的地址、数据格式和SigmaStudio生成的Self-Boot镜像必须匹配有一次我把I2C上拉电阻选得太大总线上升沿太慢导致引导过程丢数据DSP一直沉默查了很久才发现是上拉电阻问题。排查自引导故障建议先用USBi连接到DSP查看内部寄存器或者尝试手动下载程序确认DSP本身没坏再回头查EEPROM和时序。还要注意DSP上电后到自引导完成前DAC输出可能处于未知状态。如果外部功放没有静音控制这个瞬间可能有一声爆破音。解决办法是让功放的使能引脚由MCU控制等DSP跑起来、输出稳定后再开启功放。6.2 SigmaStudio开发的坑SigmaStudio本身很好上手但工程管理上容易出问题。首先是版本兼容性新版本SigmaStudio创建的工程不一定能被旧版本打开如果团队多人协作或者保存时间跨度大最好统一版本。其次在线调试时不要热插拔USBi否则可能导致DSP状态异常需要重新复位。在程序正式固化到EEPROM之前做一次完整的掉电重启测试确认自引导没问题不要只依赖在线模式。信号链的电平管理是最常见的问题。SigmaStudio的满量程是0dBFS级联了多个滤波器之后信号可能溢出声音发破甚至出现非线性失真。我的习惯是在每个关键节点放置电平监控模块运行时观察峰值电平保证在6dB以上余量。另外DC Blocking模块一定要有这个看似简单的滤波器能避免很多低频漂移和爆音问题。6.3 产线校准和一致性的坑批量生产的头号敌人是麦克风灵敏度公差和扬声器频响差异。每颗麦克风的灵敏度都可能差几个dB同样的滤波器系数放在不同产品上降噪量可能相差3dB以上。这必须在产线做校准。一个低成本方案是在DSP信号链中设计一个可编程数字增益级产线烧录时对每台设备做灵敏度测量把补偿增益写入EEPROM的某个参数区或者写入MCU的Flash由MCU在启动时写进DSP。配合产线自动化测试工装每台设备测试加校准几十秒内完成。另外一个容易翻车的是装配一致性。有些设备产线手工装配麦克风孔位置被胶水堵了一部分或者扬声器网罩没压到位导致声学路径变化ANC效果忽好忽坏。这种问题单靠电子线校准解决不了必须在结构设计和装配工艺上做约束。我在项目中增加了整机气密性检测和声学路径抽样测试才把产线的不合格率压下来。最后再说一个体会ANC这个事60%是声学30%是DSP10%才是软件和产线。很多朋友在SigmaStudio里调滤波器参数调到头秃效果就是不行最后发现问题出在麦克风位置、扬声器共振腔、壳体泄漏这些“物理”环节。我做这个项目最大的教训是在方案前期没有把声学结构当作第一优先级导致后期被逼着用DSP算法去补结构上的窟窿事倍功半。如果你也在搞类似方案先把声学路径测量做扎实再谈优化这条路走下来会顺很多。
返回列表