
做主动降噪耳机或者便携音频设备的工程师应该都绕不开ADAU1787BCBZRL这串型号。它是ADI的一颗超低延迟双DSP音频Codec很多中高端TWS耳机、头戴式ANC耳机和助听器方案里都能看到它的影子。先说结论这颗料最大的价值是把ADC/DAC、双DSP核、模拟前端、PDM数字麦克风接口和控制逻辑全部封装进一颗芯片里专门为ANC这类对延迟极度敏感的场景服务。普通Codec芯片只是完成数模转换DSP得外挂普通DSP芯片又得外挂CodecPCB面积和功耗都下不去。ADAU1787属于一条路走到底的选择——延迟低、集成度高、算力够用尤其适合音质和降噪深度都要兼顾的产品。这篇文章不是把数据手册翻译一遍而是我从选型评估、硬件设计、ANC调试到产线问题排查的完整记录。如果你正在评估这颗芯片或者手上已经有板子但调不出效果下面的内容应该能帮你省掉不少弯路。1. 先搞清楚ADAU1787到底“强”在哪里1.1 一颗芯片同时搞定Codec和DSP过去做一个主动降噪耳机比较常规的做法是模拟麦克风信号经过前置放大器进一颗独立ADC转成数字信号后交给DSP做降噪算法处理完再送到DAC转回模拟最后推耳机单元。这套方案的问题很明显——链路太长每一级都会引入延迟和噪声而且板子上要放ADC、DAC、DSP、运放好几颗料功耗和成本都压不下来。ADAU1787的思路是把这些全集成在一起。芯片内部直接有ADC采集模拟麦克风信号也有DAC把处理完的数字信号转成模拟输出中间的两个DSP核负责跑算法。对外只需要接上MCLK时钟、I2C控制总线和音频数据线一颗芯片就是一条完整的音频信号链。这个集成度带来的好处非常实际延迟低内部数据通路经过专门优化信号从ADC进去到DSP处理完再从DAC出来总延迟可以做到非常小这是ANC能稳定的前提。功耗低芯片针对便携设备设计典型工作功耗比分离方案小一个量级对电池供电的耳机很关键。面积小四层板甚至两层板都能布下完整系统对TWS耳机这种寸土寸金的结构非常友好。1.2 双DSP核不是噱头是真的能并行干活很多芯片宣传说“内置DSP”实际上只有一个核所有算法排队跑。ADAU1787上的双DSP核是真正可以并行工作的两个独立处理器核。它们的分工在ANC场景里特别有意义。比如一个核专门跑前馈降噪和反馈降噪的主环路另一个核同时处理通话降噪、EQ、动态范围压缩这些功能。两颗核各自持有独立的内存和计算资源互不抢占这样ANC主环路的处理时间就是确定的不会因为其他功能占用CPU而出现延迟抖动。从程序架构的角度说双核也方便代码维护。ANC算法是实时性要求最高的模块独立放在一个核上优化起来思路清晰音频后处理、音效、音量管理等放另一个核这部分算法改动不会影响ANC环路的稳定性调试和生产维护都省心。1.3 除了耳机它还能用在哪些地方ADAU1787的“超低延迟”属性决定了它适合所有对声音回环时间敏感的产品头戴式/入耳式主动降噪耳机这是最核心的应用前馈反馈混合降噪需要极低的系统延迟否则高频段根本压不住。助听器助听器对延迟的要求比普通耳机更苛刻过高的延迟会让佩戴者听到“回音”ADAU1787的低延迟特性刚好匹配助听器信号处理的需求。专业入耳监听舞台演出用的定制耳机需要低延迟地把环境声和监听信号混合同时做频响矫正。车载通话降噪车内麦克风阵列采集声音后需要在DSP内部做波束成形和回声消除双核算力在这里也够用。麦克风阵列和智能音箱多路PDM数字麦克风输入可以直接接MEMS麦克风做语音识别的前端处理。2. 硬件设计Codec的“周边”决定成败2.1 电源设计是整个方案的底噪下限很多人在ADAU1787上栽的第一个跟头就是底噪大。芯片本身SNR不差但如果你用开关电源直接给模拟部分供电出来的底噪会让你怀疑芯片是假的。我的做法是模拟和数字电源分开走。AVDD给ADC和DAC的模拟电路供电DVDD和IOVDD给数字核心和接口供电每路都用单独的LDO。LDO选择上优先PSRR高的型号因为耳机里经常有蓝牙射频功放、充电升压电路这些噪声源LDO的电源抑制能力直接决定最后的底噪水平。去耦电容不能省。每个电源引脚旁边至少放一个0.1uF的陶瓷电容电容要尽量靠近引脚放置走线先经过电容再到引脚。电源平面如果条件允许建议模拟和数字区域分开铺铜中间用磁珠或0欧电阻连接避免数字开关噪声通过电源平面串进模拟电路。注意如果板子上有PDM数字麦克风它的时钟线也会是重要的噪声源。PDM_CLK翻转速度快一定要远离模拟音频走线最好用地线包住。2.2 时钟和PLL是系统的命脉ADAU1787的ADC和DAC都需要精确的采样时钟而这个时钟可以由外部MCLK经过内部PLL产生也可以直接使用外部提供的音频主时钟。我一般推荐用内部PLL的方式因为很多蓝牙主控输出的MCLK质量参差不齐。PLL配置时要特别注意MCLK频率和采样率的比例关系。比如常见的MCLK是12.288MHz、24.576MHz这类频率对应48kHz采样率的整数倍关系。配置PLL分频系数时手册里有明确建议不要图省事随便填否则会出现采样率不对、声音变调、甚至芯片完全不输出的问题。MCLK的抖动对音频质量的影响也很容易被低估。如果用主控的普通GPIO翻出来的MCLK抖动会比专用时钟芯片大很多听感上的表现是底噪升高、声音发“毛”。实测下来MCLK的质量基本决定了整套系统声音干净程度的上限。2.3 模拟输入输出通路从麦克风到耳机芯片的模拟输入主要是给模拟驻极体麦克风或者线路输入用的。麦克风信号进来后可以先经过片内的可编程增益放大器调整到合适的幅度再进ADC。这里有个关键点ADC的输入动态范围是有限的信号太小浪费分辨率信号太大会削波失真增益设置需要根据麦克风灵敏度和实际声压级算一遍。我常用的一个调试点是在安静环境下把增益调到让ADC的电平表显示在-12dBFS到-6dBFS之间同时留出足够余量防止大声喊叫时削波。这个余量对于ANC耳机特别重要因为降噪麦克风贴在耳机外侧很容易收到风声这种大幅度信号。DAC输出到耳机或功放的路径上建议加上一个简单的RC低通滤波滤掉DAC输出的带外噪声。耳机负载的阻抗不同输出功率需求也不同如果芯片内置的耳机放大器驱动能力不够就需要外接Class-AB或Class-D功放。如果产品里用的是MEMS数字麦克风那更省事直接走PDM接口。一颗PDM_CLK可以同时作为多颗麦克风的参考时钟每颗麦克风通过数据引脚分时输出数据。ADAU1787支持多路PDM输入做麦克风阵列时很方便。2.4 Layout布局的实际经验ADAU1787这类混合信号芯片Layout布局比原理图更重要。我有几个长期验证过的原则单点接地模拟地、数字地、电源地不要在大范围内直接连通而是在芯片下方或者某个单点汇合。全板大面积铺铜虽然简单但数字返回电流会跑进模拟区域带来可闻的底噪。模拟走线短而粗麦克风输入信号非常微弱走线越长越容易被干扰尽量靠近芯片放置接口器件并用地线包住。I2S/PDM数字走线远离模拟走线这两类信号都是高速翻转的容性耦合就会造成串扰。晶振和MCLK走线远离模拟输入晶振的辐射干扰会让ADC出现明显的谐波噪声。这些看起来都是基本功但实际排查底噪问题时九成原因都出在这几个地方。3. 超低延迟是怎么做到的延迟预算拆解3.1 信号链上每一级都在花时间ANC降噪的一个核心矛盾是你必须在噪声到达耳朵之前播放出反相信号。从参考麦克风采集到噪声到扬声器发出反相声波中间经过的每一级都有延迟。延迟越短能有效降噪的频率范围就越宽。我们把信号链路拆开看延迟主要来自这几个部分延迟来源典型量级是否能优化ADC采样与调制数个采样周期硬件固定选型时决定ADC数字抽取滤波器十几个到几十个采样周期硬件固定可选低延迟模式DSP算法处理一个或更多采样周期取决于算法复杂度和代码效率DAC插值滤波器数个到几十个采样周期硬件固定可选低延迟模式DAC输出重建滤波器模拟电路群延迟PCB布局影响量级较小扬声器到耳朵的声学延迟空气传播时间取决于耳机机械结构这里最值得关注的是“采样周期”这个概念。在48kHz采样率下一个采样周期大约20.8微秒。ADC和DAC内部的数字滤波器群延迟如果按每个二三十个采样周期计算加起来就可能超过1毫秒。对于ANC来说超过1毫秒的延迟会导致高频降噪效果急剧恶化甚至在中高频段反而增加噪声。所以ADAU1787这类专为ANC设计的Codec会在内部提供可选的“低延迟滤波器模式”。启用这个模式后ADC和DAC的数字滤波会简化用稍微牺牲一点带外抑制性能的代价换取更低的群延迟。ANC产品里这个取舍非常划算因为降噪环路更关心相位一致性带外噪声后面还可以用模拟滤波处理。3.2 双DSP核并行让处理延迟不叠加假设前馈ANC需要一个FIR滤波器对参考信号建模反馈ANC需要另一个自适应滤波器处理误差信号再加上后处理EQ和压限如果这些都放在单核DSP里跑处理延迟是全部算法执行耗时之和。ADAU1787的双核架构可以把这些任务劈开。一个核跑主降噪环路另一个核跑辅助处理和音效两个核并行工作主环路的处理时间不会被其他任务拖长。这对于需要精确控制延迟的ANC算法来说价值非常大。实际开发中我在一个核上跑前馈反馈混合ANC另一个核上跑通话降噪和EQ整条链路的DSP处理延迟可以控制在几个采样周期以内。单核方案做同样的事情至少要翻倍。3.3 实测延迟和优化技巧手册上的典型延迟数据终归是参考实际板子上的延迟建议直接测量。做法很简单用信号发生器给板子输入一个脉冲信号在示波器上同时看输入和DAC输出测量两个脉冲之间的时间差就是整条链路的延迟。如果发现延迟偏大可以按优先级检查是否启用了低延迟滤波器模式很多情况下芯片默认配置是标准模式需要手动切换到低延迟模式。DSP内部的缓冲设置有些算法模块为了吞吐量会引入额外缓冲比如用块处理方式一次处理32个采样点就会固定引入额外延迟。改成每个采样点处理一次延迟立刻降下来。IIR还是FIR如果滤波器的相位要求允许IIR比FIR延迟低得多而且计算量小。ANC补偿滤波器里我一般优先考虑IIR。经验之谈ANC系统里没有免费的午餐。降低延迟通常会带来计算量上升或者滤波性能下降得在算法层面反复权衡。先做基线版本再逐步压延迟不要一开始就追求极端参数。4. ANC主动降噪从理论到能落地的程度4.1 前馈、反馈、混合到底怎么选ANC的基本原理是“以声消声”采集环境噪声处理后产生一个幅度相同、相位相反的反相信号通过扬声器播放出来与环境噪声在耳朵位置相消。具体架构有三类前馈式ANC用一颗参考麦克风放在耳机外侧采集外部环境噪声经过DSP处理后直接驱动扬声器。优点是麦克风能提前“听到”噪声理论上高频效果更好缺点是它不监测最终耳朵位置的残余噪声对佩戴差异和声学路径变化不敏感。反馈式ANC用一颗误差麦克风放在耳罩内侧贴近耳朵的位置采集的是降噪之后的残余噪声然后通过反馈回路不断修正反相信号。优点是不需要参考麦克风结构简单对佩戴变化有一定自适应能力缺点是反馈环路更容易不稳定而且它只能“事后补救”对高频噪声无能为力。混合式ANC把两者结合外侧参考麦克风负责主要降噪内侧误差麦克风负责修正残余误差。这是目前中高端耳机普遍采用的方案降噪深度和频宽都更好但算法复杂度和对稳定性的要求也最高。ADAU1787的双DSP核跑混合式ANC完全够用这也是它经常出现在旗舰耳机方案里的原因。4.2 用ADAU1787搭一条混合ANC信号链具体到ADAU1787上的实现信号链大概是这样的前馈路径放置在耳机外侧的参考麦克风信号进入ADCADC输出的数字信号进入DSP核A。核A运行一个补偿滤波器这个滤波器的作用是根据扬声器到耳朵的实际声学路径Plant路径修正参考信号使其在耳朵位置能与泄漏进来的环境噪声正好反相。处理后的信号叠加到主音频通路上一起送到DAC。反馈路径耳机内侧的误差麦克风同样进入ADC信号进入DSP核A的另一个输入。核A运行一个自适应滤波器根据误差麦克风采集到的残余噪声动态调整反馈补偿信号生成一个修正信号叠加到输出上。这里最关键的是自适应算法的收敛速度和稳定性。在DSP核B上可以放通话降噪、EQ、动态范围控制这些后处理模块。混音器要把来自路径A的降噪信号、来自路径B的音乐/语音信号以及可能的透明模式环境声直通信号按预设比例叠加最终送到DAC驱动扬声器。4.3 稳定性分析为什么你的ANC会啸叫ANC环路本质上是一个反馈控制系统。只要环路增益在某个频率点上幅值达到10dB同时相位滞后达到180度系统就会振荡表现就是“啸叫”或者“杂音”。分析稳定性时重点看两个东西增益裕度和相位裕度。简单说要让系统稳定在环路增益降到0dB的频率点附近相位滞后必须离180度有足够余量。提高稳定性的常用手段降低环路增益把降噪算法的整体增益调小降噪深度会下降但稳定性立刻改善。有个安全的口诀是从小增益开始逐步往上加直到出现啸叫再往回调6dB左右作为量产安全余量。减少环路延迟延迟越大相位滞后越厉害稳定裕度越小。这就是为什么ADAU1787的超低延迟特性在ANC里如此关键它在源头上给稳定性提供了更多“预算”。限制降噪带宽高频段的相位响应很难控制所以ANC通常只在几十Hz到一两kHz的频段做深度降噪更高频段靠耳机的物理隔音被动降噪。可以在算法里加低通或带通滤波器限制ANC的有效带宽。检查扬声器和麦克风的频响峰谷如果扬声器的频响在某处有个很大的谐振峰这个频率的环路相位很容易异常可以先用数字滤波器做均衡把峰压平再跑ANC。我在调试混合ANC时最常踩的坑就是内侧误差麦克风的相位接反了。先把反馈环路接成正反馈——啸叫得震天响。这时候别慌把DSP里的反馈信号极性翻转一下立刻安静下来。这算是ANC调试入门必修课。5. 开发流程从SigmaStudio到量产的路线图5.1 用SigmaStudio快速搭出原型ADI为音频DSP提供了一套图形化开发工具SigmaStudioADAU1787也支持。你不需要一开始就写C代码直接在SigmaStudio里拖拽音频模块连线、设参数、编译然后通过I2C把配置下载到芯片上几分钟就能跑出一条能出声的信号链。对于没有DSP开发经验的人来说SigmaStudio是极好的入门工具。它把滤波、混音、增益、动态处理这些常用模块封装成了现成的图形组件你只需要像拼积木一样搭建信号流语法层面的坑基本不存在。原型验证阶段我强烈建议先用它把ANC算法跑通确认硬件路径没问题再做后续优化。不过SigmaStudio也有它的局限。图形化界面管理复杂算法时不够灵活。自适应滤波器算法、多变量实时参数调整、复杂的命令交互这些在图形化环境里写起来很别扭。所以到了量产优化阶段我通常会把核心算法用C语言重写一遍。5.2 底层开发需要准备什么真正做底层开发需要准备这几样编译器和IDEADI的DSP开发工具链配合对应的编译器版本。USB仿真器/调试器通过JTAG或调试接口连接芯片在线仿真、设断点、看内存。这是排查疑难问题最直接的手段能实时看到DSP内部寄存器和内存的值比猜配置高效得多。数据手册和参考例程ADI官方的参考例程是宝贵的学习资料很多寄存器配置可以直接复用。逻辑分析仪调试I2S/TDM/PDM时序时常用。数字音频数据对不对波形上一眼就能看出来。底层开发的工作方式完全不同主控通过I2C/SPI往芯片写寄存器DSP的运行逻辑由片内程序控制。调试时最常做的事情是让DSP跑一个最简单的直通程序确认ADC到DAC的数据路径通了再把算法模块一个个加上去。5.3 低延迟算法模块的实现要点在ADAU1787上实现低延迟算法有几个关键点优先用IIR滤波器IIR的计算量比同等阶数的FIR小很多而且不存在FIR那种必须等满N个采样点才能输出的问题。对于ANC补偿滤波器这类对响应速度敏感的模块IIR几乎是唯一选择。逐采样点处理尽量避免一次处理一大块数据的“块处理”模式。块处理虽然能提高缓存命中率但会引入等于块长的额外延迟。ANC算法我全部用逐采样点的方式实现。定点数处理要防溢出DSP内部通常是定点运算不同模块的增益可能导致中间结果溢出。每级运算之间都要留够headroom或者使用饱和处理指令。溢出带来的非线性失真在ANC环路里可能直接诱发不稳定。定时器中断里只放最关键的代码音频处理通常在音频帧中断里执行中断服务函数里不要做耗时的日志打印、浮点运算这些操作会让DSP在下一帧数据到来时来不及处理造成丢帧和爆音。6. 调试实录与常见问题速查6.1 寄存器配置不生效先查这里现象通过I2C写寄存器读出来的值还是默认值芯片完全没有按预期工作。排查步骤确认I2C地址正确。很多芯片支持多个地址由引脚电平决定7位地址和8位地址的差异容易让人犯迷糊。确认I2C上拉电阻没问题。总线拉不起来写操作会静默失败。确认写寄存器之前芯片电源和时钟已经稳定。有些寄存器必须在时钟稳定后才能写入否则不生效。确认写入的寄存器地址在芯片支持的范围内。有些寄存器是只读的或者保留区域写进去不会有效果。我当时遇到过一个非常隐蔽的问题主控I2C速率设得太高芯片跟不上偶尔写入失败。把I2C时钟降到400kHz以下问题立刻消失。6.2 爆音、底噪和Pop声排查爆音和底噪可以说是音频产品调试里最磨人的问题。说几个高频原因上电顺序不对DAC在模拟电源还没稳定时就已经开始输出会产生“噗”的一声。解决方法是让主控在上电后先保持DAC静音等所有电源都稳定了再解除静音并缓慢提升音量。数字音量突变音量直接从-60dB跳到0dB会有明显的“咔哒”声。在代码里做音量渐变哪怕只有几十毫秒的ramp时间听感都会好很多。地环路如果开发板通过USB供电又外接音频分析仪地环路可能引入50Hz/100Hz的哼声。断开USB地线或者使用隔离供电底噪立刻会好很多。电源纹波低功耗模式下主控可能会频繁进入睡眠和唤醒电源纹波会变大被ADC拾取成背景噪声。这时候只能优化电源设计或者在算法里对特定频段做一些抑制。6.3 ANC环路不稳定的典型处理如果ANC开启后出现持续的啸叫或者不规律杂音按这个顺序排查先确认反馈麦克风的信号极性是否正确接反了必啸叫。降低环路增益看是否恢复稳定。如果降下来就稳定说明稳定裕度不够。检查相位响应重点看扬声器频响在降噪频段有没有异常峰谷。确认ANC信号的延迟是否过大试着启用低延迟滤波器模式。如果以上都没问题给ANC信号加一个带通限制只让它处理有效频段。6.4 常见问题速查表现象可能原因解决办法芯片完全不响应I2C供电/时钟/复位异常先查MCLK时钟频率和电源电压I2C通信偶发失败速率过高或总线电容过大降低I2C速率检查上拉电阻有输出但全是噪声PLL未锁定或MCLK频率不对读PLL锁定寄存器确认时钟配置输出有底噪电源去耦不足或Layout问题优化LDO和去耦电容检查接地开启ANC后啸叫反馈极性接反或增益过高翻转极性降低增益检查相位裕度声音断续或爆音DSP处理超时或中断优先级问题优化中断代码检查DSP负载率麦克风无信号增益配置为0或麦克风偏置未打开检查模拟输入增益和MICBIAS配置左右声道接反数据格式配置或TDM时隙问题核对I2S/TDM通道映射寄存器写在最后的一点体会ADAU1787BCBZRL这颗芯片规格书上的参数再漂亮也只是起点。我做过好几块板子之后最大的感受是真正决定ANC效果天花板的往往不是算法本身而是电源设计、Layout布局、扬声器声学结构和麦克风摆放这些“看得见摸得着”的硬件细节。软件算法做得再好硬件底子不行降噪深度上不去稳定性也保不住。如果你刚开始接触这颗芯片建议第一块板子尽量严格按datasheet的参考设计来先把基础信号链跑通再逐步替换和优化。ADC直通DAC出声正常再接麦克风ANC能稳定工作再调降噪的频响曲线。每走一步都有明确的验证手段问题才不会堆在一起无从下手。另外调试时把寄存器配置、测试条件、修改前后效果变化都记录下来养成这个习惯之后你会发现很多“玄学”问题其实都是可复现、可定位的工程问题。调音频这件事耐心和方法论往往比天赋重要。