PP_MGSCALE 参数详解
1. 核心功能
PP_MGSCALE 控制远端活动期间的额外噪声抑制,用于平衡:
- 远端静止活动期间:优化近端语音清晰度
- 远端非静止活动期间:确保良好的回声抑制
2. 解决的问题
问题场景
参考信号(far-end)是干净的播放音频
AEC 能准确判断:
什么时候是 远端(只有远端的人在讲话)
什么时候是 近端(只有近端的人在讲话)
什么时候是 双讲(远端和近端的人同时在讲话)
当参考信号中存在低电平噪声(如 ADC 噪声)时:
噪声被误检测为远端语音
系统误判为双讲(double-talk)(参考信号路径往往并不干净,比如DAC / ADC 本底噪声;功放 idle noise,数字音量太低但仍有量化噪声静音不是真静音(尤其 48kHz 系统)结果就是:参考通道里存在“低电平、平稳的噪声”AEC 可能会误判为 “远端在说话”进而认为发生 Double-Tal,于是过度压制近端语音)
过度抑制近端语音,导致失真(近端语音被过度压制,出现失真、抽吸、发虚)
PP_MGSCALE 的作用
通过设置增益缩放范围,在回声抑制与近端语音清晰度之间取得平衡。
PP_MGSCALE的参数:
| 值 | 名称 | 范围 | 说明 |
|---|---|---|---|
| value0 | max | [1.0 .. 1e5] | 最大增益缩放值(上限) |
| value1 | min | [0.0 .. max] | 最小增益缩放值(下限) |
| value2 | cur | min 或 max | 当前使用的值(只能是 min 或 max) |
通过上面的流程分析我们可以得到DSP内部进行了如下的操作:
| 场景 | PP_MGSCALE 行为 | 听感结果 |
|---|---|---|
| 只有远端说话 | 用 max,强烈衰减 | 回声最干净 |
| 远端 + 近端(双讲) | 用 min,收手一点 | 近端不容易被闷 |
| 参考里只有噪声 | 用 min,别乱压 | 避免近端抽吸 |
当只有远端在讲话、而且信号是正常语音时,系统会“下手更狠地压”,把所有像回声的东西都狠狠压下去,所以听起来回声被消得更干净。
能确定是回声 → 宁可错杀也不放过!!!
不能确定是不是回声 → 宁可放过也不误杀!!!
xvf_host --use i2c PP_MGSCALE默认值为1000 、1 和 cur:
3.调优步骤
步骤 1:设置基础参数
#### 回声抑制强度控制组
- **PP_GAMMA_E** (1.0) - 直接/早期回声
- **PP_GAMMA_ETAIL** (1.0) - 尾部分量回声
- **PP_GAMMA_ENL** (1.0) - 非线性回声
#### 功能开关组
- **PP_ECHOONOFF** (1) - 回声抑制总开关
- **PP_NLATTENONOFF** (0) - 非线性回声衰减开关
#### 噪声抑制隔离组
- **PP_MIN_NS** (1.0) - 静止噪声抑制下限
| 参数名 | 默认值 | 有效范围 | 通俗功能解释(一句话版) |
|---|---|---|---|
| PP_GAMMA_E | 1.0 | 0.0 ~ 2.0 | 线性回声下手的力度:对“直达声 + 早期反射”回声减得有多狠 |
| PP_GAMMA_ENL | 1.1 | 0.0 ~ 5.0 | 非线性回声的下手力度:专门对扬声器失真产生的谐波回声 |
| PP_GAMMA_ETAIL | 1.0 | 0.0 ~ 2.0 | 混响尾巴的抑制力度:主要处理房间反射、延迟回声 |
| PP_ECHOONOFF | 1 (on) | 0 / 1 | 回声抑制总开关:关了就完全没有后级回声抑制 |
| PP_NLATTENONOFF | 0 (off) | 0 / 1 | 非线性回声模型开关:是否启用训练好的扬声器失真模型 |
| PP_MIN_NS | 0.15 | 0.0 ~ 1.0 | 静态噪声的“最低保留音量”:防止把背景噪声压没到死寂 |
xvf_host --use i2c PP_GAMMA_E 1.0xvf_host --use i2c PP_GAMMA_ENL 1.0xvf_host --use i2c PP_GAMMA_ETAIL 1.0xvf_host --use i2c PP_ECHOONOFF 1xvf_host --use i2c PP_NLATTENONOFF 0xvf_host --use i2c PP_MIN_NS 1.0设置标准抑制和隔离干扰因素后,设置PP_MGSCALE 最大最小值全部为 1(xvf_host PP_MGSCALE <max> <min> <cur>)
xvf_host --use i2c PP_MGSCALE 1 1 1设置左输出为自动选择的波束(多路竞争的结果),右声道静音:
xvf_host --use i2c AUDIO_MGR_OP_L 6 3xvf_host --use i2c AUDIO_MGR_OP_R 0 0步骤 2:调优 max 值(回声抑制)
- 播放远端信号:循环播放 IEEE_269-2010_Male_mono_48_kHz.wav 作为参考输入。
- 提供近端噪声:播放低电平白噪声(从房间内第二个扬声器/音源)
- 观察输出:查看设备输出和频谱图
- 调整 max:逐步增加 max,直到残留回声不再改善
- 典型值范围:100 - 1000
为什么这么调试的原因:
是cur使用max值的时候只有在仅仅有远端信号的时候才会激活max!!!
此时max = 1时观察输出:
设置max为100的时候 播放远端音频的时候,可以看到cur = max 与我们推测的是一致的!
由于我们这边的测试环境底噪较大!!故无法展示变化时候的效果,实际与预测应该是一致的!
步骤 3:设置 min 值
将 min 设置为与 max 相同的值:
xvf_host PP_MGSCALE <max> <max> <max>
步骤 4:调优 min 值(近端语音清晰度)
- 播放静音到参考输入:48kHz:silence_2ch_48khz.wav
- 播放近端语音:播放 IEEE_269-2010_Male_mono_48_kHz.wav 作为近端信号
- 主观听测:如果存在近端语音失真(双讲或者仅有近端语音的时候使用的是min!)
- 原因:参考信号中的静止噪声被误判为远端语音,导致过度抑制
- 解决:降低 min 值,以牺牲部分静止噪声抑制为代价,减少近端语音失真(min越大抑制越厉害!)
6. 参数关系
| 参数 | 作用 | 与 PP_MGSCALE 的关系 |
|---|---|---|
| PP_GAMMA_E | 回声过减因子 | 共同控制回声抑制强度 |
| PP_ECHOONOFF | 回声抑制开关 | PP_MGSCALE 仅在开启时生效 |
| PP_DTSENSITIVE | 双讲敏感度 | 影响双讲检测,进而影响 PP_MGSCALE 的使用 |
| PP_MIN_NS | 静止噪声抑制增益下限 | 调优时设为 1.0 以隔离影响 |
7. 典型配置示例
配置 1:默认配置(保守)
PP_MGSCALE: (1000.0, 1.0)
max = 1000.0(强回声抑制能力)
min = 1.0(最小抑制,保护近端语音)
配置 2:强回声抑制
PP_MGSCALE: (1000.0, 100.0)
max = 1000.0
min = 100.0(允许更强抑制)
配置 3:平衡配置
PP_MGSCALE: (500.0, 10.0)
max = 500.0(中等回声抑制)
min = 10.0(中等保护)
8. 注意事项
- max 调优:在存在远端回声时进行,目标是减少残留回
- min 调优:在参考信号为静音时进行,目标是减少近端语音失真
- 典型 max 值:100 - 1000
- 如果参考信号质量好(无 ADC 噪声),min 可等于 max
- 如果参考信号有静止噪声,需要降低 min 以保护近端语音
9. 总结
PP_MGSCALE 是一个权衡参数:
- max:控制远端非静止活动时的回声抑制能力
- min:控制远端静止活动时对近端语音的保护程度
- 目标:在回声抑制与近端语音清晰度之间取得平衡
调优时,先调 max 以优化回声抑制,再调 min 以优化近端语音清晰度。