Echo Suppression(回声抑制)

        非线性模型训练完成后,我们现在可以平衡回声抑制和语音失真。本节涉及五个相关的调整参数:

参数名称 描述
PP_DTSENSITIVE 该参数用于平衡双讲性能和回声抑制
PP_ECHOONOFF 此参数设置是否启用或禁用回声抑制
PP_NLATTENONOFF 此参数设置是否启用或禁用非线性回声抑制
PP_GAMMA_E 该参数用于调整直接和早期回波抑制的过减因子
PP_GAMMA_ENL 该参数用于调整非线性回波抑制的过减因子
PP_GAMMA_ETAIL 该参数用于调整回波尾抑制的过减因子

        对于这些 PP_GAMMA_*参数,值为 1.0 表示设备已正确估计并抑制了输出中的相应回声类别。增加这些值会增强抑制效果,并表明设备低估了输出中的回声量。设备不太可能高估回声量,因此不建议将这些参数设置为低于 1.0 的值。这些参数的典型范围在 1.0 到 1.4 之间。

        提高这些参数必然会影响语音信号的质量。因此,首先应尽可能地优化声学设计,例如使用线性扬声器、优质麦克风和最大程度非线性的箱体。这将减少或消除调整这些参数的需要,并带来性能更佳的设备。

       到这里是不是有点晕了,动不动一堆参数,这里我们再来看看整个AEC的处理流程

单讲场景(只有回声):

        AEC阶段 → 消除线性回声 → PP阶段 → 抑制残留回声(线性+非线性)

双讲场景(回声+语音):

        AEC阶段 → 消除线性回声 → PP阶段 → 抑制残留回声(线性+非线性) + 频率分界保护语音

PP_DTSENSITIVE(双讲敏感度,仅检测到双讲的时候使用

PP_DTSENSITIVE 允许对双讲性能和回声抑制之间的平衡进行一定程度的控制,包括使用可选的近端语音检测器。如图所示;随着回声抑制的增强,双讲性能往往会下降,因为更多的近端信号被抑制。

        这张图清晰地展示了:随着 PP_DTSENSITIVE 值增加,回声抑制强度增强(更激进),但双讲性能会逐步下降(近端语音更容易被误抑)。建议先将此参数设置为 0(默认值也是0),然后尝试调整其余回声抑制参数,即不要优先调整这个值!!!。如果之前回声抑制效果不佳,则将这个参数设置高一点(例如高于 1.4 左右),并尝试重新调整;如果这导致双讲性能不佳,则降低该参数值并尝试重新调整。通过平衡该参数 PP_DTSENSITIVE 的设置,找到可接受的回声性能和双讲性能之间的平衡点。

PP_GAMMA_E / PP_GAMMA_ETAIL / PP_GAMMA_ENL

参数名称 作用 针对的回声类型 典型取值范围 特点说明
PP_GAMMA_E 过减因子,控制抑制强度 直接 / 早期线性回声 通常 0.1–2.0 针对早期、能量较集中的线性回声成分
PP_GAMMA_ETAIL 过减因子,控制抑制强度 晚期线性回声 通常 0.1–2.0 针对尾部扩散、衰减较慢的线性回声成分
PP_GAMMA_ENL 过减因子,控制抑制强度 非线性回声 通常 0.0–5.0 范围明显更大,针对非线性失真/残响成分

PP_GAMMA_E(直接/早期回声过减因子)

        控制直接路径和早期反射回声的过减因子
        用于频谱减法算法,决定抑制的强度

原理:
        频谱减法:输出 = 输入 - Gamma × 估计的回声
        Gamma > 1.0:过减(更激进的抑制)
        Gamma < 1.0:欠减(更保守的抑制)
        Gamma = 1.0:标准减法

处理对象:
        直接回声:扬声器到麦克风的直接路径
        早期反射:房间的早期反射(通常在50-100ms内)

PP_GAMMA_ETAIL(回声尾部分量过减因子)

作用:
        控制回声尾部分量(晚期反射)的过减因子
        与PP_GAMMA_E类似,但针对不同的回声成分

处理对象:
        晚期反射:房间的晚期反射(通常在100ms之后)
        混响尾音:混响的衰减部分

为什么需要单独控制?
        晚期反射的回声特性与早期反射不同
        可能需要不同的抑制强度
        提供更精细的控制

PP_GAMMA_ENL(非线性回声过减因子)

作用:
        控制非线性回声的过减因子
        专门用于抑制AEC无法消除的非线性失真

处理对象:
        非线性失真:扬声器失真、房间非线性等
        AEC残差中的非线性成分

参数范围:
        默认值:1.0
        有效范围:[0.0 .. 5.0](比线性回声的范围更大)
        原因:非线性回声可能需要更强的抑制

与其他Gamma参数的区别:
        PP_GAMMA_E和PP_GAMMA_ETAIL:处理线性回声(AEC未完全消除的)
        PP_GAMMA_ENL:处理非线性回声(AEC无法消除的)

单讲场景(只有远端回声,无近端语音)

双讲场景(同时有远端回声和近端语音)

线性 vs 非线性

类别 子类别 参数名称 作用描述 是否有独立开关 典型取值范围
线性回声 直接/早期 PP_GAMMA_E 抑制直接 / 早期线性回声 无(跟随总开关) 通常 0.1–2.0
线性回声 晚期 PP_GAMMA_ETAIL 抑制晚期线性回声(尾部扩散) 无(跟随总开关) 通常 0.1–2.0
非线性回声 - PP_NLATTENONOFF 非线性回声抑制的独立开关 0 / 1
非线性回声 - PP_GAMMA_ENL 非线性回声过减因子 依赖 PP_NLATTENONOFF 通常 0.0–5.0

双讲特殊处理层次

层级 参数名称 作用描述 主要功能 典型表现 / 设计目的
1 PP_FMIN_SPEINDEX 频率分界抑制点(频率保护分界) 低频更多抑制,高频更保守 保护近端语音的高频辅音(s/sh/f/t/th等)
2 PP_DTSENSITIVE 双讲敏感度 / 近端语音保护强度控制 动态减弱整体回声抑制力度 避免近端语音被过度压制(闷声、丢字)

PP_GAMMA_E 和 PP_GAMMA_ENL 调优流程深度分析

        调整这两个参数的目的是消除回声,以满足例如 Teams EQUEST (Microsoft Teams 回声消除质量测试规范)和 ECC (Echo Cancellation Criteria(回声消除标准))规范的要求。请确保此调整步骤在消声室或轻微混响环境中进行,RT60 小于 0.3 秒高混响环境会干扰回声特性的观察,混响会改变回声的频谱特性,难以准确判断回声类型(线性/非线性/尾部))。

需要平衡的两个方面:
        回声抑制:最大化回声消除效果
        双讲性能:在双讲时保持近端语音清晰度

矛盾点:
        更强的回声抑制 → 可能影响双讲时的语音质量
        更好的双讲性能 → 可能残留更多回声

1. 关闭干扰模块

关闭AGC

xvf_host --use i2c PP_AGCONOFF 0

关闭非静止噪声抑制

xvf_host --use i2c PP_MIN_NN 1.0

关闭静止噪声抑制

xvf_host --use i2c PP_MIN_NS 1.0

2.设置Gamma参数为默认值

xvf_host --use i2c PP_GAMMA_E 1.0
xvf_host --use i2c PP_GAMMA_ENL 1.0
xvf_host --use i2c PP_GAMMA_ETAIL 1.0

3.配置输出通道

左声道:自动选择波束(category 6, source 3)

xvf_host --use i2c AUDIO_MGR_OP_L 6 3

右声道:AEC残差(category 7, source 0)

xvf_host --use i2c AUDIO_MGR_OP_R 7 0

左声道(最终输出):观察Gamma参数调整后的实际效果
右声道(AEC残差):分析残留回声的类型,指导参数调整

4. 播放远端信号

aplay IEEE_269-2010_Male_mono_48_kHz.wav

5.等待AEC收敛

        AEC使用**自适应滤波器**,需要时间学习回声路径;滤波器收敛后才能准确消除线性回声;未收敛时,残差中包含大量未消除的回声,影响调优。收敛时间通常需要几秒到几十秒,取决于房间声学特性和信号特性。

6.30秒后播放近端信号(双讲场景)

        确保AEC已经充分收敛,建立稳定的回声消除状态,此时可以准确评估双讲性能。播放代表性的近端语音信号,模拟用户对着麦克风说话,评估在双讲时,回声抑制是否影响语音质量。

7.PP_GAMMA_E 和 PP_GAMMA_ENL 调优方法详解

1. 从默认值开始调

        从PP_GAMMA_E = 1.0开始,监听左声道(最终输出)和右声道(AEC残差);逐步调整PP_GAMMA_E值,观察回声抑制效果和双讲性能。

2. 如果PP_GAMMA_E需要提高到1.4左右

        如果PP_GAMMA_E需要很高才能达到可接受性能,说明线性回声可能已经被AEC较好消除
残留的回声可能主要是非线性回声,需要调整PP_GAMMA_ENL来抑制非线性回声。

        

8.三种回声类型的特征和调试参数

项目 线性残余回声 (Linear Residual Echo) 尾部回声 (Tail Echo) 非线性回声 (Non-Linear Echo)
主要听觉特征 清晰但音量小,像原始语音的衰减版本 像房间混响,模糊的反射与衰减尾音 严重失真,像经过严重失真器处理的声音
是否能听清内容 可以辨别语音内容 通常无法清楚辨别语音内容 完全无法辨别语音内容
失真程度 几乎无失真 无明显谐波失真,但有混响模糊感 非常严重的失真(谐波、互调失真明显)
混响/尾音 无明显混响或尾音 有明显的混响尾音,无清晰起始点 通常无典型房间混响,但可能有“金属感”或怪音
音量表现 低音量下仍可听清 音量可能不低,但内容模糊 音量可能较大,但全是失真成分
听起来像 远距离说话 / 被衰减的干净语音 空旷房间里的回声 / 浴室唱歌的尾音 破音、过载、廉价麦克风严重非线性失真
控制参数 PP_GAMMA_E PP_GAMMA_ETAIL PP_GAMMA_ENL
典型调优方向 逐步增大 PP_GAMMA_E(从1.0开始) 需要比 PP_GAMMA_E 更高的值 优先调整 PP_GAMMA_ENL,而不是盲目增大E
常见调优陷阱 过度增大导致语音损伤(over-suppression) 值太小 → 残留明显混响;太大 → 闷声 用增大 PP_GAMMA_E 来压非线性 → 语音严重损伤

快速诊断口诀(听觉判断顺序)

  1. 残差清晰可懂 → 线性残余 → 调 PP_GAMMA_E
  2. 残差像混响、模糊但不严重失真 → 尾部回声 → 调 PP_GAMMA_ETAIL
  3. 残差严重失真、像破音/金属谐波、完全听不出人声 → 非线性 → 调 PP_GAMMA_ENL

9.PP_GAMMA_ETAIL调优方法详解

1. 专门针对尾部回声

PP_GAMMA_ETAIL的作用

        控制尾部回声(Tail Echo)的过减因子

        尾部回声:房间混响产生的延迟回声分量

        与直接/早期回声不同,尾部回声是混响尾音

为什么需要单独调优

        尾部回声的特性与直接/早期回声不同

        需要不同的抑制策略

        在中等混响环境中更容易观察和调优

2. 平衡双讲性能和回波抑制

需要平衡的两个方面:

        回波抑制:最大化尾部回声的消除效果

        双讲性能:在双讲时保持近端语音清晰度

矛盾点:

        更强的尾部回声抑制 → 可能影响双讲时的语音质量

        更好的双讲性能 → 可能残留更多尾部回声

3.为什么需要中等混响环境(RT60 介于 0.3 秒和 0.9 秒之间)?
环境类型 RT60范围 典型环境示例 AEC残差主要表现 调优重点参数 用途 / 调优建议 注意事项 / 适用性限制
消声室/极低混响 < 0.3秒 专业消声室、车内(安静)、高度吸声处理的小房间 几乎纯线性残余回声,无明显尾音 PP_GAMMA_E 主要针对直接/早期回声过减;从1.0逐步增大测试抑制效果 最理想的AEC调优基准环境;残差干净,易判断回声类型
低到中等混响 0.3–0.6秒 普通办公室、小型会议室、客厅(有地毯/窗帘)、卧室 线性残余 + 轻微尾部回声 PP_GAMMA_EPP_GAMMA_ETAIL 先调PP_GAMMA_E压线性残差;若仍有模糊尾音,再增大PP_GAMMA_ETAIL(通常需更高值) 大多数消费级/企业级语音设备的主要使用场景;性能最可控
中等混响 0.6–0.9秒 中型会议室、开放式办公室、无过多软装的客厅、教室 明显尾部回声 + 部分线性残余 PP_GAMMA_ETAIL(主) + PP_GAMMA_E 优先增大PP_GAMMA_ETAIL抑制混响尾巴;避免过度依赖PP_GAMMA_E导致语音损伤 尾部回声主导;AEC收敛难度增加,需更长自适应滤波器长度
高混响 > 0.9秒 大型会议厅、空旷大厅、浴室、楼梯间、未经处理的硬表面大房间 严重尾部回声 + 可能混入非线性成分 PP_GAMMA_ETAIL(极限值) 尽力调高PP_GAMMA_ETAIL,但效果有限;优先考虑物理吸声处理或缩短AEC滤波尾长 不适合精细调优;混响太强,AEC残差难以干净;语音可懂度差,建议避免部署或加硬件吸声

如上面表格所示尾部回声需要混响环境才能产生!!

上图是低混响环境(RT60 < 0.3秒)

这个是中等混响环境(RT60 0.3-0.9秒)

上图蓝色部分为直接路径,黄色为早期反射,绿色为多次密集反射。

尾部回声的物理特性:

回声类型 时间范围(典型值) 物理来源与特性 在房间脉冲响应(RIR)中的表现 对AEC的影响与调优重点 听觉感知特征
直接路径 0–50 ms(常0–30 ms) 扬声器声音直达麦克风(无反射) 最强峰值(直达声),延迟由物理距离决定 AEC自适应滤波器必须覆盖此部分(核心) 像“即时”回声,最强、最清晰,常被误认为啸叫
早期反射 50–200 ms(常见50–100 ms) 墙壁、地板、天花板等单次/少次反射 离散、可分辨的峰值(前几个明显反射) 主要由自适应滤波器线性部分覆盖;残余用PP_GAMMA_E压制 增强空间感;若过强会造成梳状滤波/着色;<50 ms常与直达声融合(Haas效应)
尾部混响 200 ms–RT60(可达数百ms至数秒) 多次密集反射、扩散散射,形成统计性衰减尾巴 密集、随机、能量逐渐衰减的“噪声尾” 自适应滤波器覆盖有限(常100–400 ms尾长);残余靠PP_GAMMA_ETAIL非线性压制 像“混响尾音”、模糊、持续衰减;内容不可辨;主导中等/高混响环境残差

RT60与尾部回声:

RT60 范围 混响特性描述 尾部回声(晚期反射/混响尾)表现 AEC残差典型听觉/特征 调优 PP_GAMMA_ETAIL 的可行性与效果 推荐调优策略 & 注意事项
RT60 < 0.3秒 混响时间极短,几乎“干”声环境 尾部回声不明显 / 非常微弱,几乎不可闻 残差主要为线性残余回声,无明显混响尾巴;清晰但弱 :缺乏明显尾部信号,无法可靠评估参数效果 专注 PP_GAMMA_E 压制线性残余; PP_GAMMA_ETAIL 保持默认(1.0–1.2)或低值,避免无谓调整
RT60 0.3–0.9秒 混响时间适中(最常见室内场景) 尾部回声清晰可辨,有明显的衰减尾巴 / 模糊反射 残差中有可听的“混响尾音”,内容模糊但不严重失真;尾巴持续数百ms :尾部信号足够作为反馈,调整前后差异明显;最理想的“甜区” 优先/重点增大 PP_GAMMA_ETAIL(典型1.3–2.0+); 先调 PP_GAMMA_E 压线性,再攻尾部; 平衡避免过度抑制导致闷声
RT60 > 0.9秒 混响时间过长,严重“活”声 / 回声环境 尾部回声极强、持续时间长,主导整个残差 残差被长混响尾巴淹没,模糊严重、内容几乎不可辨;像空旷大厅/浴室回声 :尾部过强,自适应滤波器覆盖不足,后处理压制有限;易出现残差“闷”或语音损伤 尽力调高 PP_GAMMA_ETAIL 但效果有限; 优先物理吸声(地毯、窗帘、吸声板); 或告知用户“环境不友好”,建议缩短AEC滤波尾长或加硬件

检测RT60的命令为:

xvf_host --use i2c AEC_RT60
4.测试方法
1. 重复PP_GAMMA_E调优的步骤

关键区别:

        环境不同:需要在中等混响环境中进行

        观察重点不同:重点观察尾部回声,而不是直接/早期回声

2. 在残余信号中观察尾部回声

        如何识别尾部回声, 尾部回声的听觉特征:

                听起来像是混响:持续的衰减尾音

                没有直达声成分:没有清晰的起始点

                模糊的混响:无法清楚辨别原始声源

                延迟出现:在直接/早期回声之后出,且持续时间长

        在AEC残差中观察:

                右声道输出:AEC残差(未经过PP处理)

                听觉特征:听到混响、模糊的尾部回声

                时间特征:在直接回声之后,持续衰减

3. 调整PP_GAMMA_ETAIL改善尾部回声

尾部回声抑制的挑战:

        尾部回声与近端语音的混响在时域和频域上重叠,过度抑制尾部回声可能误抑制近端语音的混响,导致双讲时语音质量下降。

双讲场景的特点:

        远端信号和近端信号同时存在,近端语音也有混响(房间混响)。

尾部回声抑制需要区分:

        远端回声的混响(需要抑制)        

        近端语音的混响(需要保留)

为什么AEC难以消除尾部回声?

        AEC的局限性:AEC使用自适应滤波器估计线性传递函数,自适应滤波器主要针对直接路径和早期反射,尾部混响是多次反射的结果,难以用线性滤波器完全建模。

        尾部回声的复杂性:涉及多次反射,路径复杂与房间的几何形状和材料特性相关,难以用简单的线性模型描述。因此需要PP_GAMMA_ETAIL,在PP阶段,使用频谱减法抑制尾部回声根据尾部回声的功率谱进行抑制,PP_GAMMA_ETAIL控制抑制的强度。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐