自适应滤波是数字信号处理的核心技术之一,在科学和工业上有着广泛的应用领域。自适应滤波技术应用广泛,包括回波抵消、自适应均衡、自适应噪声抵消和自适应波束形成。回声对消是当今通信系统中普遍存在的现象。声回波引起的信号干扰会分散用户的注意力,降低通信质量。本文重点介绍了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=; % 信噪比
order=; % 自适应滤波器的阶数为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 ];
Hn=Hn(:order);
mu=0.5; % mu表示步长
N=; % 横坐标1000个采样点
Loop=; % 150次循环
EE_NLMS=zeros(N,); % 不同步长的初始化误差
for nn=:Loop % epoch=
% 权重初始化w
win_NLMS=zeros(,order); % NLMS四种步长测试,四个权重——
error_NLMS=zeros(,N)'; % 初始化误差
% 均匀分布的输入值
r=sign(rand(N,)-0.5); % shape=(,)的(,)均匀分布-0.5,sign(n)>=;<=-
% 输出:输入卷积Hn得到 输出
output=conv(r,Hn); % r卷积Hn,output长度=length(u)+length(v)-
output=awgn(output,snr,'measured'); % 将白高斯噪声添加到信号中 % N=,每个采样点
for i=order:N % i=:
input=r(i:-:i-order+); % 每次迭代取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^;
end EE_NLMS=EE_NLMS+error_NLMS; % 把总误差相加
end
% 对总误差求平均值
error_NLMS=EE_NLMS/Loop; figure;
error_NLMS=*log10(error_NLMS(order:N));
plot(error_NLMS,'r'); % 红色
axis tight; % 使用紧凑的坐标轴
legend('NLMS算法'); % 图例
title('NLMS算法误差曲线'); % 图标题
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)]\\ \quad\quad =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=; % 信噪比
order=; % 自适应滤波器的阶数为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 ];
Hn=Hn(:order);
mu=0.5; % mu表示步长
N=; % 横坐标1000个采样点
Loop=; % 150次循环
% 不同步长的初始化误差
EE_LMS = zeros(N,);
EE_NLMS=zeros(N,);
for nn=:Loop % epoch=
win_LMS = zeros(,order); % 权重初始化w
error_LMS=zeros(,N)'; % 初始化误差
% 均匀分布的语音数据输入
r=sign(rand(N,)-0.5); % shape=(,)的(,)均匀分布-0.5,sign(n)>=;<=-
% 输出:输入卷积Hn得到 输出
output=conv(r,Hn); % r卷积Hn,output长度=length(u)+length(v)-
output=awgn(output,snr,'measured'); % 真实输出=将白高斯噪声添加到信号中 % N=,每个采样点
for i=order:N % i=:
input=r(i:-:i-order+); % 每次迭代取8个数据进行处理
e_LMS = output(i)-win_LMS*input; mu=0.02; % 步长
win_LMS = win_LMS+*mu*e_LMS*input';
error_LMS(i)=error_LMS(i)+e_LMS^;
end
% 把总误差相加
EE_LMS = EE_LMS+error_LMS; end
% 对总误差求平均值
error_LMS = EE_LMS/Loop; figure;
error1_LMS=*log10(error_LMS(order:N));
plot(error1_LMS,'b.'); % 蓝色
axis tight; % 使用紧凑的坐标轴
legend('LMS算法'); % 图例
title('LMS算法误差曲线'); % 图标题
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最优步长理论分析与Speex回声消除可能的改进想法

    一.回声消除算法模型 先来分析下自适应回声消除的主要组成部分,大体上可以把回声消除模型分为两个部分 横向滤波器结构 滤波器系数自适应与步长控制 横向滤波器用脉冲响应w(n)[有的地方也称为回声路径]与 ...

  2. webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错:

    webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错. 原因是: 局部变量ip跟全局变量冲突的问题,可以将局部变量重新命名一下,就可以通过编译了. aec_rdft.c修改以后文件代 ...

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

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

  4. Speex回声消除代码分析

    先说明下,这里的代码流程是修改过的Speex流程,但与Speex代码差异不大,应该不影响阅读.   (1)用RemoveDCoffset函数进行去直流 (2)远端信号预加重后放入x[i+frame_s ...

  5. Speex回声消除原理深度解析

    这里假设读者具有自适应滤波器的基础知识.Speex的AEC是以NLMS为基础,用MDF频域实现,最终推导出最优步长估计:残余回声与误差之比.最优步长等于残余回声方差与误差信号方差之比,这个结论可以记下 ...

  6. 回声消除(AEC)原理

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

  7. Flex Flash Player回声消除的最佳方法

    Adobe Flash Player 已经成为音频和视频播放的非常流行的工具.实际上,目前大多数因特网视频均使用 Flash Player观看. Flash Player 通过将许多技术进行组合可以提 ...

  8. speex 回声消除的用法

    speex 回声消除的用法 分类: speex AEC 回声消除 2012-11-13 11:24 1336人阅读 评论(0) 收藏 举报 speex的回声消息 就是speex_echo_cancel ...

  9. Flex回声消除的最佳方法

    Adobe Flash Player 已经成为音频和视频播放的非常流行的工具.实际上,目前大多数因特网视频均使用 Flash Player观看. Flash Player 通过将许多技术进行组合可以提 ...

随机推荐

  1. VPS虚拟专用服务器

    目录   0x00 VPS服务器概述 0x01 VPS工作原理 0x02 VPS用途 0x03 VPS优势 0x04 VPS特点 0x00 VPS服务器概述 VPS服务器(虚拟专用服务器)(" ...

  2. Ubuntu16.04 安装apache+mysql+php(LAMP)

    记录下ubuntu环境下安装apache+mysql+php(LAMP)环境. 0x01安装apache sudo apt-get update sudo apt-get install apache ...

  3. 【Java必修课】ArrayList与HashSet的contains方法性能比较(JMH性能测试)

    1 简介 在日常开发中,ArrayList和HashSet都是Java中很常用的集合类. ArrayList是List接口最常用的实现类: HashSet则是保存唯一元素Set的实现. 本文主要对两者 ...

  4. spark上 spark-shell和java -jar访问hdfs路径问题

    部署spark集群 使用spark包 spark-1.0.2-bin-hadoop2.tgz 在spark-shell和java -jar访问hadoop hdfs上的文件写法是有区别的 在spark ...

  5. 深入理解 Java 中的 final 关键字

    final 是Java 中重要关键字之一,可以应用于类.方法以及变量上.这篇文章中将讲解什么是 final 关键字?将变量.方法和类声明为 final 代表了什么?使用 final 的好处是什么? f ...

  6. vue element NavMenu 莫名出现蓝色边框

    最近在开发一款官网,使用的是element,在头菜单NavMenu,的时候没有设置任何的边框属性,结果出现了如下图所示的边框线. 点击有二级菜单时出现 找了好多方法发现是有一个属性影响到了,:focu ...

  7. vue 自定义侧边栏 递归无限子级菜单

    有很多网站会涉及到导航栏,我自己在开发中用的是element导航组件,并且自定义事件,给大家分享一下. 1.使用递归方法,无限循环子级菜单. 2.使用组件封装,维护方便. 3.使用index作为路由跳 ...

  8. FreeSql 已支持 .NetFramework 4.0、ODBC 访问

    FreeSql 开源发布快一年了,目前主仓库代码量 64118 行,用 git 命令统计的命令如下: find . "(" -name "*.cs" " ...

  9. 机器学习回顾篇(8):CART决策树算法

    1 引言 上一篇博客中介绍了ID3和C4.5两种决策树算法,这两种决策树都只能用于分类问题,而本文要说的CART(classification and regression tree)决策树不仅能用于 ...

  10. C++ 11标准

    C++11,也称为C++0x.为目前C++编程语言的最新正式标准(ISO/IEC 14882:2011).它将取代第二版标准ISO/IEC 14882:2003(第一版ISO/IEC 14882:19 ...