1. 背景:为什么需要 ATTNS(Attenuation of Noise during Silence 静默期间噪声衰减)?
在音频前端处理中,AGC (Automatic Gain Control) 的核心作用是"补齐"音量:当人说话声音小时,AGC 会自动提高增益(Gain)。
然而,AGC 存在一个致命的副作用:呼吸效应(Breathing Effect)。
-
现象:在没人说话的间隙(Non-speech periods),AGC 检测到输入信号极小,会盲目地将增益推到最高。
-
后果:环境中的底噪(如风扇声、空调声)被瞬间放大,听众会听到刺耳的"嘶嘶"声。

上方是输入信号(有语音和安静段),中间是增益曲线(安静时增益升高),下方是输出信号(安静段底噪被放大,出现呼吸效应)。
上图为宽动态范围 AGC 电路的波形响应,能看到增益在低电平信号时的快速调整,导致噪声泵升(pumping)。虽然是电路的AGC,但是同样在语音的应用也是一样的!能帮助我们更直观地理解为什么简单的 AGC 会在非语音段产生刺耳的底噪放大。
ATTNS (Attenuation of Noise during Silence 静默期间噪声衰减) 的出现,就是为了在 AGC 提高增益的同时,通过算法逻辑在静音期施加一个"反向力",压制被放大的噪声。在非语音期间(只有噪声,没有语音),额外降低AGC增益,减少输出噪声,提高安静时的用户体验;保持语音期间的正常增益,不影响语音质量。
2. ATTNS 核心参数定义

衰减因子 = PP_ATTNS_NOMINAL × (G_nominal / G_current)^PP_ATTNS_SLOPE

| 参数 | 全称/中文名称 | 默认值 | 有效范围 | 类型/索引/读写 | 功能概述 |
|---|---|---|---|---|---|
| PP_ATTNS_MODE | Attenuation during Non-Speech Mode / 非语音衰减模式 | 0 (off) | 0 (off), 1 (on) | int32 / 32 / READ_WRITE | 开关控制:0=不衰减,1=启用衰减 |
| PP_ATTNS_NOMINAL | Attenuation Nominal / 非语音衰减标称值 | 1.0 | [0.0 .. 1.0] | float / 33 / READ_WRITE | 标称增益时的衰减因子(1.0=无衰减,0.0=完全衰减) |
| PP_ATTNS_SLOPE | Attenuation Slope / 非语音衰减斜率 | 1.0 | [0.0 .. 5.0] | float / 34 / READ_WRITE | 控制衰减随 AGC 增益变化的指数斜率(0.0=固定衰减,1.0=线性恒定噪声) |
PP_ATTNS_MODE适用情况:(默认未开启 0)
需要降低安静时的背景噪声
希望保持输出噪声水平相对恒定
对安静环境有较高要求
非语音时,AGC增益会被额外衰减
衰减量由 PP_ATTNS_NOMINAL 和 PP_ATTNS_SLOPE 控制
输出噪声水平更稳定
PP_ATTNS_NOMINAL - 标称衰减量
功能:定义在标称语音水平时,非语音期间的额外衰减量
取值范围:[0.0 .. 1.0]
默认值:1.0(无衰减)
单位:衰减因子(1.0 = 无衰减,0.5 = 衰减到50%,0.0 = 完全衰减)
初始AGC增益(AGCGGAIN_INIT)
初始AGC增益(AGCGGAIN_INIT)是系统在初始化时或参考条件下的AGC增益值。
通常由系统设计时确定
可能基于典型输入功率和期望输出功率计算
例如:如果期望输出功率是0.0045,典型输入功率是0.00045,则初始增益约为10.0也可能是系统启动时的初始增益值,或某个参考条件下的固定值
作为衰减计算的参考基准
在初始增益时,衰减量 = PP_ATTNS_NOMINAL
当当前AGC增益偏离初始增益时,衰减量会根据斜率调整
关键特性:当 ATTNS_SLOPE = 1.0时,输出噪声水平与当前增益无关,只与初始增益相关。
PP_ATTNS_SLOPE = 1.0 时,衰减因子的设计让最终输出噪声功率跟当前 AGC 增益完全无关,只取决于两个固定值。
衰减因子 =
PP_ATTNS_NOMINAL × (G_nominal / G_current) ^ 1.0
PP_ATTNS_NOMINAL × (G_nominal / G_current)
最终增益: G_final =
G_current × 衰减因子 = G_current × PP_ATTNS_NOMINAL × (G_nominal / G_current)
PP_ATTNS_NOMINAL × G_nominal
系统会把最终的增益 强制压到一个恒定的值 ,也就是: G_final = PP_ATTNS_NOMINAL × G_nominal (一个固定常数,不随环境变化)。
PP_ATTNS_SLOPE - 衰减斜率
功能:控制衰减量随AGC增益变化的斜率
取值范围:[0.0 .. 5.0]
默认值:1.0
单位:指数(幂次)
| PP_ATTNS_SLOPE | 衰减特性 | 输出噪声水平 | 适用场景 |
|---|---|---|---|
| 0.0 | 固定衰减 | 随增益变化 | 简单场景 |
| 0.5 | 温和衰减 | 随增益变化 | 需要温和降噪 |
| 1.0 | 线性衰减 | 恒定 | 推荐,平衡 |
| 2.0 | 激进衰减 | 随增益变化 | 需要强降噪 |
| 5.0 | 极激进衰减 | 随增益变化 | 极端场景 |
3. 针对 Zoom/Teams 规范的调试指南
根据 Zoom Rooms 7.4.3 规范,测试重点在于测量"标称语音水平下的噪声"与"低语音水平下的噪声"的比率。
准备工作
在开始前,必须确保 AGC 基础参数 (PP_AGCGAIN, PP_AGCMAXGAIN) 已经调优完成。
第一阶段:调试 ATTNS_NOMINAL (基础抑制)
该步骤旨在设定一个在正常说话间隙时的基础底噪水平。
xvf_host --use i2c PP_AGCONOFF 1
xvf_host --use i2c PP_ATTNS_MODE 1
xvf_host --use i2c PP_ATTNS_NOMINAL 1.0
xvf_host --use i2c PP_ATTNS_SLOPE 0.0 # 先将斜率设为0
-
输入测试信号 :播放 ITU P.501 标准语音(如
FB_male_female_single-talk_seq.wav)。 -
调整逻辑:
-
监测句子结束 1 秒后 的 A 计权噪声(Average A-weighted noise)。
-
逐渐增加
ATTNS_NOMINAL的值(如从 1.0 增加到 2.0),直到该噪声水平符合规范要求的比率。
-
A计权噪声 就是"用人耳听起来有多吵"来衡量的噪声值,而不是机器测到的原始声压。它在语音处理和噪声控制中特别重要,因为它让测试结果更贴近真实听感------比如你调 ATTNS 时,就是想让句子结束后那1秒的残余噪声,在人耳听来足够安静(A计权值低到可接受范围)。
在 MATLAB 中 Audio Toolbox(推荐,精确):
Matlab
% 假设你的噪声段信号为 noise_signal, fs = 48000;
% 使用 weightingFilter (Audio Toolbox)
aWeight = weightingFilter('A-weighting', 'SampleRate', fs);
filtered_noise = aWeight(noise_signal);
% 计算平均 A计权声压级 (RMS to dB)
rms_value = rms(filtered_noise);
level_dBA = 20 * log10(rms_value / 2e-5); % 参考 20 μPa
disp(['平均 A计权噪声水平: ', num2str(level_dBA), ' dB(A)']);
第二阶段:调试 ATTNS_SLOPE (动态补偿)
该步骤解决 AGC 在极端高增益情况下的噪声失控问题。
xvf_host --use i2c PP_ATTNS_SLOPE 1.0
-
初始化环境 :保持上一步确定的
NOMINAL值。 -
输入测试信号:使用不同声压级(如 -20dB, -30dB)的弱语音信号。
-
调整逻辑:
-
当 AGC 为了补偿弱语音而快速提升增益时,观察噪声是否随之大幅上涨。
-
增加
ATTNS_SLOPE(> 1.0)可以提供更激进的动态抑制。
-
4. 总结与最佳实践
-
平衡点 :
ATTNS不是越大越好。如果参数过激,会导致语音的 Onset(起头音) 被误杀,出现吞字现象。 -
同步微调 :
NOMINAL和SLOPE相互关联。调大其中一个,可能需要微调另一个以保持平衡。 -
认证关键 :Zoom/Teams 认证非常看重 静音期的稳定性。ATTNS 的调试结果直接决定了信噪比(SNR)测试是否达标。
但是我们看到的是默认官方源码和固件是关闭 ATTNS 的,这是为了最大程度兼容主流认证规范(如 Teams/Zoom)、避免引入不必要的语音质量风险、保持自然听感,把"额外噪声压制"作为可调的高级选项,让开发者根据实际产品需求(如更强的静音期降噪)再开启和微调,而不是强制所有人用同一套激进设置。
- XVF3800 的默认调优参数主要是针对 Microsoft Teams V5 "Personal Space Speakerphone" 规范(以及 Zoom Rooms 等类似认证)优化的。
- 这些规范对噪声抑制有明确要求,但更严格的是 语音清晰度、PESQ/POLQA 分数、回声抑制 等指标。
- 如果默认开启 ATTNS(非语音额外衰减),在某些测试场景下可能会导致:
- 非语音段噪声压得太低,影响"噪声与语音比率"(noise-to-speech ratio)的平衡。
- 某些认证测试(如低电平语音下的噪声测量)出现异常,因为规范往往指定"nominal speech level vs low speech level 的噪声比率",而 ATTNS 会干扰这个比率的自然表现。