ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

KT106双麦ANC模块:DAC与I2S输出选型指南

KT106双麦ANC模块:DAC与I2S输出选型指南 很多朋友第一次拿到KT106这颗双麦ANC主动降噪模块第一反应都是翻规格书看到输出接口那一页写着DAC和I2S两种方式然后就卡住了——到底该接哪一路接错了会不会不工作选型的时候看哪几个点其实这个问题没你想的那么复杂但也确实不是拍脑袋能定的因为DAC和I2S背后是两条完全不同的信号路径对应的是不同的后级架构、不同的时钟关系、不同的调试方式。我拿这颗料做了几轮方案踩过一些坑把选型逻辑、场景匹配和集成流程捋清楚了这篇就当是给你的一份参考笔记。适合正在做耳机、通话降噪设备、车载音频、智能硬件并准备把主动降噪功能落到产品里的硬件工程师和嵌入式开发。1. 拿到KT106先别急着连双麦ANC方案在信号链路里的位置1.1 双麦ANC到底是怎么工作的要理解输出方式怎么选得先把KT106这颗模块在系统里扮演什么角色说清楚。主动降噪ANCActive Noise Cancellation的核心思路很简单用麦克风把环境噪声采进来由DSP生成一个反相信号叠加到扬声器上让噪声和反相信号在物理上相互抵消。KT106这种双麦方案比较常见的形态是一个前馈麦克风Feedforward Mic加一个反馈麦克风Feedback Mic。前馈麦放在耳机外侧负责提前采集外界噪声反馈麦放在耳道内侧负责采样耳腔内残余的噪声。DSP把两路信号同时拿来做自适应滤波和相位补偿降噪带宽和深度都比单麦方案更理想。这套链路里内部信号走向基本是这样的两路麦克风信号先经过模拟前端和ADC转换成数字信号进入DSP核心做ANC算法处理处理完之后再走内部DAC变成模拟信号或者通过I2S接口把数字音频流交给外部器件。所以KT106提供的DAC/I2S两种输出本质上就是告诉你降噪处理完的信号可以从哪个“门”出去。1.2 KT106和纯模拟ANC方案的本质区别很多做过模拟电路ANC降噪的工程师第一次看数字ANC方案时会有个错觉觉得数字ANC就是把模拟运放换成了DSP。这么理解没错但对选型参考不够。模拟ANC靠运算放大器做反相加法信号从麦克风进来、经过放大和反相、直接叠加到音频输出上整个环路是连续时间的优势是延迟极低、功耗也低缺点是对电阻电容精度敏感参数焊上去就基本固定了想调降噪深度和频段得改硬件。数字ANC的路径则是“ADC采集 - DSP算 - DAC输出”KT106这种模块把ADC/DAC部分都集成进去了。好处很清楚算法可以反复调前馈反馈的权重、降噪深度、带宽都可以通过寄存器或SDK参数下发而且可以对噪声频段做更精细的整形比如只压风噪、只压发动机低频轰鸣。但代价就是整个环路里多了ADC和DAC的转换时延所以对DSP的处理能力和算法延迟有严格要求这也是为什么集成度更高但很多低端方案做出来“降噪有但耳压感明显”的原因之一。1.3 为什么一颗模块要给出DAC和I2S两种输出厂家为什么不在KT106上只留一种输出因为下游产品形态差异太大了。举两个极端例子一个简单的降噪耳机后面就是一颗模拟功放推喇叭那最合理的方式就是模块内部DAC直接出模拟信号保证系统简单、BOM少另一个是带蓝牙主控的耳机蓝牙SoC自己就有I2S接口降噪后的数字信号直接通过I2S传给主控由主控统一做EQ、通话上行和媒体播放的音频管理这时候如果硬用DAC输出多了一次模拟转换不说主控那侧还得再ADC采样回来信号质量白白损失。所以这两种输出不是“哪个更好”而是“哪个更适合你现有的系统架构”。这个前提不搞清楚后面积累的经验很可能都用错地方。2. DAC输出和I2S输出走的是两条完全不同的信号路径2.1 DAC输出的核心是“让模拟后级直接能用”KT106的DAC输出就是模块把降噪处理后的数字信号直接通过内部数模转换器转成模拟信号从DAC引脚输出。这个信号可以直接接耳机、接模拟功放、接录音设备前提是后级都是模拟输入接口。用DAC输出时你实际关心的是这么几个参数输出幅度、信噪比、THDN、带外噪声。特别是带外噪声这是很多工程师第一次测DAC输出时会忽略的东西。Delta-Sigma架构的DAC在音频频段之外比如几十kHz到几MHz区域会有比较明显的量化噪声和超声分量这些成分人耳听不见但如果后级功放的带宽很宽就会把超声噪声放大甚至引起D类功放的误触发导致待机电流异常或者“滋滋”声。所以DAC输出后面加一级低通滤波几乎是必须的RC也好、有源滤波也好得把带外噪声压下去。2.2 I2S输出的核心是“把数字信号交给别人”I2S输出则完全不同。KT106的I2S接口输出的不是模拟电压而是数字脉冲序列里面承载的是降噪处理完成后的PCM音频数据。你拿示波器去量量到的是BCLK、LRCLK、DIN/DOUT这些时钟和数据信号看不到模拟波形。这颗模块在I2S链路里可以扮演不同角色作为I2S device接收外部主控的时钟并输出/接收数据也可以作为controller自己产生位时钟和帧时钟。I2S协议本身不复杂三条核心信号线BCLK位时钟也叫SCK、LRCLK左右声道选择也叫WS、DIN/DOUT数据线。有的系统还会多一根MCLK主时钟。和模拟信号不同I2S传输不关心电平的“形状”只关心电平翻转的时序和数据的位序所以调试手段和DAC输出完全不一样用逻辑分析仪比示波器好使。2.3 关于MCLK和SCK不是同一个接口但经常被人混淆搜索热词里大家都在问“I2S接口的MCLK和SCK是同一个接口吗”这个必须单独说清楚不是。SCK在I2S语境里指位时钟BCLK它决定一个音频采样点里每一位数据的节奏MCLK是主时钟它比BCLK频率高得多通常是采样率的整数倍比如256fs、512fs用来给DAC/ADC内部delta-sigma调制器和数字滤波器提供基准时钟。两者频率关系大概像这样采样率44.1kHz时SCK 44.1kHz × 2双声道× 32bit或16bit2.8224MHz而MCLK可能是256fs11.2896MHz甚至更高。所以它们不是同一个信号频率不在一个量级作用也不一样。实际操作里最典型的坑是某些主控的I2S外设内部能从BCLK恢复出MCLK于是设计时没接MCLK但KT106如果配置成需要外部MCLK才能工作那I2S数据流看起来始终在跑喇叭就是不出声而且无声得非常“干净”。反过来如果MCLK和SCK的频比配置不对声音会变调、变慢或者变快听起来像磁带机转速不对。2.4 I2S Device、Controller到底指什么搜索词里还有“i2s device是什么意思”这个在I2S配置里是绕不开的。I2S总线上有角色区分产生BCLK和LRCLK的一方叫controller也常叫master/主机另一方就是device也常叫slave/从机。以KT106接蓝牙主控为例如果主控给KT106送BCLK和LRCLK主控是controllerKT106是deviceKT106的时钟完全跟随主控如果KT106自己产生所有时钟其他设备配合它那KT106就是controller。这个角色怎么定直接决定你代码里怎么配置时钟源。很多人初始化I2S时只设置了采样率和位深忘了配置主从模式结果两边各等各的时钟数据根本对不上。KT106在不同模式下时钟输入输出引脚方向都不一样硬件连接前必须确认。3. 输出方式到底怎么选四个决策维度就够了3.1 看你的后级方案是模拟输入还是数字输入这是最优先的判断依据。你下一级接的是什么芯片、什么接口基本就决定了输出方式。如果后级是一颗普通模拟功放比如常规的AB类、早期D类功放没有数字接口那答案很明显用DAC输出。如果后级是带I2S输入的codec、蓝牙SoC、USB音频控制器、或者音频DSP那用I2S输出能减少不必要的模拟转数字、数字转模拟来回折腾。我见过一个项目硬件工程师觉得I2S“高级”非要把模块接到一颗本身带模拟输入的蓝牙主控上结果绕了一圈KT106 I2S - 主控I2S - 主控内部DAC - 模拟输出。链路里多了一次DAC转换引入额外噪声和功耗BOM反而更复杂了。这属于典型的为了用接口而用接口。3.2 看主控能不能当I2S的Controller时钟归谁管如果你的系统里已经有一颗主控而且这颗主控的I2S外设支持controller模式那KT106走I2S设备模式就很顺手主控统一管理音频时钟KT106只是“数字音频协处理器”。这种情况尤其适合蓝牙耳机方案蓝牙芯片本身就需要锁定音频采样率。反过来如果主控比较弱没有I2S controller能力或者系统里压根没有主控那DAC模式就省事很多——模块自己内部处理完所有音频流程外部不需要额外提供时钟直接出模拟信号。选I2S模式就还得另外找一颗能产生MCLK的晶振或时钟芯片成本和复杂度都上去了。3.3 看音质和音效处理要在哪一级完成很多时候降噪并不是你整个音频链路的终点。比如通话耳机里降噪后的麦克风信号还要做回声消除TWS耳机里降噪后的音频还要和后端音乐信号做混音、EQ、动态范围压缩。如果这些处理在你的外部主控/DSP里做那KT106的I2S输出是必须的——你得把降噪后的数字流交给它处理而不是在模块内部DAC转成模拟再让主控ADC重采样一遍。如果产品不需要额外音频处理KT106处理完直接出模拟信号给功放就够那模块自带的DAC就能满足要求关键是外部模拟功放的噪声水平不能拖后腿。3.4 看板级布局和物料成本约束最后看硬件工程师最关心的BOM和布局。DAC输出的模拟信号走线比较容易受干扰模拟输出引脚旁边要放低通滤波电容、隔直电容模拟地要和数字地做好分割对layout要求相对高一些I2S输出的数字信号走线则要注意时序等长、阻抗控制、电平匹配如果I2S的IO电平和主控不一致还需要电平转换电路。物料成本上DAC模式通常少一颗外部DAC/codec但往往需要多几颗模拟滤波电容电感I2S模式本身省了模拟滤波元件但主控必须支持I2S并且有时要加MCLK晶振。两条路不是简单谁比谁便宜得放到整个系统里算。我整理了一个快速判断表可以对照着选判断问题倾向DAC输出倾向I2S输出下一级器件是什么模拟功放、模拟输入接口蓝牙SoC、数字codec、音频DSP主控音频能力无I2S或不希望主控参与主控有I2S且愿做controller降噪后还需处理不需要模块输出即最终信号需要EQ/AEC/混音等处理布局与成本想省代码c能搞定模拟滤波走线清晰能处理时钟和电平匹配4. 典型应用场景逐个拆从耳机到车载该走哪条路4.1 蓝牙耳机/TWS与头戴降噪耳机这类场景里KT106最常见的接法是I2S输出给蓝牙主控。原因在于蓝牙耳机不是两端独立的系统拾音降噪、通话上行、音乐播放、混音、EQ、音量控制这些功能全部耦合在蓝牙SoC里。降噪麦克风的信号如果只在模块内部走DAC输出那它只能驱动一个本地功放做不了蓝牙上行。只有通过I2S把降噪后的数字信号交还给蓝牙主控主控才能把环境噪声已经压掉的麦克风信号编码后发送给对端。反过来如果只想做一个不带蓝牙功能的独立降噪耳机模块用DAC输出直接接功放就非常清爽。这里要特别提醒做TWS的朋友用I2S输出时注意KT106作为I2S device时和蓝牙主控的采样率、位深、MCLK频比要对齐。蓝牙通话链路一般是16kHz或8kHz采样、16bit音乐链路是44.1kHz/48kHz如果ANC算法在模块内以48kHz处理但I2S输出配置成16kHz模块有没有自动重采样能力就很关键没有的话声音会明显变调。4.2 会议通话降噪设备和网络麦克风近两年远程办公带火了一整类会议降噪产品桌面会议麦、摄像头内置麦克风阵列、USB通话棒。这类设备里通常有一颗USB音频芯片或者带USB音频功能的MCU做主控麦克风采集到的语音经过降噪处理后必须交给USB音频芯片编码成UAC音频流上传给电脑。此时KT106用I2S输出到USB codec是标准做法。降噪信号在数字域直接衔接USB芯片可以进一步做AGC、回声消除最后再通过内部DAC送到耳机/喇叭监听。如果选DAC输出信号到USB codec之前还得ADC转换一次不光音质打折扣整个设备里数字地和模拟地来回串底噪容易做不平。这类产品的主控往往对音频路径有强控制需求所以数字链路优先。4.3 车载后装与改装音频车载场景比较特殊因为市面上的车机千差万别。老车改装、后装中控这类如果车机没有预留数字音频接口外部功放也是模拟输入那KT106老老实实用DAC输出就行直接把降噪后的模拟信号送到车机AUX输入或者功放前端方案最稳。车规环境电磁干扰严重模拟走线做好屏蔽和滤波比硬上I2S靠谱。如果是配合新平台车机、或者车规级DSP功放车机本身带I2S输入那用I2S输出更合适降噪后的信号和车机内部多媒体音频混音再统一DAC到整车音响。车载路噪主动降噪是近年热门KT106做发动机噪声和胎噪补偿的场景越来越常见这种场景I2S能保留更高的信噪比余量。4.4 智能家居、嵌入式主板与便携录播设备树莓派、嵌入式开发板、智能音箱主控这类Linux/Android系统音频通路普遍是I2S接口。如果你想把KT106的降噪能力加进一个智能音箱或嵌入式拾音系统I2S输出可以直接挂到主板的I2S总线上用软件标准ALSA驱动就能采集降噪后的音频开发效率高很多不需要额外模拟采集卡。便携录播设备比如小型录音机、领夹麦接收器则要看后端如果直接接耳机监听DAC输出更简单如果还要做数字录音必须用I2S输出给编解码器或SDK录音模块。需要特别留意的是嵌入式Linux板子上的I2S主从配置往往被驱动写死KT106这边要主动配合板子的controller角色两边角色冲突时极难排查。5. 快速集成参考从原理图连接到配置流程5.1 电源与复位ANC模块的第一步集成KT106首先把电源设计搞定。双麦ANC工作时内部ADC、DSP、DAC同时跑电源质量直接影响底噪和降噪深度。模块数字电源和模拟电源引脚要分开滤波模拟电源对地加10uF0.1uF并联电容数字电源也建议加磁珠或小阻值电阻隔离。注意上电时序模块的复位脚至少保持低电平若干毫秒等电源稳定后再拉高否则内部DSP容易起振异常I2C读不到ID。这块板子如果是我设计会把模拟地和数字地在模块下方单点汇合不要走成长环路否则实测降噪深度可能比规格书低很多而且找不出原因。5.2 I2C控制链路模式选择与ANC参数下发KT106的控制接口一般是I2C无论输出选DAC还是I2S都需要在初始化阶段通过I2C/寄存器配置告诉模块工作方式。基本流程如下上电等待复位完成I2C总线扫描读取器件ID确认模块通讯正常写入工作模式寄存器选择DAC输出还是I2S输出配置音频格式参数采样率、位深、I2S格式标准I2S/左对齐/右对齐、MCLK频比下发ANC滤波器系数、降噪深度、噪声类型匹配等算法参数保存配置到非易失存储如果支持或者每次上电重新下发。写一个简要示例伪代码具体寄存器地址参考厂家数据手册void kt106_init(uint8_t output_mode) { kt106_i2c_write(REG_DEVICE_ID, 0x00); // 复位 delay_ms(10); uint8_t id kt106_i2c_read(REG_DEVICE_ID); if (id ! KT106_EXPECTED_ID) { log_error(KT106 not found); return; } // 0x00 DAC output, 0x01 I2S output kt106_i2c_write(REG_OUTPUT_MODE, output_mode); if (output_mode OUTPUT_I2S) { // 格式、位宽、主从、MCLK比例 kt106_i2c_write(REG_I2S_FORMAT, I2S_STD_32BIT); kt106_i2c_write(REG_I2S_ROLE, I2S_DEVICE); kt106_i2c_write(REG_MCLK_RATIO, MCLK_256FS); } // 下发ANC参数 kt106_i2c_write(REG_ANC_ENABLE, 0x01); kt106_i2c_write(REG_ANC_FEEDFORWARD_GAIN, 0xA5); kt106_i2c_write(REG_ANC_FEEDBACK_GAIN, 0x7C); kt106_i2c_write(REG_ANC_CUTOFF, 0x05); }这只是流程示意我强烈建议拿到模块后先用官方SDK里的demo跑通默认配置再做裁剪不要从零造轮子。5.3 DAC模式外接电路低通滤波和功放衔接DAC输出到模拟功放之间一般建议串一级RC低通截止频率放在40~60kHz左右用来滤掉delta-sigma的带外噪声。比如取R100欧姆C33nF截止频率约48kHz对20kHz以内音频信号基本无损。输出需要隔直电容防止DAC输出的直流偏置进入后级功放容值根据后级输入阻抗选择常见2.2uF~10uF。调试的时候用示波器看DAC输出应该能看到干净的模拟音频波形如果看到高频毛刺叠加在波形上多半是带外噪声没有滤干净或者电源退耦没做好。5.4 I2S模式对接重点检查格式、位宽、主从I2S模式对接时先和主控侧核对几个参数容易出问题的都在这里格式标准I2S、左对齐、右对齐两边必须一致位宽16bit、24bit、32bit数据不足位宽时要确认靠左还是靠右对齐主从KT106做device还是controller由硬件连接决定配置成从机时一定要确保外部时钟已经到位MCLK如果配置成需要外部MCLK记得检查主控有没有输出、频率对不对。我调试时习惯先用逻辑分析仪抓BCLK和LRCLK波形确认时钟频率等于预期采样率乘以位深乘声道数。比如48kHz、24bit、双声道BCLK应该是48k×24×22.304MHz。这个数对不上后面查什么都是白查。5.5 用示波器验证DAC前后波形变化很多朋友关心“dac前后波形变化”是怎么回事借此也说说验证方法。DAC “前”指KT106内部DSP处理后的数字信号这个通过I2S输出或者内部采样口才能看到“后”指DAC输出引脚上的模拟信号。降噪开启前后你在DAC输出脚用示波器探头接到耳机负载两端会看到两种情况播放音乐时音乐波形叠加在环境噪声上环境噪声幅度明显被压低只开降噪不放音乐时喇叭输出端的残余噪声波形幅度会明显减小。测量时建议用FFT模式观察频谱能看到低频段噪声底被压下去降噪带宽和深度一目了然。不要小看这一步很多方案“听感还行”但“测出来不行”就是因为没有用FFT量化验证。示波器的FFT功能虽然精度一般但作为前期验证足够了。6. 实测中的坑和排查经验6.1 无声、偏音、爆音先从时钟和电源查起I2S模式下最可怕的故障是“完全无声但寄存器都能读写”。我遇到过好几次最后发现都是MCLK的问题——主控没输出MCLKKT106的I2S数字滤波器不工作数据送进去也不转换。判断方法很简单示波器测MCLK引脚有没有时钟没有就改配置或用主控的时钟输出功能补上。爆音则大多来自电源跌落和上下电时序。ANC开启的瞬间DSP负载突增如果模拟电源没有足够电容储备输出电压跌落DAC输出就会出现“啪”一声。解决办法是在模块电源引脚加大电容并且在上电初始化完成前把ANC功能保持关闭状态软件里做软启动。6.2 ANC不生效或降噪浅麦克风安装位置是最大变量KT106本身做的是算法处理但前馈麦克风装在哪里、进音孔开在哪里对降噪效果影响极大。前馈麦要能“听”到外界噪声但又不能直接被风吹到反馈麦要贴近耳道、靠近扬声器否则反馈信号相位不准混合ANC反而可能在某几个频点形成正反馈。如果你发现ANC实测深度比规格书标称值差很多先不用怀疑模块看看麦克风位置、密封性、进音孔直径是不是被结构限制了。我遇到过的一个案例客户反馈1kHz以下降噪不达标排查后发现问题出在前馈麦克风用了一个较长的密封硅胶套导致高频段准确说是2kHz以上进气受阻、相位滞后反馈算法在低频段补偿时把相位裕量吃掉了。换短导管后低频降噪深度马上恢复。6.3 时钟配置引起声音变调声音变调几乎都是采样率不匹配造成的。I2S模式下主控和KT106的采样率必须严格一致差一个bit都不行。比如主控配置成44.1kHzKT106配置成48kHz听起来就是整段音频被“加速/升调”了。用逻辑分析仪抓LRCLK的频率直接数一帧的时间就能换算1/LRCLK频率采样周期。低频信号听感上变粗、高频变尖先查采样率配置和晶振精度。如果两边都有独立晶振还要考虑频率偏差累积长时间播放可能出现周期性卡顿。6.4 几个实战注意点最后说几个零散但实用的经验都是常规文档里不太会强调的东西回读寄存器做校验。I2C写完关键配置后立刻回读防止写入失败导致“配置看着对了实际没生效”。调试阶段这一步能帮你省下大量排查时间。参考设计别乱改。KT106这类模块的参考设计是经过匹配的麦克风输入偏置电阻、电容、滤波器的参数尽量不要凭感觉改。改完之后频响和相位都会变ANC算法是按特定传递函数设计的。模数地分割别太激进。DAC输出方案里很多新手喜欢把模拟地和数字地彻底分开然后用一个0欧电阻连接结果没处理好回流路径反而让噪声更大。模块下方要保证完整的参考地平面分割位置待在模拟输出和滤波电路之后。实测一定要带负载测。DAC输出空载测波形很好看不代表接了功放后还能保持模拟功放的输入阻抗、偏置都会改变DAC的负载条件有条件就带上实际功放和喇叭一起测。我在实际项目里第一版通常两种输出模式都会留测试点DAC输出引脚预留0欧电阻I2S数据线也预留跳线前期调试时两种模式都能切换验证等确定方案后再删冗余器件。这个方法推荐给你尤其适合还没有完全确定后级方案的项目阶段。以上是我把KT106双麦ANC模块的输出选择、应用场景和集成流程整体过了一遍之后的经验总结。无论你最终选DAC还是I2S只要把后级架构、时钟关系、角色分工这三个核心点想清楚选型就不会跑偏集成的时候按电源、初始化、格式核对、波形验证这几步走下去基本都能顺利跑通。后面如果你们在调试中碰到更具体的现象欢迎带着电路图和寄存器配置来聊。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进