LMS、NLMS最优步长理论分析与Speex回声消除可能的改进想法
一、回声消除算法模型
先来分析下自适应回声消除的主要组成部分,大体上可以把回声消除模型分为两个部分
- 横向滤波器结构
- 滤波器系数自适应与步长控制
横向滤波器用脉冲响应w(n)【有的地方也称为回声路径】与远端说话者信号u(n)卷积得到回声估计,并用y(n)表示该估计。麦克风输出信号做为期望响应d(n),从期望响应d(n)中减去滤波器的”合成回声”,得到误差信号e(n)。通过不断的调整滤波器系数w(n)使误差信号的均方值最小化,其结果就是:误差信号为本地语音提供了一个近似的估计。这就是为什么这样的结构能去掉回声的原因。
二、LMS算法最优步长分析
下面我们重点说一下LMS滤波器系数自适应更新中的步长控制问题,也就是如何获得最优步长的问题。我们首先把期望响应用向量的形式表示如下:
\[d(n) = {w^H}u(n) + v(n)\]
上式中,w是横向滤波器的未知参数向量,v(n)为加性干扰噪声。通过LMS滤波器计算得到的抽头权向量是对w的估计,它们之间的失配用加权误差向量
\[\varepsilon (n + 1) = w - \hat w(n)\]
来衡量,由横向滤波器系数的的自适应更新机制
\[\hat w(n + 1) = \hat w(n) + \mu u(n)e(n)\]
可得
\[\varepsilon (n + 1) = \varepsilon (n) - \mu u(n)e(n)\]
如果我们对抽头权向量n次迭代到n+1次迭代的抽头权向量的增量变化最小为准则来选择最优步长,即使
\[E\{ |\varepsilon (n + 1){|^2}\} - E\{ |\varepsilon (n){|^2}\} \]
达到最小,为求最优步长,将其展开,得到
\[E\{ |\varepsilon (n + 1){|^2}\} - E\{ |\varepsilon (n){|^2}\} = {\mu ^2}E\{ {e^2}(n)|u(n){|^2}\} - 2\mu E\{ e(n){\varepsilon ^T}(n)u(n)\} \]
设额外误差向量(有的地方也称为无干扰误差,即假设没有噪声情况下的系数输出误差)与滤波器权值误差向量之间的关系为
\[\xi (n) = {\varepsilon ^T}(n)u(n)\]
则
\[E\{ |\varepsilon (n + 1){|^2}\} - E\{ |\varepsilon (n){|^2}\} = {\mu ^2}E\{ {e^2}(n)|u(n){|^2}\} - 2\mu E\{ e(n)\xi (n)\} \]
对上式两边求导,并置导数为0,很容易就可以得到最优步长为
\[{\mu _{opt}}(n) = \frac{{E\{ e(n)\xi (n)\} }}{{E\{ {e^2}(n)|u(n){|^2}\} }}\]
又因为额外误差可以视为系统输出误差与加性干扰噪声之差
\[\xi (n) = e(n) - v(n)\]
再假设加性干扰噪声信号与额外误差信号相关独立,则最优步长可以写为
\[{\mu _{opt}}(n) \approx \frac{{E\{ e(n)\xi (n)\} }}{{|u(n){|^2}E\{ {e^2}(n)\} }} = \frac{{E\{ {e^2}(n)\} - E\{ {v^2}(n)\} }}{{|u(n){|^2}E\{ {e^2}(n)\} }}\]
可以看出,当噪声信号不存在时,LMS算法的最优步长等于固定步长的NLMS算法
三、NLMS算法最优步长分析
下面再分析下NLMS滤波器的最优步长,NLMS横向滤波器系数的的自适应更新机制为
\[w(n + 1) = w(n) + \frac{\mu }{{|u(n){|^2}}}u(n)e(n)\]
两边减去w,整理可得
\[\varepsilon (n + 1) = \varepsilon (n) - \frac{\mu }{{|u(n){|^2}}}u(n)e(n)\]
我们同样对抽头权向量n次迭代到n+1次迭代的抽头权向量的增量变化最小为准则来选择最优步长,即使
\[E\{ |\varepsilon (n + 1){|^2}\} - E\{ |\varepsilon (n){|^2}\} = {\mu ^2}E\left\{ {\frac{{|e(n){|^2}}}{{|u(n){|^2}}}} \right\} - 2\mu E\left\{ {\frac{{e(n)\xi (n)}}{{|u(n){|^2}}}} \right\}\]
最小,按上面分析LMS滤波器时的思路进行求导并整理,最终得到NLMS的最优步长为
\[{\mu _{opt}} = \frac{{E\{ e(n)\xi (n)/|u(n){|^2}\} }}{{E\{ |e(n){|^2}/|u(n){|^2}\} }}\]
为了简化最优步长的计算,我们假设从一次迭代到下一次迭代的输入信号能量的波动足够小,以满足以下近似
\[E\{ e(n)\xi (n)/|u(n){|^2}\} = E\{ e(n)\xi (n)\} /E\{ |u(n){|^2}\} \]
和
\[E\{ |e(n){|^2}/|u(n){|^2}\} = E\{ |e(n){|^2}\} /E\{ |u(n){|^2}\} \]
则最优步长可以重写为
\[{\mu _{opt}} = \frac{{E\{ e(n)\xi (n)\} }}{{E\{ |e(n){|^2}\} }}\]
又因为加性干扰噪声信号与额外误差信号相关独立,再次重写最优步长
\[{\mu _{opt}} = \frac{{E\{ e(n)\xi (n)\} }}{{E\{ |e(n){|^2}\} }} = \frac{{E\{ [\xi (n) + v(n)]\xi (n)\} }}{{E\{ |e(n){|^2}\} }} = \frac{{E\{ |\xi (n){|^2}\} }}{{E\{ |e(n){|^2}\} }} = \frac{{E\{ |{\varepsilon ^T}(n)u(n){|^2}\} }}{{E\{ |e(n){|^2}\} }}\]
如果我们接下来假设输入信号u(n)的频谱中,每个频点分别对加权误差向量频谱的对应频点的影响都是相同的,那么
\[E\{ |{\varepsilon ^T}(n)u(n){|^2}\} \approx E\{ |{\varepsilon ^T}(n){|^2}\} E\{ |u(n){|^2}\} \]
最终得到的最优步长可以近似为
\[{\mu _{opt}} = \frac{{E\{ |{\varepsilon ^T}(n)u(n){|^2}\} }}{{E\{ |e(n){|^2}\} }} \approx \frac{{E\{ |{\varepsilon ^T}(n){|^2}\} E\{ |u(n){|^2}\} }}{{E\{ |e(n){|^2}\} }}\]
细心的朋友可能已经看出来了,这个结论与Speex回声消除原理深度解析一文中的最优步长结论意义上可以认为是相同的(采用的符号表示不同,不影响理解),这说明无论从哪个角度分析,在抽头权向量均方偏差最小的约束准则下,得到的最优步长的结论都是一样的。
四、改进思路
既然原理已经分析清楚了,现在再来看看,针对这个原理的Speex实现,可以有哪些改进的思路。本人水平有限,这里先分享出来,欢迎各位朋友批评指正不足之处!
- 最优初始值问题,Speex虽然采用了MDF做为长延时滤波,但本质上仍然是时域滤波原理,只是在频域做罢了。那么为了尽可能的在启动时快速收敛,滤波器权向量的初始值问题就不好简单的用0来初始化。
- 回声对每个频点的影响是不同的,不能用一个泄露因子来表示,如果在频域进行分段处理,每段采用不同的泄露因子,应是可行的一个思路
- 没有考虑不同扬声器到麦克风回声路径的非线性差异。这个差异在手机端效果效果很明显,如果对远端参考信号做非线性处理,可以弱化这个影响。
LMS、NLMS最优步长理论分析与Speex回声消除可能的改进想法的更多相关文章
- speex 回声消除的用法
speex 回声消除的用法 分类: speex AEC 回声消除 2012-11-13 11:24 1336人阅读 评论(0) 收藏 举报 speex的回声消息 就是speex_echo_cancel ...
- Speex回声消除代码分析
先说明下,这里的代码流程是修改过的Speex流程,但与Speex代码差异不大,应该不影响阅读. (1)用RemoveDCoffset函数进行去直流 (2)远端信号预加重后放入x[i+frame_s ...
- Speex回声消除原理深度解析
这里假设读者具有自适应滤波器的基础知识.Speex的AEC是以NLMS为基础,用MDF频域实现,最终推导出最优步长估计:残余回声与误差之比.最优步长等于残余回声方差与误差信号方差之比,这个结论可以记下 ...
- Speex Acoustic Echo Cancellation (AEC) 回声消除模块的使用
背景:回声与啸叫的产生 http://blog.csdn.net/u011202336/article/details/9238397 参考资料: http://www.speex.org/doc ...
- 回声消除中的LMS和NLMS算法与MATLAB实现
自适应滤波是数字信号处理的核心技术之一,在科学和工业上有着广泛的应用领域.自适应滤波技术应用广泛,包括回波抵消.自适应均衡.自适应噪声抵消和自适应波束形成.回声对消是当今通信系统中普遍存在的现象.声回 ...
- speex与webrtc回声消除小结
回声消除AEC包含: 延时估计对齐+线性自适应滤波器+NLP(双讲检测.处理)+舒适噪声CNG 一.speex aec 1.没有NLP 2.只考虑实时DSP系统,即是没有延时对齐等 3.自适应滤波 ...
- 回声消除(AEC)原理
一.前言 因为工作的关系,笔者从2004年开始接触回声消除(Echo Cancellation)技术,而后一直在某大型通讯企业从事与回声消除技术相关的工作,对回声消除这个看似神秘.高端和难以理解的技术 ...
- 声学回声消除(Acoustic Echo Cancellation)
回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音,这就是回声.一些回声是必要的,比如剧院里的音乐回声以及延迟时间较短的房间回声:而大多数回声会造成负面影响,比如在有线或者无线通信时重复听到自 ...
- Flex Flash Player回声消除的最佳方法
Adobe Flash Player 已经成为音频和视频播放的非常流行的工具.实际上,目前大多数因特网视频均使用 Flash Player观看. Flash Player 通过将许多技术进行组合可以提 ...
随机推荐
- c#符号含义
属性:(带手型图标)方法:(紫红色菱形)事件:(闪电)字段:(蓝色菱形) 还有很多,具体图标不好描述命名空间,类,接口,值类,枚举,清单或类信息项等
- jquery from使用
jquery form是一个基于jquery的表单异步提交的插件,通过它能快速简便的提交表单. html <div> <form id="ajaxForm" me ...
- Ajax系列面试题总结
1.Ajax是什么?如何创建一个Ajax? Ajax并不算是一种新的技术,全称是asychronous javascript and xml,可以说是已有技术的组合,主要用来实现客户端与服务器端的异步 ...
- vue-cli3 中的环境变量
官方文档是这样写的: src同名文件夹下的建立 .env.[model] 配置文件 // mode:production development ... 载入的变量会对vue-cli-service ...
- Win32中 DLL、Lib 库的创建机器使用
Windows 下 的静态库和动态库 一.静态函数库(Lib) 1. 静态函数库的制作(C/C++) —— 打开新建项目,然后选中Win32项目,接着在创建项目中选择 Lib,再接着将函数.实现功能的 ...
- Cat VS Dog HDU_3829(最大独立集最大匹配)
Cat VS Dog 题意:一群小朋友去动物园,如果每个小朋友喜欢的动物是猫,那么不喜欢的动物一定是狗,反之也是.现在动物园的管理者要拿走一些动物,如果拿走的是某个小朋友不喜欢的动物,那这个小朋友就非 ...
- [LUOGU] 4933 大师
\(Orz\) \(ljt12138!\) 设状态\(f[i][j]\)表示以\(i\)为结尾,公差为\(j\)的长度大于\(1\)的数列有几个. 然后转移方程就很好想了. \(k=H[i]-H[j] ...
- 《hello-world》第八次团队作业:Alpha冲刺-Scrum Meeting 2
项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十二 团队作业8:软件测试与Alpha冲刺 团队名称 <hello--worl ...
- web开发如何使用高德地图API(四)通过AMap.Marker自定义标点
说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...
- centOS下安装mysql workbench详细步骤
step0:安装mysql 在按照workbench之前,先安装mysql.指令是 yum install mysql mysql-server mysql-libs mysql-server 关于m ...