很多朋友第一次拿到KT106这颗双麦ANC主动降噪模块,第一反应都是翻规格书,看到输出接口那一页写着DAC和I2S两种方式,然后就卡住了——到底该接哪一路?接错了会不会不工作?选型的时候看哪几个点?其实这个问题没你想的那么复杂,但也确实不是拍脑袋能定的,因为DAC和I2S背后是两条完全不同的信号路径,对应的是不同的后级架构、不同的时钟关系、不同的调试方式。我拿这颗料做了几轮方案,踩过一些坑,把选型逻辑、场景匹配和集成流程捋清楚了,这篇就当是给你的一份参考笔记。适合正在做耳机、通话降噪设备、车载音频、智能硬件,并准备把主动降噪功能落到产品里的硬件工程师和嵌入式开发。
1. 拿到KT106先别急着连:双麦ANC方案在信号链路里的位置
1.1 双麦ANC到底是怎么工作的
要理解输出方式怎么选,得先把KT106这颗模块在系统里扮演什么角色说清楚。主动降噪(ANC,Active 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输出时,你实际关心的是这么几个参数:输出幅度、信噪比、THD+N、带外噪声。特别是带外噪声,这是很多工程师第一次测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(或16bit)=2.8224MHz,而MCLK可能是256fs=11.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,主控是controller,KT106是device,KT106的时钟完全跟随主控;如果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同时跑,电源质量直接影响底噪和降噪深度。模块数字电源和模拟电源引脚要分开滤波,模拟电源对地加10uF+0.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的带外噪声。比如取R=100欧姆,C=33nF,截止频率约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×2=2.304MHz。这个数对不上,后面查什么都是白查。
5.5 用示波器验证DAC前后波形变化
很多朋友关心“dac前后波形变化”是怎么回事,借此也说说验证方法。DAC “前”指KT106内部DSP处理后的数字信号,这个通过I2S输出或者内部采样口才能看到;“后”指DAC输出引脚上的模拟信号。降噪开启前后,你在DAC输出脚用示波器探头接到耳机负载两端,会看到两种情况:播放音乐时,音乐波形叠加在环境噪声上,环境噪声幅度明显被压低;只开降噪不放音乐时,喇叭输出端的残余噪声波形幅度会明显减小。测量时建议用FFT模式观察频谱,能看到低频段噪声底被压下去,降噪带宽和深度一目了然。
不要小看这一步,很多方案“听感还行”但“测出来不行”,就是因为没有用FFT量化验证。示波器的FFT功能虽然精度一般,但作为前期验证足够了。
6. 实测中的坑和排查经验
6.1 无声、偏音、爆音:先从时钟和电源查起
I2S模式下最可怕的故障是“完全无声,但寄存器都能读写”。我遇到过好几次,最后发现都是MCLK的问题——主控没输出MCLK,KT106的I2S数字滤波器不工作,数据送进去也不转换。判断方法很简单:示波器测MCLK引脚有没有时钟,没有就改配置或用主控的时钟输出功能补上。
爆音则大多来自电源跌落和上下电时序。ANC开启的瞬间DSP负载突增,如果模拟电源没有足够电容储备,输出电压跌落,DAC输出就会出现“啪”一声。解决办法是在模块电源引脚加大电容,并且在上电初始化完成前把ANC功能保持关闭状态,软件里做软启动。
6.2 ANC不生效或降噪浅:麦克风安装位置是最大变量
KT106本身做的是算法处理,但前馈麦克风装在哪里、进音孔开在哪里,对降噪效果影响极大。前馈麦要能“听”到外界噪声,但又不能直接被风吹到;反馈麦要贴近耳道、靠近扬声器,否则反馈信号相位不准,混合ANC反而可能在某几个频点形成正反馈。如果你发现ANC实测深度比规格书标称值差很多,先不用怀疑模块,看看麦克风位置、密封性、进音孔直径是不是被结构限制了。
我遇到过的一个案例:客户反馈1kHz以下降噪不达标,排查后发现问题出在前馈麦克风用了一个较长的密封硅胶套,导致高频段(准确说是2kHz以上)进气受阻、相位滞后,反馈算法在低频段补偿时把相位裕量吃掉了。换短导管后,低频降噪深度马上恢复。
6.3 时钟配置引起声音变调
声音变调几乎都是采样率不匹配造成的。I2S模式下,主控和KT106的采样率必须严格一致,差一个bit都不行。比如主控配置成44.1kHz,KT106配置成48kHz,听起来就是整段音频被“加速/升调”了。用逻辑分析仪抓LRCLK的频率,直接数一帧的时间就能换算:1/LRCLK频率=采样周期。低频信号听感上变粗、高频变尖,先查采样率配置和晶振精度。如果两边都有独立晶振,还要考虑频率偏差累积,长时间播放可能出现周期性卡顿。
6.4 几个实战注意点
最后说几个零散但实用的经验,都是常规文档里不太会强调的东西:
- 回读寄存器做校验。I2C写完关键配置后立刻回读,防止写入失败导致“配置看着对了实际没生效”。调试阶段这一步能帮你省下大量排查时间。
- 参考设计别乱改。KT106这类模块的参考设计是经过匹配的,麦克风输入偏置电阻、电容、滤波器的参数尽量不要凭感觉改。改完之后频响和相位都会变,ANC算法是按特定传递函数设计的。
- 模数地分割别太激进。DAC输出方案里,很多新手喜欢把模拟地和数字地彻底分开,然后用一个0欧电阻连接,结果没处理好回流路径,反而让噪声更大。模块下方要保证完整的参考地平面,分割位置待在模拟输出和滤波电路之后。
- 实测一定要带负载测。DAC输出空载测波形很好看不代表接了功放后还能保持,模拟功放的输入阻抗、偏置都会改变DAC的负载条件,有条件就带上实际功放和喇叭一起测。
我在实际项目里,第一版通常两种输出模式都会留测试点:DAC输出引脚预留0欧电阻,I2S数据线也预留跳线,前期调试时两种模式都能切换验证,等确定方案后再删冗余器件。这个方法推荐给你,尤其适合还没有完全确定后级方案的项目阶段。
以上是我把KT106双麦ANC模块的输出选择、应用场景和集成流程整体过了一遍之后的经验总结。无论你最终选DAC还是I2S,只要把后级架构、时钟关系、角色分工这三个核心点想清楚,选型就不会跑偏;集成的时候按电源、初始化、格式核对、波形验证这几步走下去,基本都能顺利跑通。后面如果你们在调试中碰到更具体的现象,欢迎带着电路图和寄存器配置来聊。