技术分享| anyRTC回声消除算法进化

news2024/10/2 6:34:15

本文将从基础概念、经典算法、主要挑战,以及人工智能回声消除技术探索等方面,分享anyRTC在 AEC 技术方面的实践及效果。

一.什么是回声消除

回音消除一直是语音通信的难点,最早的回声消除是从电话兴起的时候就有了,电话机的硬件中含有回声消除的硬件模块(HW-AEC),到了现代,软件中的通讯场景越来越多,相对应的软件回声消除算法(Soft-AEC)也迅速应用起来。

从通讯回音产生的原因看,可以分为声学回音(Acoustic Echo)和线路回音(Line Echo),相应的回声消除技术就叫声学回声消除(Acoustic Echo Cancellation,AEC)和线路回声消除(Line Echo Cancellation, LEC), 声学回音是由于在免提或者会议应用中,扬声器的声音多次反馈到麦克风引起的(比较好理解);线路回音是由于物理电子线路的二四线匹配耦合引起的(比较难理解),所以本讲只讨论声学回声(包括线性回声信号和非线性回声信号)的消除原理,即:远端讲话者(主播 A 或听众 A)的声音信号在传输给近端(听众 B 或主播 B)后,在近端设备的扬声器播放出来,经过一系列声学反射,被近端设备的麦克风拾取,又传输给远端(主播 A 或听众 A)的现象。

声学回声将导致远端讲话者在很短时间内,又听到了自己刚才的讲话声音。声学回声的产生过程如图所示。

在这里插入图片描述

这个回声如何才能消除掉呢?那就是使用 Soft-AEC(软件声学回声消除,下面统称为AEC)技术,消除近端设备麦克风采集信号中包含的回声 ; 保证远端讲话者收听到的声音中不存在回声信号 ;提升用户的通讯体验及会议室品质。
使用 AEC 技术后,两端声音传输过程改变为如图 2 所示,进而从底层保证会议场景下声音的干净度。

在这里插入图片描述

二.常用经典算法

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

其原理框图如图所示。

在这里插入图片描述

滤波器有两种状态:

  • 滤波:

在这里插入图片描述

  • 自适应滤波器系数更新(NLMS):
    在这里插入图片描述

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

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

在这里插入图片描述

Webrtc中的回声消除模块,已包含:双讲检测技术(语音活动检测,区分希腊佛中是否存在双端讲话)、自适应滤波技术(主要性能指标:跟踪性能、抗冲激性、鲁棒性和计算复杂性)、后处理(消除自适应滤波器的输出误差)。

下面我们基于webrtc的回音消除算法做了一个测试,内部也做了一些优化,目前这个算法可以应用到多种平台,像windows、linux、android、ios、arm平台都可以支持,大家可以测试下,效果还是比较明显,基本上在很短时间内就可以完成回音收敛算法的学习。

在这里插入图片描述

三.人工智能回声消除技术探索

上面介绍了传统AEC算法的原理,近年来,AI深度学习在语音信号处理领域的应用越来越多,anyRTC早在3年前就已经将AI深度学习应用于语音降噪中,并取得了非常良好的效果,广受用户的好评。我们想着能不能利用深度学习来改进AEC传统算法中的一些痛点,比如噪声抑制效果不明显,双讲效果差等问题。早期有很多RNN的算法,但是效果都不是特别理想,很高兴看到的是近年来 NLP 领域最热门的 Transformer 与 AEC 算法融合的进行了探索。

Transformer 由 Google 团队于 2017 年 6 月提出,抛弃了传统 CNN 和 RNN,整个网络结构由 Attention 机制组成。它带给业界的重大突破在于:解决了 RNN 依赖历史结果导致模型并行能力被限制的问题与顺序计算信息丢失的问题。

在这里插入图片描述

深度学习的本质就是构建深度模型来拟合输入与输出之间的映射关系,并且通过所构建模型的不断自我调整来使得模型输出与目标的误差越来越小,直至收敛稳定。对于 AEC 算法来讲,深度网络的输入包括参考和麦克两路信号,输出是一路。下图是anyRTC基于 LSTM 深度学习模型处理之后的双讲效果。

在这里插入图片描述

可见,基于 LSTM 的AEC 深度学习方法结果优于传统方法。通过结合深度模型强大的拟合能力与会议场景相关的数据集,为非线性回声、混响、噪音、“双讲”等各种场景的性能带来提升。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/369937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

postgres 源码解析51 LWLock轻量锁--2

本篇将着重讲解LWLock涉及的主要API工作流程与实现原理,相关基础知识见回顾:postgres 源码解析50 LWLock轻量锁–1 API介绍 函数API功能CreateLWLocks分配LWLocks所需的内存并进行初始化LWLockNewTrancheId分配新的Tranche ID,供用户使用Extension模块…

Helm安装Harbor

一、介绍 1.1 Harbor Harbor 是由 VMware 公司为企业用户设计的 Registry Server 开源项目,包括了权限管理 (RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。目前该项…

说说Java“锁“ 事

文章目录前言大厂面试题复盘 —— 并发编程高级面试解析从轻松的乐观锁和悲观锁开讲通过8种情况演示锁运行案例,看看我们到底锁的是什么公平锁和非公平锁可重入锁(又名递归锁)死锁及排查写锁(独占锁)/读锁(共享锁)自旋锁SpinLock无锁 -> 独占锁 -> 读写锁 -&g…

五种IO模型以及select多路转接IO模型

目录 一、典型IO模型 1.1 阻塞IO 1.2 非阻塞IO 1.3 信号驱动I0 1.4 IO多路转接 1.5 异步IO 多路转接的作用和意义 二、多路转接IO模型(select) 2.1 接口 2.2 接口当中的事件集合: fd_set 2.2 select使用事件集合(位图&am…

ip公司和soc公司是什么?

IP 公司和 SoC 公司都是半导体行业的重要组成部分,但它们的角色和职责略有不同。IP(Intellectual Property)公司主要提供可重用的知识产权组件,也称为 IP 核或 IP 模块,这些组件可以在设计芯片的过程中被集成到芯片中。…

Git代码冲突-不同分支之间的代码冲突

1、解决思路在团队开发中,提交代码到Git仓库时经常会遇到代码冲突的问题。- 原因:多人对相同的文件进行了编辑,造成代码存在差异化- 解决方案:1. 使用工具或git命令对比不同分支代码的差异化2. 把不同分支中有效代码进行保留&…

[译文] 基于PostGIS3.1 生成格网数据

根据格网进行数据统计与分析是一种常用的方法,相比自然地理边界与行政管理边界而言,使用格网有如下特点:每个格网之间地位相等,没有上下级之分。每个格网的面积都相等。相邻两个格网单元中心点之间距离相等。适用于将数据从“空间…

ThreeJS加载公路GeoJson数据实现流光效果

threejs加载公路geojson数据,跟加载行政区域的原理一样,唯一不同的是geojson格式不一样,路线并不是连贯起来的,按照路段进行的拆分,在加载的时候问题不大,正常解析然后转墨卡托投影,但是在做流光效果时,需要对geojson进行重新组合. 实现效果:

Android:反编译apk踩坑/apktool/dex2jar/JDGUI

需求描述 想要反编译apk文件,搜到了这篇博客:Android APK反编译就这么简单 详解(附图),非常有参考价值~但其中的工具下载链接都已404,而本杂鱼实际操作的过程中也出现了亿点点点点点点的问题,于…

电子技术——反馈对放大器极点的影响

电子技术——反馈对放大器极点的影响 放大器的频率响应和稳定性可以直接由其极点决定。因此我们将深入反馈对放大器极点的影响。 稳定性和极点位置 我们首先讨论稳定性和极点位置的关系。首先我们给出结论,对于任何一个稳定的放大器,其极点都处在 sss …

prometheus + alterManager + 飞书通知,实现服务宕机监控告警;实测可用

架构设计图 最终效果图 项目准备 xml依赖 <!-- 监控相关 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>io.…

Elasticsearch7.8.0版本进阶——段合并

目录一、段的概述1.1、段的概念1.2、段的缺点1.3、如何解决段数量暴增问题二、段合并的流程三、段合并的注意事项一、段的概述 1.1、段的概念 每一 段 本身都是一个倒排索引。 1.2、段的缺点 由于自动刷新流程每秒会创建一个新的段 &#xff0c;这样会导致短时间内的段数量…

interrupt多线程设计模式

1. 两阶段终止-interrupt Two Phase Termination 在一个线程T1中如何“优雅”终止线程T2&#xff1f;这里的【优雅】指的是给T2一个料理后事的机会。 错误思路 ● 使用线程对象的stop()方法停止线程&#xff08;强制杀死&#xff09; —— stop&#xff08;&#xff09;方法…

Linux内核的虚拟内存(MMU、页表结构)

前言&#xff1a;内存是程序得以运行的重要物质基础。如何在有限的内存空间运行较大的应用程序&#xff0c;曾是困扰人们的一个难题。为解决这个问题&#xff0c;人们设计了许多的方案&#xff0c;其中最成功的当属虚拟内存技术。Linux作为一个以通用为目的的现代大型操作系统&…

【git】Idea中git的使用

配置git 创建git仓库 不同颜色代表的含义 红色——未加入版本控制&#xff1b;绿色——已经加入控制暂未提交&#xff1b;蓝色——加入&#xff0c;已提交&#xff0c;有改动&#xff1b;白色——加入&#xff0c;已提交&#xff0c;无改动&#xff1b;灰色——版本控制已忽略文…

8、STM32 FSMC驱动LCD(ILI93xx)

本文使用FSMC驱动LCD显示&#xff0c;关于建议先看之前的7、STM32 FSMC驱动SRAM一文 硬件连接&#xff1a; 一、CubeMx配置FSMC驱动LCD ILI93xx 此章只为快速使用LCD&#xff0c;不涉及原理、指令说明 显示屏驱动文件参考正点探索者 1、CubeMx图形配置 此处的时序还可以调…

GLOG如何清理日志

1 日志清理 其实GLOG很长时间以来都没有日志清理功能。小白对此也很震惊&#xff0c;还特意去查了GLOG的提交记录。代码的提交记录显示&#xff0c;GLOG与日志清理有关的最初代码是2019年11月1日&#xff0c;而这个开源项目的起始时间可以追溯到2008年。也就是说&#xff0c;在…

浅谈liunx init.d 和 rc.local 两种起动方式

浅谈liunx init.d 和 rc.local 两种起动方式 以rabbitmq 举例 &#xff08;一&#xff09;.init.d 方式 开机自动重启设置 1.在/etc/init.d 目录下新建一个 rabbitmq [rootlocalhost init.d]# vi rabbitmq具体脚本如下所示&#xff1a; #!/bin/bash # # chkconfig: 2345 …

【离线数仓-7-数据仓库开发DIM层设计要点-拉链表同步装载脚本】

离线数仓-7-数据仓库开发DIM层设计要点-拉链表同步&装载脚本离线数仓-7-数据仓库开发DIM层设计要点-拉链表同步&装载脚本一、DIM层 维度模型 设计要点6.用户维度表 -拉链表1.用户维度表 前期梳理2.用户维度表 DDL表设计分析3.用户维度表 加载数据分析1.拉链表首日装载数…

RocketMQ 5.x新版本部署优化一览

​ RocketMQ从2022年9月份开始推出了新的5.x大版本。相比于之前的4.x版本&#xff0c;5.x版本向云原生前进了一大步。在增强原因功能的基础上&#xff0c;更是支持多语言客户端&#xff0c;周边生态也进行了补强和完善&#xff0c;明显可以看到离Kafka老大哥又近了很大一步。 …