回声消除(AEC)原理、算法及实战——LMS(Least Mean Square)

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

回声消除是语音通信前端处理中的一种重要技术,产生的原因是:在实时音视频通话中,扬声器播放的声音有再次录进了麦克风去。

在即时通讯应用中,需要进行双方,或是多方的实时语音交流,在要求较高的场合,通常都是采用外置音箱放音,这样必然会产生回音,即一方说话后,通过对方的音箱放音,然后又被对方的Mic采集到回传给自己(如下图所示)。如果不对回音进行处理,将会影响通话质量和用户体验,更严重的还会形成震荡,产生啸叫。

回声消除lms算法,算法,python,开发语言

声学回声是指扬声器播出的声音在接受者听到的同时,也通过多种路径被麦克风拾取到。多路径反射的结果产生了不同延时的回声,包括直接回声和间接回声。

直接回声是指由扬声器播出的声音未经任何反射直接进入麦克风。这种回声的延时最短 ,它同远端说话者的语音能量,扬声器与麦克风之间的距离、角度 ,扬声器的播放音量,麦克风的拾取灵敏度等因素直接相关;

间接回声是指由扬声器播出的声音经过不同的路径 (如房屋或房屋内的任何物体 )的一次或多次反射后进入麦克风所产生的回声的集合。房屋内的任何物体的任何变动都会改变回声的通道。因此,这种回声的特点是多路径的、时变的。

  自适应回声消除的基本思想是估计回音路径的特征参数,产生一个模拟的回音路径,得出模拟回音信号,从接收信号中减去该信号,实现回音抵消。其关键就是得到回声路径的冲击响应,由于回音路径通常是未知的和时变的,所以一般采用自适应滤波器来模拟回音路径。自适应回音消除的显著特点是实时跟踪,实时性强。

 回声消除lms算法,算法,python,开发语言

 图中y(n)代表来自远端的信号 , r(n)是经过回声通道而产生的回声,x(n)是近端的语音信号。D端是近端麦克风,麦克风采集到的房间叠加的回声和近端说话人的语音。对回声消除器来说,接收到的远端信号作为一个参考信号,回声消除器根据参考信号由自适应滤波器产生回声的估计值,将从近端带有回声的语音信号减去,就得到近端传送出去的信号 。在理想且是单讲的情况下,经过回声消除器处理后,残留的回声误差e(n)=r(n)−将为0,从而实现回音消除。若是双讲的情况(近端有人说话,远端也在说话,而且还存在回声的情况下),希望回声误差e(n)对于近端的语音信号。

性能指标:

  • 收敛速度:滤波器的收敛速度越快越好,使正常通话开始后,通话者很快就感觉不到明显的回波存在。
  • 稳态残留回波(稳定性):即当滤波器收敛达到稳态后的回波输出量,实际中总是希望该参数越小越好。
  • 算法复杂度:良好的算法应该在保持收敛速度的同时尽量降低计算复杂度,同时也能减少功耗

ITU-T G.168对各种回音抵消器产品在包括以上两个主要指标在内的各种指标规定了必须达到的标准

AEC技术的基本原理如下图所示:

回声消除lms算法,算法,python,开发语言

回声消除lms算法,算法,python,开发语言

回声消除lms算法,算法,python,开发语言

回声消除lms算法,算法,python,开发语言 回声消除lms算法,算法,python,开发语言

回声消除lms算法,算法,python,开发语言

 程序如下:

import numpy as np
import librosa
import soundfile as sf
import pyroomacoustics as pra
# x 参考信号
# d 麦克风信号
# N 滤波器阶数
# mu 迭代步长
def lms(x, d, N = 4, mu = 0.1):
  nIters = min(len(x),len(d)) - N
  u = np.zeros(N)
  w = np.zeros(N)
  e = np.zeros(nIters)
  for n in range(nIters):
    u[1:] = u[:-1]
    u[0] = x[n]
    e_n = d[n] - np.dot(u, w)
    w = w + mu * e_n * u
    e[n] = e_n
  return e

# x 原始参考信号
# v 理想mic信号 
# 生成模拟的mic信号和参考信号
def creat_sim_sound(x,v):
    rt60_tgt = 0.08
    room_dim = [2, 2, 2]

    e_absorption, max_order = pra.inverse_sabine(rt60_tgt, room_dim)
    room = pra.ShoeBox(room_dim, fs=sr, materials=pra.Material(e_absorption), max_order=max_order)
    room.add_source([1.5, 1.5, 1.5])
    room.add_microphone([0.1, 0.5, 0.1])
    room.compute_rir()
    rir = room.rir[0][0]
    rir = rir[np.argmax(rir):]
    # x 经过房间反射得到 y
    y = np.convolve(x,rir)
    scale = np.sqrt(np.mean(x**2)) /  np.sqrt(np.mean(y**2))
    # y 为经过反射后到达麦克风的声音
    y = y*scale

    L = max(len(y),len(v))
    y = np.pad(y,[0,L-len(y)]) # 补零,使其信号长度一致
    v = np.pad(v,[L-len(v),0]) # 补零,使其信号长度一致
    x = np.pad(x,[0,L-len(x)]) # 补零,使其信号长度一致
    d = v + y
    return x,d

if __name__ == "__main__":
    x_org, sr  = librosa.load('female.wav',sr=8000)
    v_org, sr  = librosa.load('male.wav',sr=8000)  # 采样率为8000,不加sr的话默认是22kHz

    x,d = creat_sim_sound(x_org,v_org)

    e =  lms(x, d,N=256,mu=0.1)
    sf.write('x.wav', x, sr, subtype='PCM_16')
    sf.write('d.wav', d, sr, subtype='PCM_16')
    sf.write('lms.wav', e, sr, subtype='PCM_16')

参考资料:

https://www.bilibili.com/video/BV1LP411j7yy/?spm_id_from=333.788&vd_source=77c874a500ef21df351103560dada737

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

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

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

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

相关文章

  • [论文笔记]Root Mean Square Layer Normalization

    今天带来论文Root Mean Square Layer Normalization的笔记,论文题目是均方根层归一化。 本篇工作提出了RMSNorm,认为可以省略重新居中步骤。 层归一化对Transformer等模型非常重要,它可以帮助稳定训练并提升模型收敛性,因为它能够处理输入和权重矩阵的重新居中(re-centering)和重新缩

    2024年04月17日
    浏览(34)
  • Audio-音频降噪、回声消除处理

            对音频数据进行处理时经常会对mic阵列的选择有很多特殊要求,当原始录取的音频阵列排布有问题时,会进行一些软件的处理,使阵列排布达到一定的要求。          对于4ch音频数据而言,麦克阵列排列要求为mic1、mic2、ref1、ref2,但是通过tinycap采集的原始音频数

    2023年04月08日
    浏览(37)
  • 自适应波束形成算法及MATLAB仿真算法(RLS和LMS)

    自适应研究的重点一直都是自适应算法,经典的自适应波束形成算法可分为闭环算法(反馈控制算法)和开环算法(也称直接求解方法)。 一般而言, 闭环算法比开环算法要简单,实现方便,但其收敛速率受到系统稳定性要求的限制 。闭环算法包括最小均方(LMS)算法、差

    2024年02月05日
    浏览(48)
  • 传统语音增强——最小均方(LMS)自适应滤波算法

    一、语音降噪的意义 语音降噪主要研究如何利用信号处理技术消除信号中的强噪声干扰,从而提高输出信噪比以提取出有用信号的技术。消除信号中噪声污染的通常方法是让受污染的信号通过一个能抑制噪声而让信号相对不变的滤波器,此滤波器从信号不可检测的噪声场中取

    2024年02月03日
    浏览(55)
  • Matlab自适应滤波算法 LMS小白通俗易懂版

    在学习自适应算法的过程中,入门阶段,学习了LMS算法、NLMS算法,并用Matlab对算法进行了复现。 最小均方(LMS)是一种搜索算法,它通过对目标函数进行适当修改,以便简化梯度向量的计算,由于其计算简单,LMS算法及与之相关的其他算法,已经广泛应用于自适应滤波的各种的

    2024年02月02日
    浏览(49)
  • 基于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)
  • 偏最小二乘(Partial Least Squares,PLS)原理及模型建立

    随着对数据驱动的工业检测与诊断方法的逐步深入,过程监测的多元统计需要总结的东西越来越多,那么今天来整理一下。 内容较多,理论较复杂,建议细品,你品!最好推一遍~ It’s time to conclude PLS!!! PCA和偏最小二乘(PLS)是从 数据中描述正常情况 的首选方法。 天气

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

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

    2024年02月16日
    浏览(48)
  • 张伟伟-层次1 Mean_shift聚类算法和其他的聚类算法

    pycharm使用的简单教程 张伟伟,男,西安工程大学电子信息学院,2019级硕士研究生,张宏伟人工智能课题组。 研究方向:机器视觉与人工智能。 电子邮件:zhangweiweicpp@163.com 个人CSDN主页:欢迎关注和相互交流学习. 代码的百度网盘链接:https://pan.baidu.com/s/1neOlGt-3240B9tjhJVOy0A

    2024年02月04日
    浏览(69)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包