回声消除(AEC)原理、算法及实战——完整的回声消除算法框架所涉及到的模块介绍

这篇具有很好参考价值的文章主要介绍了回声消除(AEC)原理、算法及实战——完整的回声消除算法框架所涉及到的模块介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、一个完整的回声消除系统,包含以下几个模块:
1.时延估计(Time Delay Estimation, TDE) 模块
2.(线性)回声消除(Linear Acoustic Echo Cancellation, AEC) 模块(线性滤波模块)
3.双讲检测(Double-Talk Detect, DTD) 模块
4.非线性残余声学回声抑制(Residual Acoustic Echo Suppression, RAES) 模块(非线性滤波模块)

回声消除模型,算法,语音识别,人工智能

 二、时延估计模块

时延产生原因:参考信号取自下行接收的数据,麦克风信号取自采集的数据,中间存在时延、声音传播时间(无论内外)、播放采集线程工作的 buffer、启动时间差等。不同设备、不同环境下存在的时延不同。

实现的回声消除技术,主要会用到两种声音信号,一个是回声信号,一个是参考信号,在回声消除的实际执行中,两种信号间是存在一定时延的,时延来源主要有三种:

1、从远端麦克风获取到参考信号到参考信号从近端扬声器中播放出来所产生的时延。

2、参考信号从近端扬声器播放出来后抵达近端麦克风所产生的时延。

3、近端麦克风获得回声信号后,将其送至回声消除算法模块所产生的时延。

时延估计模块存在的意义就是控制回声信号和参考信号之间的时延,使其保持在一定的范围内,便于后面模块对回声进行处理。

时延估计模块影响

时延的对齐可以减轻自适应滤波器的压力,减少滤波器的跟踪长度,降低开销, 如果没有时延对齐模块,就需要将滤波器跟踪的长度设计成能够覆盖所有参考信号到回声信号之间的时延,这经常是上百毫秒的,计算量非常大。

时延的对齐影响滤波器的性能。时延没对齐,滤波器跟踪的参考信号和回声信号相关性极低,滤波器收敛会受到影响。时延估计过量,滤波器跟踪的信号缓冲区中根本找不到参考信号,滤波器同样不能收敛。

时延的对齐速度,影响整个收敛速度,影响滤波器收敛,同时也影响非线性回声处理。时延变化时,需要能够快速跟踪到时延的变化,并且迅速调整,否则就会偶现回声。

时延估计设计

一般来说,由于设备扬声器和麦克风的响应影响,回声的分布大致在中频段,高频低频部分回声很少,因此可以在中频段去跟踪回声。

Webrtc 的 aec 模块采用的是频域 Binary Spectrum 的方法。将两端的频谱中间频段的分布映射到二值化数据,寻找相似性最高的远端信号并计算对应的时延,该方法计算量很低,但是受噪声影响很大。

Webrtc 的 aec3 模块采用的是线性滤波。匹配滤波器的方法是直接在时域信号做 NLMS (Normalized Least Mean Square) 处理,这个方法鲁棒性很好。

时域信号互相关会出现多个峰值,导致时延估计不准。我们考虑采用频域互相关的方法,结合线性滤波,一方面保证鲁棒性,一方面利用频域互相关检测速度快的特点,加快检测速度。 

三、(线性)回声消除(Linear Acoustic Echo Cancellation, AEC) 模块(线性滤波模块)

回声消除模块主要是利用自适应滤波器进行设计的,在设计时需要考虑稳定性、算法复杂度、收敛速率等相关指标。为了实现更好的回声消除效果,除了自适应滤波器之外,在设计线性回声消除模块时,还需要引入双讲检测。

回声消除模型,算法,语音识别,人工智能

x(n) 为远端输入信号,经过未知的回声路径 h(n) 得到 y(n)=x(n)∗h(n),再加上观测噪声 v(n),得到近端输入信号 s(n)=y(n)+v(n)。x(n) 通过自适应滤波器 w(n) 得到估计的回声信号,并与近端输入信号 s(n) 相减得到误差信号 e(n),即 e(n)=s(n)−conj(w(n))x(n),自适应滤波算法所估计的回声路径就越接近实际的回声路径,得到的误差就越小,回声残留就越小。所以用得到的误差大小作为自适应调整的方向。

滤波器采用特定的自适应算法不停地调整权值向量,使估计的回声路径 w(n) 逐渐趋近于真实回声路径 h(n)。这样滤波器的输出能够逼近真实的回声,从而使误差信号中不存在回声信号。

自适应滤波器收敛阶段,近端信号只有回声,不能混杂有近端语音。因为近端和噪声是会扰乱 h(n) 的收敛过程。也就是说要求回声消除算法开始运转后收敛要非常快,最好要求对方的算法在你一说就收敛好了,收敛好之后,如果对方开始说话,这个 h(n) 系数就不要变化了,需要稳定下来。

回声路径可能是变化的,一旦出现变化,回声消除算法要能判断出来,因为自适应滤波器学习要重新开始,也就是 h(n) 需要一个新的收敛过程,以逼近新的回音路径h。自适应滤波器需要在收敛速度和跟踪性能、稳态失调之间进行平衡。

线性滤波器设计

自适应滤波器,目前常用的是 NLMS 滤波器和 Kalman 滤波器,这两种滤波器各自有优点和缺点。Kalman 滤波收敛速度快,收敛性能欠缺;NLMS 相对来说比较平稳。基本上就是在于收敛速度和跟踪性能、稳态失调有不同的偏向。但是无论哪种滤波器,都是可以调整跟踪的速度来改变收敛速度和跟踪性能之间的平衡,NLMS 改变的是步长值,Kalaman 改变的是增益。

考虑用多种滤波器混合使用的方案,取不同滤波器的优点,保证收敛速度,同时也相互限制发散。非线性滤波器也会参与估计回声、双讲的状态,从而控制自适应滤波器跟踪步长,根据状态实现变步长跟踪。

四、非线性残余声学回声抑制(Residual Acoustic Echo Suppression, RAES) 模块(非线性滤波模块)

自适应滤波器很难将回声完全消除,为了实现残余回声的消除,就需要引入残余回声抑制模块了。当我们在设计残余回声抑制模块时,不仅需要实现近端语音失真度和残余回声抑制量之间的平衡,还需要做好算法效果和计算复杂度之间的平衡,

非线性处理模块通常是计算参考信号、麦克风信号、线性回声信号以及残差之间的相关性,估计残留回声,或者回声的状态。采用维纳滤波的方式消除回声,其重点在于如何估计残留回声,而估计残留回声的大小,也直接影响到最终消除的结果。残留回声估计不足,回声处可能会有残留;残留回声估计太过,双讲处会对近端语音损伤。

非线性滤波器设计

我们的非线性处理模块针对参考信号、麦克风信号、线性回声信号以及残差信号,采用峰值相关性、频域相关性、幅值相似性等特点,联合判断得到双讲状态、回声状态等信息。除了上述的相关性外,还可以利用线性滤波器的更新权值去获得回声的状态。而影响最终输出结果的,是残余回声或者回声大小的估计。残余回声的估计,采用了回声的状态和滤波器的 ERL (Echo Return Loss) 估计相结合的方法。

自适应滤波器有三种工作模式(通过DTD双讲检测):

  • 远端语音存在,近端语音不存在:滤波、自适应滤波器系数更新
  • 远端语音存在,近端语音存在:滤波
  • 远端语音不存在:什么都不用做

参考文献:

https://worktile.com/kb/ask/5708.html

https://www.cnblogs.com/LXP-Never/p/11703440.html文章来源地址https://www.toymoban.com/news/detail-765942.html

到了这里,关于回声消除(AEC)原理、算法及实战——完整的回声消除算法框架所涉及到的模块介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据仓库入门介绍框架(附带完整项目实战)

    一、诞生背景 企业数据分析需要:各个部门自己建立独立的数据抽取系统,导致数据不一致 概述 数据仓库是一个面向主题的、集成、非易失的且随时间变化的数据集合 主要用于组织积累的历史数据,并使用分析方法(OLAP、数据分析)进行分析整理辅助决策,为管理者、企

    2024年01月18日
    浏览(39)
  • 基于ADAU1452 DSP ANC和AEC算法的实现

                                                                             是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?加我微信hezkz17,   本群提供音频技术答疑服务,+群附加赠送,DSP音频项目核心开发资料,   1 使用Sigma中的NLMS算法模块   对应C源

    2024年02月10日
    浏览(84)
  • 回声状态网络(Echo State Networks,ESN)详细原理讲解及Python代码实现

    回声状态网络是一种循环神经网络。ESN 训练方式与传统 RNN 不同。网络结构如下图: (1)储层(Reservoir):中文翻译有叫储备池、储层、储蓄池等等各种名称。ESN 中的储层是互连神经元的集合,其中连接及其权重是随机初始化和固定的。该储层充当动态储层,其目的是将输

    2024年04月17日
    浏览(43)
  • HTML小游戏16 —— 消除游戏《魔法石》源码(附完整源码)

    💂 网站推荐:【神级源码资源网】【摸鱼小游戏】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 💬 免费且实用的计算机相关知识题库:👉进来逛逛 给大家安利一个免费且实用的前端

    2024年02月22日
    浏览(68)
  • 将Speex AEC MDF算法从C语言移植到Matlab:一种谦逊的语言变换与重构的旅程

    尊敬的读者们,我今天希望与大家分享的是一个非常有趣的编程挑战,即将Speex AEC (Acoustic Echo Cancellation) MDF (Multi-Delay Filter) 算法从C语言移植到Matlab的过程。这是一个激动人心的主题,涉及到多个领域的知识,包括信号处理、算法设计、以及跨语言的编程技能。 实战项目下载

    2024年02月16日
    浏览(48)
  • 【综合评价分析】熵权算法确定权重 原理+完整MATLAB代码+详细注释+操作实列

    【综合评价分析】 熵权算法 确定权重 原理+完整MATLAB代码+详细注释+操作实列 文章目录 1. 熵权法确定指标权重 (1)构造评价矩阵 Ymn (2)评价矩阵标准化处理 (3)计算指标信息熵值 Mj (4)计算各指标权重 Nj 2.完整代码 2.1 熵权法(正向化指标) 2.2熵权法(负向化指标)

    2024年01月21日
    浏览(44)
  • 实战演练|从原理到应用:DeepKE框架介绍及简单使用

    本文主要参考deepKE官方文档,以及deepKE官方框架源码https://github.com/zjunlp/DeepKE,我此时使用的DeepKE最新版本是2.1.1。 DeepKE是一个开源的知识图谱抽取与构建工具,支持 cnSchema、低资源、长篇章、多模态 的知识抽取工具,可以基于 PyTorch 实现 命名实体识别 、 关系抽取 和 属性

    2024年02月15日
    浏览(43)
  • 时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测

    预测效果 基本介绍 1.Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测(完整源码和数据); 2.数据集为excel,单列时间序列数据集,运行主程序main.m即可,其余为函数文件,无需运行; 3.SSA优化的参数为:三个参数,储备池规模,学习率,正则化系数

    2024年04月17日
    浏览(53)
  • 【C语言】C语言编程实战:Base64编解码算法从理论到实现(附完整代码)

    🧑 作者简介 :阿里巴巴嵌入式技术专家,深耕嵌入式+人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍 :分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导、简历面试辅导、技术架构设计优化、开发外包等服

    2024年03月13日
    浏览(39)
  • 编译原理实验二——消除一切文法的左递归(c++实现)

    首先给出书中的算法截图: 第一步:处理产生式的输入 所有产生式使用一个结构体存储: 可以看到,left代表产生式的左部,right代表产生式的右部,而且是一个集合。 例如S-Qc|c,在程序中,left=S,right=Qc,c 输入的结果保存在一个vector的数据结构中,并起名为v 输入函数为: 由

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包