博客地址:凌逆战(转载请注明出处)

论文地址:Adaptive Algorithms For Acoustic Echo Cancellation In Speech Processing


  自适应滤波是数字信号处理的核心技术之一,在科学和工业上有着广泛的应用领域。自适应滤波技术应用广泛,包括回波抵消、自适应均衡、自适应噪声抵消和自适应波束形成。回声对消是当今通信系统中普遍存在的现象。声回波引起的信号干扰会分散用户的注意力,降低通信质量。本文重点介绍了LMS和NLMS算法的使用,以减少这种不必要的回声,从而提高通信质量

关键词:自适应滤波器,自适应算法,回声消除

1  引言

  当音频信号在真实环境中产生混响时,就会产生声学回声,从而导致原始信号加上信号[1]的衰减、延时图像。本文将重点研究通信系统中声学回波的产生。

  自适应滤波器是一种动态滤波器,它不断地改变其特性以获得最优的输出。自适应滤波算法通过改变参数使期望输出d (n)与实际输出y (n)之间的差值最小化。该函数称为自适应算法的代价函数(loss)。图1显示了自适应回声抵消系统的框图。其中,滤波器H(n)表示声环境的脉冲响应,W(n)表示用来抵消回波信号的自适应滤波器。自适应滤波器的目标是使输出的y(n)与期望的d(n)(在回声环境中混响的信号)相等。在每次迭代中,误差信号e(n)=d (n)-y (n)被反馈回滤波器,滤波器的特性也随之改变。

自适应回声消除系统

  自适应滤波器的目标是计算期望信号与自适应滤波器输出之间的差值e(n)。该误差信号反馈到自适应滤波器,并通过算法改变其系数,以最小化该差值的函数,即代价函数。在声回波消除的情况下,自适应滤波器的最优输出与不需要的回波信号等值。当自适应滤波器输出等于期望信号时,误差信号为零。在这种情况下,回显信号将被完全取消,远用户将不会听到他们的任何原始语音返回给他们。

2 最小均方(LMS)算法

  最小均方(LMS)算法是由Widrow和Hoff在1959年通过对模式识别的研究首次提出的。由此成为自适应滤波中应用最广泛的算法之一。LMS算法是一种基于随机梯度的自适应滤波算法,它利用滤波器权重的梯度来收敛到最优的维纳解[2-4]。由于其计算简单而广为人知并被广泛使用。正是这种简单性使它成为判断所有其他自适应滤波算法的基准。

  随着LMS算法的每次迭代,自适应滤波器的滤波抽头(tap)权值按照如下公式进行更新。

$$公式1:w(n+1)=w(n)+2\mu e(n)x(n)$$

  这里x(n)是延时输入值的输入向量,$x(n)=[x_1(n)x_2(n)...x_N(n)]^T=[x(n)x(n-1)...x(n-N+1)]^T$。向量$w(n)=[w_0(n)w_1(n)w_2(n)...w_{N-1}(n)]^T$代表自适应FIR滤波器抽头(tap)权向量在时刻n的系数。参数μ被称为步长参数和小正的常数。此步长参数控制更新因子的影响。μ必须选择一个合适的值LMS算法的性能,如果该值太小自适应滤波器的收敛时间会太长;如果μ太大自适应滤波器变得不稳定,导致其输出发散[5 - 8]。

2.1 LMS算法的实现

LMS算法的每次迭代都需要三个不同的步骤,顺序如下:

1. FIR滤波器的输出y(n)用公式2计算。

$$公式2:y(n)=\sum_{i=0}^{N-1}w(n)x(n-1)=w^T(n)x(n)$$

2. 误差估计的值按公式3计算。

$$公式3:e(n)=d(n)-y(n)$$

3.更新FIR向量的抽头tap权值,为下一次迭代做准备,如公式4所示。

$$公式4:w(n+1)=w(n)+2\mu e(n)x(n)$$

  LMS算法在自适应滤波中得到广泛应用的主要原因是其计算简单,比其他常用的自适应算法更易于实现。LMS算法每次迭代需要2N加法和2N + 1次乘法(N用于计算输出y(N)),另一个用于通过向量乘法计算标量[9]。

clear;
clc;
snr=20;     % 信噪比
order=8;    % 自适应滤波器的阶数为8
% Hn是滤波器权重
Hn =[0.8783 -0.5806 0.6537 -0.3223 0.6577 -0.0582 0.2895 -0.2710 0.1278 ...     % ...表示换行的意思-0.1508 0.0238 -0.1814 0.2519 -0.0396 0.0423 -0.0152 0.1664 -0.0245 ...0.1463 -0.0770 0.1304 -0.0148 0.0054 -0.0381 0.0374 -0.0329 0.0313 ...-0.0253 0.0552 -0.0369 0.0479 -0.0073 0.0305 -0.0138 0.0152 -0.0012 ...0.0154 -0.0092 0.0177 -0.0161 0.0070 -0.0042 0.0051 -0.0131 0.0059 ...-0.0041 0.0077 -0.0034 0.0074 -0.0014 0.0025 -0.0056 0.0028 -0.0005 ...0.0033 -0.0000 0.0022 -0.0032 0.0012 -0.0020 0.0017 -0.0022 0.0004 -0.0011 0 0];
Hn=Hn(1:order);
mu=0.5;             % mu表示步长
N=1000;             % 横坐标1000个采样点
Loop=150;           % 150次循环
% 不同步长的初始化误差
EE_LMS = zeros(N,1);
EE_NLMS=zeros(N,1);
for nn=1:Loop       % epoch=150win_LMS = zeros(1,order);   % 权重初始化werror_LMS=zeros(1,N)';      % 初始化误差% 均匀分布的语音数据输入r=sign(rand(N,1)-0.5);          % shape=(1000,1)的(0,1)均匀分布-0.5,sign(n)>0=1;<0=-1% 输出:输入卷积Hn得到 输出output=conv(r,Hn);              % r卷积Hn,output长度=length(u)+length(v)-1output=awgn(output,snr,'measured');     % 真实输出=将白高斯噪声添加到信号中% N=1000,每个采样点for i=order:N         % i=8:1000input=r(i:-1:i-order+1);  % 每次迭代取8个数据进行处理e_LMS = output(i)-win_LMS*input;mu=0.02;      % 步长win_LMS = win_LMS+2*mu*e_LMS*input';error_LMS(i)=error_LMS(i)+e_LMS^2;end% 把总误差相加EE_LMS = EE_LMS+error_LMS;end
% 对总误差求平均值
error_LMS = EE_LMS/Loop;figure;
error1_LMS=10*log10(error_LMS(order:N));
plot(error1_LMS,'b');  % 蓝色
axis tight;         % 使用紧凑的坐标轴
legend('LMS算法');       % 图例
title('LMS算法误差曲线');  % 图标题
xlabel('样本');                     % x轴标签
ylabel('误差/dB');                  % y轴标签
grid on;                            % 网格线

3 归一化最小均方(NLMS)算法

  LMS算法的主要缺点之一是每次迭代都有一个固定的步长参数。这需要在开始自适应滤波操作之前了解输入信号的统计信息。实际上,这是很难实现的。即使我们假设自适应回声抵消系统的唯一输入信号是语音,但仍有许多因素如信号输入功率和振幅会影响其性能[10-12]。

  归一化最小均方算法(NLMS)是LMS算法的扩展,LMS算法通过计算最大步长值来绕过这个问题。步长值的计算公式如下

$$Step\ size = \frac{1}{dot\ product(input\ vector,\ input\ vector)}$$

这个步长与输入向量x(n)的系数的瞬时值的总期望能量的倒数成正比。输入样本的期望能量之和也等于输入向量与自身的点积,以及输入向量自相关矩阵的迹R[13-15]。

$$公式5:tr[R]=\sum_{i=0}^{N-1}E[x^2(n-i)]=E[\sum_{i=0}^{N-1}x^2(n-i)]$$

NLMS算法的递归公式如式6所示

$$公式6:w(n+1)=w(n)+\frac{1}{x^T(n)x(n)}e(n)x(n)$$

3.1 NLMS算法的实现

  NLMS算法已在Matlab中实现。由于步长参数是根据当前的输入值来选择的,因此NLMS算法在未知信号下具有更大的稳定性。该算法具有良好的收敛速度和相对简单的计算能力,是实时自适应回波抵消系统[16]的理想算法

  由于NLMS是标准LMS算法的扩展,因此NLMS算法的实际实现与LMS算法非常相似。NLMS算法的每次迭代都需要按照以下顺序执行这些步骤。

1. 计算了自适应滤波器的输出

$$公式7:y(n)=\sum_{i=0}^{N-1}w(n)x(n-i)=w^T(n)x(n)$$

2. 误差信号等于期望信号和滤波器输出之间的差值。

$$公式8:e(n)=d(n)-y(n)$$

3.计算了输入向量的步长值。

$$公式9:\mu(n)=\frac{1}{x^T(n)x(n)}$$

4. 滤波器抽头权重更新,为下一次迭代做准备。

$$公式10:w(n+1)=w(n)+\mu(n)e(n)x(n)$$

NLMS算法的每次迭代都需要3N+1次乘法,仅比标准LMS算法多N次。考虑到所获得的稳定性和回波衰减增益,这是一个可接受的增加。

clear;
clc;
snr=20;     % 信噪比
order=8;    % 自适应滤波器的阶数为8
Hn =[0.8783 -0.5806 0.6537 -0.3223 0.6577 -0.0582 0.2895 -0.2710 0.1278 ...     % ...表示换行的意思-0.1508 0.0238 -0.1814 0.2519 -0.0396 0.0423 -0.0152 0.1664 -0.0245 ...0.1463 -0.0770 0.1304 -0.0148 0.0054 -0.0381 0.0374 -0.0329 0.0313 ...-0.0253 0.0552 -0.0369 0.0479 -0.0073 0.0305 -0.0138 0.0152 -0.0012 ...0.0154 -0.0092 0.0177 -0.0161 0.0070 -0.0042 0.0051 -0.0131 0.0059 ...-0.0041 0.0077 -0.0034 0.0074 -0.0014 0.0025 -0.0056 0.0028 -0.0005 ...0.0033 -0.0000 0.0022 -0.0032 0.0012 -0.0020 0.0017 -0.0022 0.0004 -0.0011 0 0];
Hn=Hn(1:order);
mu=0.5;             % mu表示步长
N=1000;             % 横坐标1000个采样点
Loop=150;           % 150次循环
EE_NLMS=zeros(N,1); % 不同步长的初始化误差
for nn=1:Loop       % epoch=150% 权重初始化wwin_NLMS=zeros(1,order);         % NLMS四种步长测试,四个权重——1error_NLMS=zeros(1,N)';     % 初始化误差% 均匀分布的输入值r=sign(rand(N,1)-0.5);          % shape=(1000,1)的(0,1)均匀分布-0.5,sign(n)>0=1;<0=-1% 输出:输入卷积Hn得到 输出output=conv(r,Hn);              % r卷积Hn,output长度=length(u)+length(v)-1output=awgn(output,snr,'measured');     % 将白高斯噪声添加到信号中% N=1000,每个采样点for i=order:N         % i=8:1000input=r(i:-1:i-order+1);  % 每次迭代取8个数据进行处理e_NLMS = output(i)-win_NLMS*input;win_NLMS=win_NLMS+e_NLMS*input'/(input'*input);   % NLMS更新权重error_NLMS(i)=error_NLMS(i)+e_NLMS^2;endEE_NLMS=EE_NLMS+error_NLMS;     % 把总误差相加
end
% 对总误差求平均值
error_NLMS=EE_NLMS/Loop;figure;
error_NLMS=10*log10(error_NLMS(order:N));
plot(error_NLMS,'r');       % 红色
axis tight;                 % 使用紧凑的坐标轴
legend('NLMS算法');           % 图例
title('NLMS算法误差曲线');     % 图标题
xlabel('样本');                     % x轴标签
ylabel('误差/dB');                  % y轴标签
grid on;                            % 网格线

4 LMS算法的结果

  利用Matlab对LMS算法进行了仿真。图2显示的是通过麦克风从计算机系统收集到的输入语音信号。图3显示了从输入信号派生出的所需回波信号。图4显示了自适应滤波器的输出,它将减少输入信号的回波信号。图5显示了由滤波器输出信号计算出的均方误差信号。图6是由回波信号对误差信号的分割得到的衰减。

  自适应滤波器为1025阶FIR滤波器。步长设置为0.02。MSE表明,随着算法的发展,代价函数的平均值逐渐减小。

5 NLMS算法的结果

  用Matlab对NLMS算法进行了仿真。图7显示了输入信号。图8显示了所需的信号。图9显示了自适应滤波器输出。图10显示了均方误差。图11显示了衰减。

  自适应滤波器为1025阶FIR滤波器。步长设置为0.1。

NLMS算法在均方误差和平均衰减方面优于LMS算法,其性能总结如表1所示。

6 结论

  由于其简单性,LMS算法是最流行的自适应算法。然而,LMS算法存在收敛速度慢和数据依赖的问题。

  NLMS算法是LMS算法的一个同样简单但更健壮的变体,它在简单性和性能之间表现出比LMS算法更好的平衡。由于其良好的性能,NLMS在实时应用中得到了广泛的应用。

7 参考

文章翻译自论文《2011_adaptive algorithms for acoustic echo cancellation in speech processing》

[1]. Homana, I.; Topa, M.D.; Kirei, B.S.; “Echo cancelling using adaptive algorithms”, Design and Technology of Electronics Packages, (SIITME) 15th International Symposium., pp. 317-321, Sept.2009.

[2]. Paleologu, C.; Benesty, J.; Grant, S.L.; Osterwise, C.; “Variable step-size NLMS algorithms for echo cancellation” 2009 Conference Record of the forty-third Asilomar Conference on Signals, Systems and Computers., pp. 633-637, Nov 2009.

[3]. Soria, E.; Calpe, J.; Chambers, J.; Martinez, M.; Camps, G.; Guerrero, J.D.M.; “A novel approach to introducing adaptive filters based on the LMS algorithm and its variants”, IEEE Transactions, vol. 47, pp. 127-133, Feb 2008.

[4]. Tandon, A.; Ahmad, M.O.; Swamy, M.N.S.; “An efficient, low-complexity, normalized LMS algorithm for echo cancellation”, IEEE workshop on Circuits and Systems, 2004. NEWCAS 2004, pp. 161-164, June 2004.

[5]. Eneman, K.; Moonen, M.; “Iterated partitioned block frequency-domain adaptive filtering for acoustic echo cancellation,” IEEE Transactions on Speech and Audio Processing, vol. 11, pp. 143-158, March 2003.

[6]. Krishna, E.H.; Raghuram, M.; Madhav, K.V; Reddy, K.A; “Acoustic echo cancellation using a computationally efficient transform domain LMS adaptive filter,” 2010 10th International Conference on Information sciences signal processing and their applications (ISSPA), pp. 409-412, May 2010.

[7]. Lee, K.A.; Gan,W.S; “Improving convergence of the NLMS algorithm using constrained subband updates,” Signal Processing Letters IEEE, vol. 11, pp. 736-739, Sept. 2004.

[8]. S.C. Douglas, “Adaptive Filters Employing Partial Updates,” IEEE Trans.Circuits SYS.II, vol. 44, pp. 209-216, Mar 1997.

[9]. D.L. Duttweiler, “Proportionate Normalized Least Mean Square Adaptation in Echo Cancellers,” IEEE Trans. Speech Audio Processing, vol. 8, pp. 508-518, Sept. 2000.

[10]. E. Soria, J. Calpe, J. Guerrero, M. Martínez, and J. Espí, “An easy demonstration of the optimum value of the adaptation constant in the LMS algorithm,” IEEE Trans. Educ., vol. 41, pp. 83, Feb. 1998.

[11]. D. Morgan and S. Kratzer, “On a class of computationally efficient rapidly converging, generalized NLMS algorithms,” IEEE Signal Processing Lett., vol. 3, pp. 245–247, Aug. 1996.

[12]. G. Egelmeers, P. Sommen, and J. de Boer, “Realization of an acoustic echo canceller on a single DSP,” in Proc. Eur. Signal Processing Conf. (EUSIPCO96), Trieste, Italy, pp. 33–36, Sept. 1996.

[13]. J. Shynk, “Frequency-domain and multirate adaptive filtering,” IEEE Signal Processing Mag., vol. 9, pp. 15– 37, Jan. 1992.

[14]. Ahmed I. Sulyman and Azzedine Zerguine, "Echo Cancellation Using a Variable Step-Size NLMS Algorithm", Electrical and Computer Engineering Department Queen's University.

[15]. D. L. Duttweiler, “A twelve-channel digital echo canceller,” IEEE Trans. Commun., vol. 26, no. 5, pp. 647–653, May 1978.

[16]. J. Benesty, H. Rey, L. Rey Vega, and S. Tressens, “A nonparametric VSS NLMS algorithm,” IEEE Signal Process. Lett., vol. 13, pp. 581–584, Oct. 2006.

论文:回声消除中的LMS和NLMS算法与MATLAB实现相关推荐

  1. 回声消除中的LMS和NLMS算法与MATLAB实现

    自适应滤波是数字信号处理的核心技术之一,在科学和工业上有着广泛的应用领域.自适应滤波技术应用广泛,包括回波抵消.自适应均衡.自适应噪声抵消和自适应波束形成.回声对消是当今通信系统中普遍存在的现象.声回 ...

  2. 回声消除中的自适应滤波算法综述

    作者:凌逆战 博客园地址:https://www.cnblogs.com/LXP-Never/p/11773190.html 自适应回声消除原理 声学回声是指扬声器播出的声音在接受者听到的同时,也通过 ...

  3. 回声消除(AEC)原理、算法及实战——频域块LMS自适应滤波算法(FDAF)

    块LMS自适应滤波算法中的线性卷积和线性相关均可以采用快速傅里叶变换(FFT)来实现.因此,块LMS自适应滤波算法的有效实现方法实际上是利用FFT算法在频域上完成滤波器系数的自适应.这样实现的块LMS ...

  4. 论文翻译:双端通话频域回声消除中学习速率的调整

    <On Adjusting the Learning Rate in Frequency Domain Echo Cancellation With Double-Talk> 文章目录 & ...

  5. 浅谈回声消除中的回声抑制(echo suppress)

    翻看pjproject中的源码,发现它实现了一个回声消除的例子aectest.c,它主要依赖三种算法(1=speex, 2=echo suppress, 3=WebRtc),这是可选的,实际使用时选择 ...

  6. 【5G】5G通信网络中资源分配和负载均衡算法的matlab仿真

    1.软件版本 matlab2017b 2.算法描述 首先,5G模型的基本结构如下所示: 超密集网络是5G通信系统中的重要技术,是现在通信界的研究热点.系统中的每个小小区都是正交频分多址系统,共有TV个 ...

  7. LMS自适应滤波算法的 matlab实现

    算法思路 1LMS算法实现步骤: 1).令起始时刻 i=0自适应滤波器的系数矢量W(0)为任意值: 2).根据输入信号矢量X(i) ,利用期望信号d(i) 和滤波器的输出信号 y(i)计算误差信号e( ...

  8. 声学回声消除(Acoustic Echo Cancellation)原理与实现

    Acoustic Echo Cancellation 回声分类 电路回声 声学回声 AEC的基本原理 回声消除常用方法 自适应滤波器的基本原理 回声消除常用算法 LSM算法 LMS算法实现 NLMS算 ...

  9. 详解低延时高音质:回声消除与降噪篇

    在实时音频互动场景中,除了我们上一篇讲到的编解码会影响音质与体验,在端上,降噪.回声消除.自动增益模块同样起着重要作用.在本篇内容中我们将主要围绕回声消除和降噪模块,讲讲实时互动场景下的技术挑战,以及 ...

最新文章

  1. c语言笔试面试大全,C语言笔试面试题大全.doc
  2. 5图片展示_做跨境电商想拍出爆款产品图片,我只用这五招
  3. OpenGL渲染水water
  4. OS--进程间通信详解(一)
  5. joint和join_MySQL的JOIN(一):用法
  6. 电气装置安装工程接地装置施工及验收规范_(册说明)电气设备安装工程
  7. 喜马拉雅下载成mp3方法
  8. AI 写代码来了 - github 的 AI 写代码插件 copilot 发布
  9. 树莓派4B IDE配置
  10. python爬取12306火车票信息_python利用selenium+requests+beautifulsoup爬取12306火车票信息...
  11. 1148 数字字符出现频率
  12. 推荐6款高效率PDF编辑工具
  13. RK3288 android添加HAL 层导致无法进入主界面原因分析,重复打印 camsys_marvin(deaa1510) is closed
  14. python的io模块
  15. tomcat部署多个项目,tomcat部署java,tomcat部署前端(亲测可用)
  16. 【区块链与密码学】第9-8讲:群签名在区块链中的应用 II
  17. 国庆荐书 | 2020年3季度我读过的十本好书!
  18. 辟谣、催债、倒闭.....2018年后,将再无创业黄金期!
  19. Vue来回切换几次页面后,echart/页面越来越卡
  20. MyIE2变Maxthon就来了(转)

热门文章

  1. bugku-PWN-瑞士军刀解析过程
  2. JavaScript画漂亮的心形图案
  3. 拆解报告:爱否开物1A2C 65W PD氮化镓充电器智融SW3516十分表现抢眼
  4. OutLook中的live.cn(吐血配置)
  5. ieee 802.1
  6. vue create xxx创建项目过程中报错的解决方法
  7. 逐步回归matlab函数,逐步回归matlab程序
  8. MariaDB GRANT ALL PRIVILEGES Access denied for user
  9. 2021宜宾叙州区二中高考成绩查询,宜宾叙州第二中学2021年录取分数线
  10. [012量化交易] python 最高价 最低价