一起调试XVF3800麦克风阵列(八)
摘要:通过预加重技术优化AEC性能,重点分析了高频补偿对回声消除收敛速度的影响。研究指出语音信号低频能量显著高于高频,导致AEC高频收敛较慢。提出了两种补偿模式:模式1仅处理麦克风信号,模式2同时补偿参考信号。实验表明,当参考信号高频不足时,开启预加重(参数1)能有效提升AEC性能。建议在常规环境中默认开启参数1,但需注意测试环境对残差分析的影响。该技术通过平衡频谱能量分布,显著改善了AEC在高频
Emphasis(频率增加权重)
通过补偿参考信号的频谱特性,可以 优化自动能量消除(AEC)的收敛速度 。如果信号具有显著的低频能量,而高频能量相对较小,这将影响AEC在高频段的收敛速度,进而影响整体收敛速度。
为什么需要预加重/去加重 语音信号特性?
高频能量通常较弱,传输中易衰减
AEC 性能:高频分量对回声消除很重要
预加重:提升高频,改善 AEC 收敛和性能
去加重:处理后再降低高频,恢复原始频率响应。

-
语音本身:低频能量 >> 高频能量(高频信号通过空气衰减快!)
-
NLMS / 频域自适应滤波:
-
权值更新与信号能量成正比
-
-
结果:
-
低频先学会
-
高频“吃不饱”,更新慢!!!
-
Emphasis = 人为把高频“喂胖”一点,AEC_AECEMPHASISONOFF,参数如下:
| 值 | 算法含义 |
|---|---|
| 0 off | AEC 直接在原始频谱上自适应 |
| 1 on | 只改变近端(mic)信号的频谱权重 工程中默认值开启这个参数 |
| 2 on_eq | 同时改变近端与远端参考的频谱权重,使两者“匹配” |
整个过程如下:

其中:
模式 1(on):仅处理麦克风信号
模式 2(on_eq):麦克风 + 远端参考同时补偿
设置我们的输出为标号5路径0的音频,即录制左声道为我们输入到AEC前端的参考信号:
xvf_host --use i2c AUDIO_MGR_OP_L 5 0
xvf_host --use i2c AUDIO_MGR_OP_R 0 0
这里我们要展开说明一下,为什么我们在测试的时候是 参考信号而不是麦克风输入的信号?而AEC_AECEMPHASISONOFF却是在模式1的时候仅仅加强mic的高频?
1.第一个问题是,在AEC的运行过程中,参考信号是直接代表了滤波器能够学到的参数,而MIC的信号是有噪声的还有混响等各种问题!所以我们学习的时候就依靠参考信号来会比较可靠!
2.如果我们人为的直接增加了参考信号的高频段,那么自适应滤波器改变了滤波器的输入统计特性,就学习的不真实了!学习到的就是不存在的声学路径!但是也不是不能增加,只有高频学习的时候输入过小的情况下,不得不去学习高频的时候才启用模式2!
最后总结就是:
当参考信号中的高频能量不足的时候,经扬声器和空气传播或其他原因,导致到达mic的高频分量衰减的更厉害(高频信号随距离的衰减比低频信号更厉害!),导致AEC在高频的相关性和收敛速度下降,因此需要调整参数来提升高频分量来加速收敛!
播放参考音频文件 IEEE_269-2010_Male_mono_48_kHz.wav 并使用Audacity录音。
aplay IEEE_269-2010_Male_mono_48_kHz.wav

使用Audacity中的 分析 -> 绘制频谱

为什么拿峰值与8KHz对比?
峰值幅度(Peak magnitude)
-
通常在 1–3 kHz(人声能量最集中的地方)
-
这是“参考信号的主能量”
8 kHz 频点的幅度
-
高频代表
-
对 AEC 来说 最难学、最容易衰减
按照官方文档推荐的参数,幅度大于8dB 参数设置为1,约等于40或者大于40设置为2!
!!!!这里75 -33 = 42按照道理应该设置为 2,但是我们此时播放的声音是男生,本身的低频就比较多!这里是内容的问题,并不是说我们就应该设置为2!!!所以我们平时使用的时候,只要不是播放系统链路造成的这里我个人的建议是使用参数1即可!!!!!一定要注意!!!!
AEC 残差(Residual)是指:麦克风信号中,在减去由参考信号经回声路径模型估计得到的回声分量之后,所剩余的信号。
我们一会要通过观察AEC的残差来判断AEC的收敛
AEC 的“收敛速度”本质上就是 残差能量随时间下降的速度:
-
收敛快 → 残差很快变小
-
收敛慢 → 残差长时间保持较大
-
某个频段收敛慢 → 那个频段的残差消失得更慢
为了便于分析这个参数对AEC的影响,我们先将 AEC_AECEMPHASISONOFF 设置为0关闭对高频的加权:
xvf_host --use i2c AEC_AECEMPHASISONOFF 0
将以下参数配置为如下:
| 参数名 | 设置值 | 模块名称 | 工程作用 | 通俗解释 |
|---|---|---|---|---|
PP_MIN_NS |
1.0 |
Stationary Noise(平稳噪声)默认值为0.15 |
长时间存在、统计特性稳定 、频谱变化慢的噪声 |
|
PP_MIN_NN |
1.0 |
Non-Station Noise(非平稳噪声)默认值0.55 | 非平稳噪声抑制(如突发噪声、环境变化噪声) |
|
PP_ECHOONOFF |
0 |
Post Echo Suppression(后级回声抑制)默认1 | 关闭 AEC 后级的回声抑制模块 | 防止二次抑制,把 AEC 残差真实暴露出来 |
PP_NLATTENONOFF |
0 |
Non-Linear Attenuation(非线性衰减)默认1 | 关闭非线性回声压制 | 避免在弱回声阶段“硬压”残差 |
PP_AGCONOFF |
0 |
Automatic Gain Control(自动增益)默认1 | 禁用自动增益调节 | 防止把小残差自动放大或压小 |
总之就是将抑制或者影响残差的参数全部关掉就行了!
xvf_host --use i2c PP_MIN_NS 1.0
xvf_host --use i2c PP_MIN_NN 1.0
xvf_host --use i2c PP_ECHOONOFF 0
xvf_host --use i2c PP_NLATTENONOFF 0
xvf_host --use i2c PP_AGCONOFF 0
设置输出通道为索引7通道0,即为mic 0的残余回声输出。我们直接对比一个麦克风的惨差即可,记住我们此时设置 AEC_AECEMPHASISONOFF 设置为0,关闭对高频的加权。
xvf_host --use i2c AUDIO_MGR_OP_L 7 0
xvf_host --use i2c AUDIO_MGR_OP_R 0 0
播放参考音频文件 IEEE_269-2010_Male_mono_48_kHz.wav 并使用Audacity录音。
aplay IEEE_269-2010_Male_mono_48_kHz.wav
分析录音后的Audacity的频谱

设置AEC_AECEMPHASISONOFF 设置 1
xvf_host --use i2c AEC_AECEMPHASISONOFF 1

但是我们分析下这个结果是在 AEC_AECEMPHASISONOFF 设置为0 和 1的不同情况下的参数此时尽管是已经经过AEC后的残差!所以我们这两个录取的数据实际是 不可信的!!
AEC残差 = 麦克风信号 - AEC估计的回声
= (回声 + 你的声音 + 噪声) - 估计的回声
= 残留回声 + 你的声音 + 噪声
所以这里的测试环境最好是在专门的声学实验室里面进行!!! 可以消除掉自己说话的声音和噪声的干扰带来的影响!再进行分析!默认建议开启AEC_AECEMPHASISONOFF 的值为1,这比较贴近我们的通用实用环境!!
更多推荐
所有评论(0)