回声消除中的LMS和NLMS算法与MATLAB实现
自适应滤波是数字信号处理的核心技术之一,在科学和工业上有着广泛的应用领域。自适应滤波技术应用广泛,包括回波抵消、自适应均衡、自适应噪声抵消和自适应波束形成。回声对消是当今通信系统中普遍存在的现象。声回波引起的信号干扰会分散用户的注意力,降低通信质量。本文重点介绍了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实现的更多相关文章
- LMS、NLMS最优步长理论分析与Speex回声消除可能的改进想法
一.回声消除算法模型 先来分析下自适应回声消除的主要组成部分,大体上可以把回声消除模型分为两个部分 横向滤波器结构 滤波器系数自适应与步长控制 横向滤波器用脉冲响应w(n)[有的地方也称为回声路径]与 ...
- webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错:
webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错. 原因是: 局部变量ip跟全局变量冲突的问题,可以将局部变量重新命名一下,就可以通过编译了. aec_rdft.c修改以后文件代 ...
- 声学回声消除(Acoustic Echo Cancellation)
回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音,这就是回声.一些回声是必要的,比如剧院里的音乐回声以及延迟时间较短的房间回声:而大多数回声会造成负面影响,比如在有线或者无线通信时重复听到自 ...
- Speex回声消除代码分析
先说明下,这里的代码流程是修改过的Speex流程,但与Speex代码差异不大,应该不影响阅读. (1)用RemoveDCoffset函数进行去直流 (2)远端信号预加重后放入x[i+frame_s ...
- Speex回声消除原理深度解析
这里假设读者具有自适应滤波器的基础知识.Speex的AEC是以NLMS为基础,用MDF频域实现,最终推导出最优步长估计:残余回声与误差之比.最优步长等于残余回声方差与误差信号方差之比,这个结论可以记下 ...
- 回声消除(AEC)原理
一.前言 因为工作的关系,笔者从2004年开始接触回声消除(Echo Cancellation)技术,而后一直在某大型通讯企业从事与回声消除技术相关的工作,对回声消除这个看似神秘.高端和难以理解的技术 ...
- Flex Flash Player回声消除的最佳方法
Adobe Flash Player 已经成为音频和视频播放的非常流行的工具.实际上,目前大多数因特网视频均使用 Flash Player观看. Flash Player 通过将许多技术进行组合可以提 ...
- speex 回声消除的用法
speex 回声消除的用法 分类: speex AEC 回声消除 2012-11-13 11:24 1336人阅读 评论(0) 收藏 举报 speex的回声消息 就是speex_echo_cancel ...
- Flex回声消除的最佳方法
Adobe Flash Player 已经成为音频和视频播放的非常流行的工具.实际上,目前大多数因特网视频均使用 Flash Player观看. Flash Player 通过将许多技术进行组合可以提 ...
随机推荐
- PMBOK(第六版) PMP笔记——《十》第十章(项目沟通管理)
PMBOK(第六版) PMP笔记——<十>第十章(项目沟通管理) 第十章 项目沟通管理: PM 大多数时间都用在与干系人的沟通上. 第十章有三个过程: 规划沟通管理:根据干系人的需求,制定 ...
- GSS3 - Can you answer these queries III
题意翻译 nnn 个数, qqq 次操作 操作0 x y把 AxA_xAx 修改为 yyy 操作1 l r询问区间 [l,r][l, r][l,r] 的最大子段和 感谢 @Edgration 提供的 ...
- 创建优化的Go镜像文件以及踩过的坑
在Docker上创建Go镜像文件并不困难,但建立的文件很大,接近1G,使用起来不太方便.Docker镜像的一个主要难题就是如何优化,创建小的镜像.我们可以用多级构建的方法来创建Docker镜像文件,它 ...
- 这可能就是你苦苦寻找免费、高颜值、功能强大的 Markdown 编辑器(共5款)
本文作者 | HelloGitHub-小猪蹄 Markdown 是一个轻量级的标记语言,语法简单.容易上手,它深受程序员.博客主等人群的钟爱.随着越来越多的博客系统支持 Markdown,它也开始越来 ...
- 在VM上安装OpenWrt
1.选择'自定义',点击'下一步' 2.'硬件兼容性'默认,点击'下一步' 3.'稍后安装操作系统',点击'下一步' 4.客户机操作系统'Linux' 版本'CentOS 64位',点击'下一步' 说 ...
- 小白学 Python(7):基础流程控制(上)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- Python+requests+unittest+excel实现接口自动化测试框架(摘录)
一.框架结构: 工程目录 二.Case文件设计 三.基础包 base 3.1 封装get/post请求(runmethon.py) 1 import requests 2 import json 3 ...
- 过滤器、拦截器和AOP的分析与对比
目录 一.过滤器(Filter) 1.1 简介 1.2 应用场景 1.3 源码分析 二.拦截器(Interceptor) 2.1 简介 2.2 应用场景 2.2 源码分析 三.面向切面编程(AOP) ...
- python:将网页图片保存到本地
1.requests库介绍 在python中,有一个非常好用的网络请求库requests,使用它可以发起网络请求,并获取网页返回的内容.同时,也可以进行网页图片下载 requests是使用Apache ...
- K近邻(k-Nearest Neighbor,KNN)算法,一种基于实例的学习方法
1. 基于实例的学习算法 0x1:数据挖掘的一些相关知识脉络 本文是一篇介绍K近邻数据挖掘算法的文章,而所谓数据挖掘,就是讨论如何在数据中寻找模式的一门学科. 其实人类的科学技术发展的历史,就一直伴随 ...