回声消除原理

2024-05-07 23:38
文章标签 原理 消除 回声

本文主要是介绍回声消除原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

从通讯回音产生的原因看,可以分为声学回音( Acoustic Echo )和线路回音( Line Echo ),相应的回声消除技术就叫声学回声消除( Acoustic Echo Cancellation AEC )和线路回声消除( Line Echo Cancellation, LEC )。声学回音是由于在免提或者会议应用中,扬声器的声音多次反馈到麦克风引起的(比较好理解);线路回音是由于物理电子线路的二四线匹配耦合引起的(比较难理解)。
回音的产生主要有两种原因:
1.  由于空间声学反射产生的声学回音(见下图):

回声消除原理

图中的男子说话,语音信号( speech1 )传到女士所在的房间,由于空间的反射,形成回音 speech1(Echo) 重新从麦克风输入,同时叠加了女士的语音信号( speech2 )。此时男子将会听到女士的声音叠加了自己的声音,影响了正常的通话质量。此 时在女士所在房间应用回音抵消模块,可以抵消掉男子的回音,让男子只听到女士的声音。
2.  由于 2-4 线转换引入的线路回音(见下图):

回声消除原理

ADSL Modem 和交换机上都存在 2-4 线转换的电路,由于电路存在不匹配的问题,会有一部分的信号被反馈回来,形成了回音。如果在交换机侧不加回音抵消功能,打电话的人就会自己听到自己的声音。
不管产生的原因如何,对语音通讯终端或者语音中继交换机需要做的事情都一样:在发送时,把不需要的回音从语音流中间去掉。
试想一下,对一个至少混合了两个声音的语音流,要把它们分开,然后去掉其中一个,难度何其之大。就像一瓶蓝墨水和一瓶红墨水倒在一起,然后需要把红墨水提取出来,这恐怕不可能了。所以回声消除被认为是神秘和难以理解的技术也就不奇怪了。诚然,如果仅仅单独拿来一段混合了回音的语音信号,要去掉回音也是不可能的(就算是最先进的盲信号分离技术也做不到)。但是,实际上,除了这个混合信号,我们是可以得到产生回音的原始信号的,虽然不同于回音信号。
我们看下面的 AEC 声学回声消除框图(本图片转载)。


其中,我们可以得到两个信号:一个是蓝色和红色混合的信号 1 ,也就是实际需要发送的 speech 和实际不需要的 echo 混合而成的语音流;另一个就是虚线的信号 2 ,也就是原始的引起回音的语音。那大家会说,哦,原来回声消除这么简单,直接从混合信号 1 里面把把这个虚线的 2 减掉不就行了?请注意,拿到的这个虚线信号 2 和回音 echo 是有差异的,直接相减会使语音面目全非。我们把混合信号 1 叫做近端信号 ne ,虚线信号 2 叫做远端参考信号 fe ,如果没有 fe 这个信号,回声消除就是不可能完成的任务,就像“巧妇难为无米之炊”。
虽然参考信号 fe echo 不完全一样,存在差异,但是二者是高度相关的,这也是 echo 称之为回音的原因。至少,回音的语义和参考信号是一样的,也还听得懂,但是如果你说一句,马上又听到自己的话回来一句,那是比较难受的。既然 fe echo 高度相关, echo 又是 fe 引起的,我们可以把 echo 表示为 fe 的数学函数: echo=F fe )。函数 F 被称之为回音路径。在声学回声消除里面,函数 F 表示声音在墙壁,天花板等表面多次反射的物理过程;在线路回声消除里面,函数 F 表示电子线路的二四线匹配耦合过程。很显然,我们下面要做的工作就是求解函数 F 。得到函数 F 就可以从 fe 计算得到 echo ,然后从混合信号 1 里面减掉 echo 就实现了回声消除。

 

 

尽管回声消除是非常复杂的技术,但我们可以简单的描述这种处理方法:

   1 、房间 A 的音频会议系统接收到房间 B 中的声音
   2 、声音被采样,这一采样被称为回声消除参考
   3 、随后声音被送到房间 A 的音箱和声学回声消除器中
   4 、房间 B 的声音和房间 A 的声音一起被房间 A 的话筒拾取
   5 、声音被送到声学回声消除器中,与原始的采样进行比较,移除房间 B 的声音

求解回音路径函数 F 的过程恐怕就是比较难以表达的数学公式了。鉴于通俗表达数学公式的难度比发现数学公式还难,笔者就不费力解释了。 下面这段表达了利用自适应滤波器原理求解 函数 F 的过程。

 

自适应滤波器

    自适应滤波器是以输入和输出信号的统计特性的估计为依据,采取特定算法自动地调整滤波器系数,使其达到最佳滤波特性的一种算法或装置。自适应滤波器可以是连续域的或是离散域的。离散域自适应滤波器由一组抽头延迟线、可变加权系数和自动调整系数的机构组成。附图表示一个离散域自适应滤波器用于模拟未知离散系统的信号流图。自适应滤波器对输入信号序列x(n)的每一个样值,按特定的算法,更新、调整加权系数,使输出信号序列y(n)与期望输出信号序列d(n)相比较的均方误差为最小,即输出信号序列y(n)逼近期望信号序列d(n)

回声消除原理

 

以最小均方误差为准则设计的自适应滤波器的系数可以由维纳-霍甫夫方程解得。
B. 维德罗提出的一种方法,能实时求解自适应滤波器系数,其结果接近维纳-霍甫夫方程近似解。这种算法称为最小均方算法或简称  LMS 法。这一算法利用最陡下降法,由均方误差的梯度估计从现时刻滤波器系数向量迭代计算下一个时刻的系数向量    

式中 ks 为一负数,它的取值决定算法的收敛性,  V ε 2 (n) 】为均方误差梯度估计,

自适应滤波器应用于通信领域的自动均衡、回声消除、天线阵波束形成,以及其他有关领域信号处理的参数识别、噪声消除、谱估计等方面。对于不同的应用,只是所加输入信号和期望信号不同,基本原理则是相同的。
  上面这段话表明,需要求解的回音路径函数F就是一个自适应滤波器W(n)收敛的过程。所加输入信号x(n)fe,期望信号是echo,自适应滤波器收敛后的W(n)就是回音路径函数F 收敛之后,当实际回音发生,我们把fe通过函数W(n),就可以得到一个很准确的echo,把混合信号直接减去echo,得到实际需要发送的语音speech,完成回声消除任务。
值得注意的两点:
1、  自适应滤波器收敛阶段,期望信号是完全的 echo ,不能混杂有 speech 。因为 speech fe 是没有关系的,会扰乱 W (n) 的收敛过程。也就是说要求回声消除算法开始运转后收敛要非常快,最好对方还来不及说话,你一说就收敛好了;收敛好之后,如果对方开始说话,也就是有 speech 混合过来,这个 W (n) 系数就不要变化了,需要稳定下来。
2、  回音路径可能是变化的,一旦出现变化,回声消除算法要能判断出来,因为自适应滤波器学习要重新开始,也就是 W (n) 需要一个新的收敛过程,以逼近新的回音路径函数 F
基本上来说,上面这两点是两难的,一个需要自适应滤波器收敛后保持系数稳定,以保证不受 speech 说话干扰,另一个需要自适应滤波器随时保持更新状态,以保证能够追踪变化的 回音路径。这样一来,仅从数学算法层面,回声消除已经是难上加难!简单地说,回声消除自适应滤波器的设计具有两个互相矛盾的特性,也就是快速收敛和高度的稳定性,如何同时实现这两项特性,正是设计上的主要挑战。

这篇关于回声消除原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968723

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja