回声消除的基本概念

  回音消除(Acoustic Echo Cancelling)是透过音波干扰方式消除麦克风与喇叭因空气产生回受路径(feedback path)而产生的杂音。通俗一点来说,回声消除就是为了消除机器自身发出的声音,不影响外界传递过去的声音。 如在双工通话的场景中,来自远端的经过扬声器放出来的声音被消掉,否则经过麦克风采集和近端说话人信号混在一起被传递到远端,则会出现远端的人听到自己说的话,这种回声对于一些通信设备来说体验是致命的差。

回声消除的基本流程

  回声消除常用方法如下:使用不同的自适应滤波算法调整滤波器的权值向量,估计一个近似的回声路径来逼近真实回声路径,从而得到估计的回声信号,并在纯净语音和回声的混合信号中除去此信号来实现回声的消除。

详细的来说,回声消除的过程一般分为以下几个步骤:

  • 远端信号被传递到系统。
  • 转载远端信号的扬声器在房间里。
  • 也在房间里的麦克风拾取产生的直接路径的声音,和随之而来的混响声音作为近端信号。
  • 将远端信号进行滤波并延迟到类似的(resemble)近端信号。
  • 将过滤的远端信号是从近端信号中减去。
  • 所产生的信号指不包括任何直接或回荡的声音通过扬声器在房间里的声音。

回声消除常用的算法

A 最小均方算法 LMS

自适应AEC问题中应用最广泛的就是自适应滤波算法,其中最早是由Widrow和Hoff在1959年所提出的最小均方(Least Mean Square,LMS)算法

LMS算法基于维纳滤波理论,采用最速下降算法,通过最小化误差信号的能量来更新自适应滤波器权值系数。

  • 优点:抑制旁瓣效应
  • 缺点:LMS算法计算复杂度不高,但是其收敛速率较慢,并且随着滤波器阶数(步长参数)升高,系统的稳定性下降,要保证采用最小的步长参数,保证最小的失调,可能无法满足收敛标准

  B 归一化最小均方算法 NLMS

归一化最小均方(Normalized Least Mean Squares,==NLMS)==算法是改进的LMS算法,根据原LMS算法中误差信号与远端输入信号的乘积,对远端输入信号的平方欧式范数进行归一化处理,将固定步长因子的LMS算法变为根据输入信号时变的变步长NLMS算法,

优点:改善了LMS算法收敛速度慢的缺点。计算简单、收敛速度较快的特点
缺点:收敛速度慢

C 稀疏类自适应算法——PNLMS

根据回声路径的稀疏性,Duttweiler引入了比例自适应的思想,提出了比例归一化最小均方算法 PNLMS,按比例分配滤波器的权值向量大小,该算法对回声消除的发展具有非常重要的意义。

该算法采用与滤波器抽头稀疏成正比的可变步长参数来调整算法收敛速度,利用其抽头稀疏的比例值来判断当前权重稀疏所属的活跃状态,根据状态的不同,所分配的步长大小也有所差异,活跃抽头系数分配较大的步长参数,这样可以加速其收敛,而不活跃的抽头系数则相反,通过分配其较小的步长参数来提高算法的稳态误差。每个滤波器抽头被分别赋予了不同估计值,算法的稳态收敛性得到了明显改善。然而,PNLMS 有一个明显的缺点,即比例步长参数的选择引入了定值,这会导致估计误差累积,最后使算法在后期的收敛速度减慢下来。

优点:使算法对于稀疏的回声路径,在初始阶段拥有快速的收敛速率,与此同时降低了稳态误差,
缺点:

  • 由于 PNLMS 算法过分强调大系数的收敛,而当系数变小后,P 步长也随之变小,但随着算法的运行,则可能出现算法后期收敛速度慢、不能及时收敛的情况
  • 相比于NLMS算法增加了算法的复杂度
  • 另外在回声路径非稀疏情况下,收敛速度会变得比NLMS算法更慢

D 子带自适应滤波器(SAF)

在声学回声消除应用中,远端输入语音信号的相关性较高,然而,传统的方法是基于“信号的无关性”假设的,传统的全带LMS 和NLMS 等计算复杂度低的随机梯度算法收敛速度明显下降。

远端语音信号相关性有两层含义:

时域上:它表征语音信号相关矩阵特征值的扩散度
频域上:它表征远端语音信号的频谱动态范围

一般来说,语音信号相比白色信号,前者明显有更大的频谱动态范围,即更大的信号相关性。因此,可以通过降低输入信号的相关性来加快算法收敛速度,但是行之有效的一种方法是将自适应滤波器和滤波器组理论相结合,提出了子带自适应滤波(subband adaptive filter,SAF)算法,子带结构是基于频域对信号进行的一种处理(节省计算量、提高收敛速度)。 在传统的 SAF中,子带自适应算法都是以最小化子带误差信号为目标的,这样基于局部目标函数误差的最小化不一定是全局误差能量最小化。而分析滤波器组在子带切割和综合滤波器组重建全带信号时皆会引入时延,在AEC 应用中,这样的时延会使包含近端语音的全带误差信号传到远端,为了消除时延的影响,无延时子带闭环结构系统以全局误差能量最小化为约束条件来调整滤波器系数。最后,确保自适应滤波算法能够收敛到最佳的滤波器系数。

优点:改善了全带自适应滤波算法在相关信号条件下的收敛速率
缺点:其稳态误差由于输出时存在的混叠分量而显著升高,当采用正交镜像滤波器组时,虽然可以通过子带系统将混叠部分相互抵消掉,但在现实中却无法实现。

总结

 基于维纳滤波发展起来的 LMS 算法因其结构简单,运算量小,稳定性好等特性,依然是目前得到广泛应用的一种自适应滤波算法。

 有人提供了一种折中的方案:基于多带结构的改进型自适应滤波切换算法NLMS-NSAF

一 首先远端语音信号利用包络法判别有无语音段,

二 然后将信号状态输出到自适应多带结构算法模块当中。

三 若语音区输入信号的短时能量较大,则使用收敛速度快的自适应滤波算法(NLMS);

四 若语音区输入信号的短时能量较小,需考虑计算量低的算法(NSAF),

五 语音在无语音区时算法迭代停止。

对输入语音信号能量高低的判定是通过和阈值比较得到的。在充分考虑语音特性的情况下,切换算法实现了算法在收敛速度的优势,同时完成了同算法复杂度的优化选择。最后达到了提高滤波算法性能、降低运算量的目的。这是一个实际的解决方案,不过实际的效果还要等待后续验证,敬请关注,后续我会对这块做一个深挖。

参考文档:
https://www.debugger.wiki/article/html/1572616852593650

https://www.cnblogs.com/LXP-Never/p/11773190.html

回声消除AEC(Acoustic Echo Cancellation)概括介绍及基本原理分析的更多相关文章

  1. 声学回声消除(Acoustic Echo Cancellation)

    回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音,这就是回声.一些回声是必要的,比如剧院里的音乐回声以及延迟时间较短的房间回声:而大多数回声会造成负面影响,比如在有线或者无线通信时重复听到自 ...

  2. 回声消除(AEC)原理

    一.前言 因为工作的关系,笔者从2004年开始接触回声消除(Echo Cancellation)技术,而后一直在某大型通讯企业从事与回声消除技术相关的工作,对回声消除这个看似神秘.高端和难以理解的技术 ...

  3. 论文翻译:2018_Deep Learning for Acoustic Echo Cancellation in Noisy and Double-Talk Scenarios

    论文地址:深度学习用于噪音和双语场景下的回声消除 博客地址:https://www.cnblogs.com/LXP-Never/p/14210359.html 摘要 传统的声学回声消除(AEC)通过使 ...

  4. 论文翻译:2020_Generative Adversarial Network based Acoustic Echo Cancellation

    论文地址:http://www.interspeech2020.org/uploadfile/pdf/Thu-1-10-5.pdf 基于GAN的回声消除 摘要 生成对抗网络(GANs)已成为语音增强( ...

  5. 论文翻译:2020_A Robust and Cascaded Acoustic Echo Cancellation Based on Deep Learning

    论文地址:https://indico2.conference4me.psnc.pl/event/35/contributions/3364/attachments/777/815/Thu-1-10- ...

  6. 论文翻译:2021_ICASSP 2021 ACOUSTIC ECHO CANCELLATION CHALLENGE: INTEGRATED ADAPTIVE ECHO CANCELLATION WITH TIME ALIGNMENT AND DEEP LEARNING-BASED RESIDUAL ECHO PLUS NOISE SUPPRESSION

    论文地址:https://ieeexplore.ieee.org/abstract/document/9414462 ICASSP 2021声学回声消除挑战:结合时间对准的自适应回声消除和基于深度学习 ...

  7. 论文翻译:2021_AEC IN A NETSHELL: ON TARGET AND TOPOLOGY CHOICES FOR FCRN ACOUSTIC ECHO CANCELLATION

    论文地址:https://ieeexploreieee.53yu.com/abstract/document/9414715 Netshell 中的 AEC:关于 FCRN 声学回声消除的目标和拓扑选 ...

  8. 论文翻译:2021_Joint Online Multichannel Acoustic Echo Cancellation, Speech Dereverberation and Source Separation

    论文地址:https://arxiv.53yu.com/abs/2104.04325 联合在线多通道声学回声消除.语音去混响和声源分离 摘要: 本文提出了一种联合声源分离算法,可同时减少声学回声.混响 ...

  9. 论文翻译:2020_Attention Wave-U-Net for Acoustic Echo Cancellation

    论文地址:http://www.interspeech2020.org/uploadfile/pdf/Thu-1-10-10.pdf Attention Wave-U-Net 的回声消除 摘要 提出了 ...

  10. 论文翻译:2021_Semi-Blind Source Separation for Nonlinear Acoustic Echo Cancellation

    论文地址:https://ieeexplore.ieee.org/abstract/document/9357975/ 基于半盲源分离的非线性回声消除 摘要: 当使用非线性自适应滤波器时,数值模型与实 ...

随机推荐

  1. Star 4.2k,这是我用过最舒服的跨平台Redis桌面客户端

    项目介绍 Tiny RDM 一个现代化轻量级的跨平台Redis桌面客户端,支持Mac.Windows和Linux 软件截图 运行效果 版本展示 配置连接 项目亮点 极致轻量 极小包体,随处安装随处使用 ...

  2. 《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(1)-初识Wireshark

    1.简介 前边已经介绍过两款抓包工具,应该是够用了,也能够处理在日常工作中遇到的问题了,但是还是有人留言让宏哥要讲解讲解Wireshark这一款抓包工具,说实话宏哥之前也没有用过这款工具,只能边研究边 ...

  3. 5个.NET开源且强大的快速开发框架(帮助你提高生产效率)

    中台Admin(Admin.Core) 中台Admin(Admin.Core)是前后端分离权限管理系统,前端 UI 基于Vue3开发,后端 Api 基于.NET 8.0开发.支持多租户.接口权限.数据 ...

  4. 双端队列(deque)--python

    Python中的双端队列(deque)是一种特殊的数据结构,它允许在队列的两端进行插入和删除操作12.双端队列可以看成栈和队列的结合3.在Python中,我们可以使用collections模块中的de ...

  5. mybatis批量插入支持默认值和自定义id生成策略的免写sql插件

    最近做项目时用了免写sql的插件但是发现批量操作不满足现有需求.所以,在原有基础之上扩展了批量的操作支持[支持插入默认值和自定义id生成策略].使用方法如下: 一:在pom文件中引入jar配置 < ...

  6. OLED 驱动模块程序代码

    1.前言 作为嵌入式软件开发,可能经常会使用单片机连接驱动显示屏,实现人机交互的功能,通常可选择的有 OLED 和 LCD 等,其中相关驱动代码例程网上更是数不胜数. 本文介绍的是 OLED, 常见代 ...

  7. 单片机 IAP 功能基础开发篇之APP升级(一)

    引言 目的 主要介绍单片机 IAP 开发的设计思路,如何不使用下载烧录器的方式对单片机的程序进行升级,升级区域包括 bootloader 和用户程序的升级,升级方式有 UASRT 通信.CAN 通信和 ...

  8. 下载、安装Git并拷贝GitHub项目到本地的流程

      本文介绍分布式开源版本控制系统Git的下载.安装,并基于Git实现克隆GitHub中项目代码的方法.   Git是一款开源软件,因此我们直接在Git的官方下载地址下载最新版本的Git即可.其中,在 ...

  9. 《ASP.NET Core 与 RESTful API 开发实战》-- (第7章)-- 读书笔记(上)

    第 7 章 高级主题 7.1 缓存 缓存是一种通过存储资源的备份,在请求时返回资源备份的技术.ASP.NET Core 支持多种形式的缓存,既支持基于 HTTP 的缓存,也支持内存缓存和分布式缓存,还 ...

  10. [JVM] Java内存分配

    Java内存分配 程序计数器 程序计数器是一块较小的内存区域,作用可以看做是当前线程执行的字节码的位置指示器.分支.循环.跳转.异常处理和线程恢复等基础功能都需要依赖这个计算器来完成. 虚拟机栈 虚拟 ...