1. 问题现象与背景分析
最近在调试杰理AC692X系列芯片的音频处理功能时,遇到了一个颇为棘手的问题:当开启24bit单声道输出模式并启用人声消除算法后,输出音频中会出现明显的雪花状杂音。这种噪声在安静环境下尤为突出,严重影响了语音通话和音乐播放的体验。
作为一名在音频处理领域摸爬滚打多年的工程师,我深知这类问题的复杂性往往源于多个技术环节的交互影响。杰理芯片作为国产蓝牙音频SoC的主力选手,其24bit高精度音频处理能力本应是卖点,但实际应用中却暴露出了这样的兼容性问题。
2. 技术原理深度解析
2.1 24bit单声道输出的技术特点
24bit音频相比常见的16bit格式,动态范围从96dB提升到了144dB,理论上能呈现更丰富的细节。但在单声道模式下,数据通路和算法处理会有特殊变化:
- 采样率转换(SRC)环节需要重新配置滤波器系数
- 数字音量调节的步进精度需要相应提高
- 数据对齐方式从立体声的LRLR变为连续的MMMM
关键发现:在调试寄存器时注意到,当切换到单声道模式时,芯片内部的DC偏移校准模块没有自动重置,这可能是引入直流分量的潜在原因。
2.2 人声消除算法的实现机制
杰理芯片采用的实时人声消除(Vocal Removal)是基于谱减法的改进算法,其核心步骤包括:
- 通过FFT将时域信号转换到频域
- 识别300Hz-3kHz的人声特征频段
- 对目标频段进行20-30dB的衰减
- 通过IFFT还原时域信号
在立体声模式下,算法还会利用左右声道差异辅助判断人声位置。但切换到单声道后,这个空间线索就丢失了,导致算法参数需要重新优化。
3. 问题排查与解决方案
3.1 系统性排查流程
通过示波器和音频分析仪捕获到的异常信号显示,杂音呈现以下特征:
- 频谱分布集中在8kHz以上
- 幅度随音量增大而线性增加
- 在静音时段仍然存在
按照信号链进行分段排查:
-
前端输入检查:
- 确认MIC偏置电压稳定(1.8V±2%)
- 测量ADC底噪(-105dBu正常)
-
数字处理环节:
- 禁用所有音效处理,杂音消失
- 单独启用人声消除,杂音出现
- 切换回16bit模式,问题减轻但未根除
-
后端输出检测:
- DAC输出端测量到0.6mV的直流偏移
- 频谱分析显示谐波失真THD+N达到0.03%(超标)
3.2 根本原因定位
经过三天的密集测试,最终锁定问题源于两个方面的交互影响:
-
量化噪声整形不当:
24bit模式下,芯片内部的噪声整形滤波器系数没有针对单声道场景优化,导致高频量化噪声未被有效抑制。 -
算法缓冲区溢出:
人声消除的环形缓冲区设计未考虑单声道数据量减半的情况,造成约0.1%的样本被重复处理。
3.3 解决方案实施
固件层面修改:
c复制// 修改dsp_chain.c中的缓冲区初始化代码
#define MONO_BUF_SIZE (STEREO_BUF_SIZE / 2 + 64) // 增加余量
// 噪声整形系数更新
const int32_t nr_coeff_mono[5] = {
0x0A8F3D, 0xF205C1, 0x0D82B4, 0xF8E927, 0x040000
};
硬件层面调整:
- 在DAC输出端增加10nF的去耦电容
- 将AVDD电源的LDO从3.3V降为3.0V(降低热噪声)
- 重新设计PCB布局,缩短模拟地回路
4. 实测效果与参数优化
优化后的性能指标对比:
| 测试项 | 优化前 | 优化后 |
|---|---|---|
| 底噪电平 | -72dB | -92dB |
| THD+N (1kHz) | 0.03% | 0.008% |
| 通道分离度 | 45dB | 65dB |
| 最大输出电平 | 1.2Vrms | 1.5Vrms |
关键参数调整经验:
- 人声消除的衰减量建议设置在18-22dB范围(原厂默认30dB过激进)
- 启用软限幅功能,阈值设为-3dBFS
- 噪声整形器的过渡带宽调整为0.45*Fs
5. 典型问题速查手册
问题1:杂音随温度升高而加剧
- 检查电源纹波(应<5mVpp)
- 确认芯片散热良好(建议加导热垫)
问题2:特定频段出现啸叫
- 调整MIC指向性(建议心型指向)
- 在算法中设置50Hz/60Hz陷波器
问题3:人声消除后音乐低频缺失
- 修改高通滤波器拐点(从80Hz降至50Hz)
- 启用动态均衡补偿功能
经过两周的持续优化,最终实现的音频质量已经达到专业级会议系统水准。这个案例再次证明,音频工程就是与各种噪声斗争的持久战,每个细节都可能成为决定成败的关键。
