文章目录

  • 1、变步长 SC-MPNLMS 频域分块算法
    • 1.1 算法原理
    • 1.2 算法代码
    • 1.3 算法优缺点
  • 2、集成多种自适应滤波算法的回声消除器
    • 1.1 算法原理
    • 1.2 算法代码
    • 1.3算法优缺点
    • 1.4 算法自适应准则
  • 3、新的变步长的LMS自适应滤波算法
    • 3.1算法原理
    • 3.2算法代码
    • 3.3算法优缺点
      • 参考文献

本文接上一篇博文,接下来介绍博主阅读论文总结的几种优化后的自适应滤波器更新算法!

1、变步长 SC-MPNLMS 频域分块算法

1.1 算法原理

  该算法由参考文献[1]提出,这种变步长 SC-MPNLMS 频域分块算法首先将远端输入信号分块处理,并对每个独立的块进行 FFT,而 FFT 是实现卷积和的快速运算,将远端输入信号与回声路径的卷积运算变换至频域内,在频域中实现滤波器权值向量的更新迭代,提升了算法的运算速度。在算法的自适应滤波阶段将频域内的信号进行快速傅里叶反变换(Inverse FFT,IFFT)使其变换至时域,并采用递归平均方法得到泄漏系数,从而调整全局步长因子矩阵,实现变步长 SC-MPNLMS 频域分块算法的自适应滤波过程。该算法改善了传统算法达到稳态值时大步长导致稳态失调过大的问题;针对频域分块自适应滤波算法初始收敛速度慢的问题,将滤波器初始权值赋值为稀疏度适中的随机序列。

  MPNLMS算法解决了PNLMS在估计过程中收敛速度不均的问题,实际上回声路径的稀疏程度是随着时间不断变化的,取决于温度,压力和反射率等因素[37,38],也随着封闭空间中的扬声器与麦克风的距离而变化。由于回声路径的稀疏程度对算法性能影响很大,SC-MPNLMS算法在自适应过程的每次迭代中计算出估计回声路径的稀疏程度,并将其融入MPNLMS算法,得到SC-MPNLMS算法的权值向量更新方程如下:

其中,μ\muμ 为全局步长因子,x(n)x(n)x(n) 为远端输入信号,L为滤波器的长度,α\alphaα 为调整参数以防止出现被零整除的情况。G(n)G(n)G(n) 为调整步长的对角矩阵,其具体计算方法可以参考文献一。

  变步长SC-MPNLMS频域分块算法的原理如下图所示。首先将输入信号分块,处理每个独立的块时权值系数不变,每个块的数据处理完后才对权值进行更新,降低了计算复杂度。在频域内结合估计回声与误差信号的LPS,采用递归平均得到最优步长因子,使权值系数每次迭代都具有最优步长,在保证稳态性能不降低的前提下,进一步提升了算法的收敛性能。

算法的具体公式推导也可以从文献中学习,最后变步长的SC-MPNLMS频域分块算法的权值更新迭代公式为:

1.2 算法代码

该算法针对最优步长的计算较为复杂,博主还未复现。如果有复现的童鞋,欢迎和博主分享学习,非常感谢!

1.3 算法优缺点

  该算法基于频域分块自适应算法[36],将不相关的远端输入信号分块处理,对每个独立的块依次进行频域内的自适应滤波,累加后作 FFT 反变换得到估计回声,将估计回声从期望信号中去除得到误差信号,根据回声对每个频点泄漏程度的不同,结合估计回声与误差信号的 LPS,用递归平均法调整全局步长因子矩阵,使算法初期拥有较大步长来提升收敛速度,后期拥有较小步长从而减小稳态误差,并对滤波器权值系数进行随机序列的非零值初始化,进一步改善了算法的初始收敛速度。当远端输入信号为不相关信号时,对于长度较长的回声路径,本章提出的改进算法在性能表现良好的情况下很大程度上节约了计算成本,使得 AEC 更具有实时性。

2、集成多种自适应滤波算法的回声消除器

1.1 算法原理

  该算法由参考文献[2]提出,其集成了多种自适应滤波器算法的回声消除框架。该算法是基于现代芯片技术的发展,芯片的运算速度得到大大提高而提出的,做法是选择多个各有优缺点且具有一定互补性的固定步长自适应算法,每种算法取多个不同的步长,分析同一时刻不同算法不同步长的误差,用帧误差能量最小的方法来选择该帧用哪一种算法,这样始终能选择—种输出误差最小的算法。该算法的问题是计算量比较大。

  算法的具体实现步骤是:选择LMS、NLMS、PNLMS和IPNLMS这四种具有一定互补性的固定步长自适应滤波算法,每种算法选择三个不同步长进行试验。这样就有12种算法,这12种算法同时进行。首先,计算出各个算法的误差,然后,计算每—帧的误差能量,比较得出最小帧误差能量,最后,将最小帧误差能量的误差作为输出。

1.2 算法代码

其实现原理就是将多种算法整合起来,每一帧处理后,都将多种算法中结果最好的输出出来。

1.3算法优缺点

  • 该算法集成了多种算法,因为多种算法各有特点并且互补,因此在不同场景下各种算法的效果也不同,但是肯定有一种算法效果最好。该算法就是应用了这一点,可以针对不同场景采用不同的自适应滤波器算法。
  • 该算法的缺点是,每次处理必须要同时计算多种算法的处理效果,计算量巨大。可以理解为用时间+空间换效果。

1.4 算法自适应准则

  文中介绍了两种自适应准则,自适应准则是基于最佳滤波器的设计提出来的,典型的最佳滤波器是维纳滤波器,自适应滤波器对于平稳信号收敛到维纳解。对于平稳的输入信号来说,自适应过程就是从某个初始状态出发求维纳解的过程。常用的自适应准则有两种::

  1. 均方误差(MSE)准则,该准则定义为自适应滤波器对期望信号进行估计的均方值,即期望信号与实际滤波器输出信号的差值的平方的期望值。

    其中,d(n)d(n)d(n) 代表期望信号,y(n)y(n)y(n) 代表自适应滤波器的输出信号,www 代表滤波器的权系数矢量,x代表输入矢量。

  2. 最小平方(Ls)误差准则,该准则定义为期望信号与实际滤波输出信号的差值的平方和的平均值或者是加权平方和,即:

式中,CnC_nCn​ 为加权值,该准则的基础是误差的加权和最小。

3、新的变步长的LMS自适应滤波算法

3.1算法原理

   该算法是参考文献[3]中提出的,在介绍该算法之前,先介绍几种常用的变步长的LMS自适应滤波算法:

  • 基于对数函数的变步长LMS自适应滤波算法:根据上述动态选择步长参数值的标准,文献[4]提出了一种形式较为简单、计算复杂度低的基于对数函数的变步长LMS算 法,其将对数函数进行适当的改变作为步长参数模型决定步长参数值 μ\muμ 的变化,使得步长参数的值随着误差 e(n)e(n)e(n) 的改变而发生动态的改变,步长调整公式为
    μ(n)=σlog[ρ∣e(n)∣υ]\mu(n) = \sigma log[\rho|e(n)|^\upsilon] μ(n)=σlog[ρ∣e(n)∣υ]
    其中,参数 σ\sigmaσ 的作用是控制步长参数模型的取值范围,参数 ρ\rhoρ 的作用是控制步长参数模型的形状,参数 υ\upsilonυ 的作用是控制步长参数模型邻近误差为 0 的区域的变换速率。经过文献[4]测试,σ=0.02,ρ=1000,υ=2\sigma = 0.02,\rho = 1000,\upsilon = 2σ=0.02,ρ=1000,υ=2 时算法效果最好。

  • 基于正态分布函数的变步长LMS自适应滤波算法:文献[5]是在基于sigmoid函数的变步长LMS算法的基础上提出的,其步长参数调整公式为
    μ(n)=c{1−exp[−a∣e(n)∣b]}\mu(n) = c\{1-exp[-a|e(n)|^b]\} μ(n)=c{1−exp[−a∣e(n)∣b]}
    其中,参数 aaa 控制步长参数模型收敛至最大取值的速度,参数 bbb 控制模型底部的形状,即进入稳态使其的步长参数模型的变化趋势,参数 ccc 控制步长参数模型的最大取值,经过文献[5]测试,a=5,b=1,c=0.12a=5,b=1,c= 0.12a=5,b=1,c=0.12 时算法效果最好。

  参考文献[3]中提出的算法为了使LMS自适应滤波算法在收敛速度、稳态误差和系统跟踪性能等重要算法特征上得到更好的效果,在上面提出的第一种算法的基础上设计了一种新的步长参数变化模型,新的步长参数与误差之间的函数表达式为:
μ(n)=−γlog(11+τ[e(n)]2)\mu(n) = - \gamma log(\frac{1}{1+\tau[e(n)]^2}) μ(n)=−γlog(1+τ[e(n)]21​)
  参数 γ\gammaγ 的取值对于步长参数的取值范围有明显的影响;参数 τ\tauτ 对步长参数取值的范围和形状也就是变化趋势都有一定的影响,进而有可能降低算法的收敛速度以及精度。 根据参考文献中的测试,当 γ=0.9\gamma=0.9γ=0.9、 τ=0.7\tau = 0.7τ=0.7 时,改进的变步长LMS自适应滤波器算法的步长参数模型最好。

改进后的LMS算法的具体步骤如下:

  1. 初始化参数。将自适应滤波器权系数的初始值 W(0)W(0)W(0) 设置为0,将自适应滤波器的阶数设置为M,选择合适的变化的步长值 μ\muμ ,为了使算法收敛,步长 μ\muμ 的取值应为:
    0<μ<1/λmax0<\mu<1/\lambda_{max} 0<μ<1/λmax​
    其中 λmax\lambda_{max}λmax​ 表示输入信号 X(n)X(n)X(n) 的自相关矩阵的最大特征值。

  2. 计算滤波器的实际输出信号为 :y(n)=WT(n)X(n)y(n) = W^T(n) X(n)y(n)=WT(n)X(n)

  3. 计算自适应滤波器的误差为 : e(n)=d(n)−y(n)=d(n)−WT(n)X(n)e(n) = d(n) - y(n) = d(n) - W^T(n) X(n)e(n)=d(n)−y(n)=d(n)−WT(n)X(n)

  4. 更新步长参数,步长参数更新公式为 μ(n)=−γlog(11+τ[e(n)]2)\mu(n) = - \gamma log(\frac{1}{1+\tau[e(n)]^2})μ(n)=−γlog(1+τ[e(n)]21​)

  5. 更新滤波器权系数的值为: W(n+1)=W(n)+μ(n)X(n)e(n)W(n+1) = W(n) + \mu(n)X(n)e(n)W(n+1)=W(n)+μ(n)X(n)e(n)

重复上述步骤2~5,直到滤波器权系数逼近最佳滤波为止。

3.2算法代码

function[e,y,w] = NLMS(d,x,M)% 输入:% d  - 麦克风语音% x  - 远端语音% M  - 滤波器阶数%% 输出:% e - 近端语音估计% y - 远端回声估计% w - 滤波器参数d_length = length(d);if (d_length <= M)print('error: 信号长度小于滤波器阶数!');return; endif (d_length ~= length(x))  print('error: 输入信号和参考信号长度不同!');return; endxx = zeros(M,1);w1 = zeros(M,1);  %滤波器权重y = zeros(d_length,1); %近端语音e = zeros(d_length,1); %误差for n = 1:d_length%在输入信号x前补上M-1个0,使输出y与输入具有相同长度xx = [xx(2:M);x(n)]; %(39,1) +(1,1) = (40,1)y(n) = w1' *xx;mu = -0.9log(1/1+0.7*e(n)*e(n)); %步长,这里简化了mu的计算,没有防止x(n)过小的情况e(n) = d(n) - y(n);  %误差w1 = w1 + mu * e(n) * xx;w(:,n) = w1;end
end

3.3算法优缺点

  该算法在基于对数函数的变步长LMS算法的基础上,建立了一种新的步长参数与误差的关系模型。仿真结果表明,提出算法与已有算法相比,能够达到更高的收敛精度及更快的收敛速度,在系统不发生时变时,收敛精度分别提高了5dB和3dB,当系统发生时变后,收敛精度分别提高了4dB和2dB,不论系统是否发生时变,收敛速度都更快。

参考文献

[1]冯江浩. 基于自适应滤波的声学回声消除算法研究[D]. 太原理工大学.

[2]夏红根. 基于自适应滤波器的回声消除算法研究及应用[D]. 中国科学技术大学, 2009.

[3]张继荣, 张天. 一种改进的变步长LMS自适应滤波算法[J]. 西安邮电大学学报, 2021.

[4]茹国宝, 黄燕, 郭英杰,等. 基于对数函数的新变步长LMS算法[J]. 武汉大学学报:理学版, 2015(3):4.

[5]马凯, 王平波, 武彩. 一种基于正态分布曲线的变步长LMS算法[J]. 计算机仿真, 2019, 36(9):5.

作者:王小二_Leon
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
本文章不做任何商业用途,仅作为自学所用,文章后面会有参考链接,我可能会复制原作者的话,如果介意,我会修改或者删除。

自适应滤波器更新算法-EP2相关推荐

  1. 自适应滤波器——LMS算法

    Matlab代码如下: clear; close all; clc;t = 0:199; xs = 10*cos(0.5*t); %xs为理想的余弦信号 noise = randn(1,length( ...

  2. 自适应滤波器设计及matlab实现,(终稿)自适应滤波器设计及Matlab实现.doc(OK版)...

    <自适应滤波器设计及Matlab实现.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)自适应滤波器设计及Matlab实现.doc(OK版)>相关文档资源请在帮帮文库(w ...

  3. 浅谈自适应滤波器---(快速RLS算法)

    在上一篇博客中(浅谈自适应滤波器)我给大家介绍了关于自适应滤波器的一些入门级的知识,并分析了常规RLS算法单次迭代的计算量级为O[N2],当阶数N增大时相应的计算量显著增大,为了将计算量级降低到O[N ...

  4. LMS自适应滤波器算法及其改进

    -- 年初DSP课程期末设计时为了答辩做的PPT,内容背的滚瓜烂熟,给老师留下了深刻的印象,想必整个系也没有第二个人像我这么上心了,因此最后决定把PPT放到博客上:此外因为不希望PPT上有太多字,所以 ...

  5. 自适应滤波器算法综述以及代码实现

    作者:凌逆战 文章地址:自适应滤波器算法综述以及代码实现 - 凌逆战 - 博客园 并不是每个自适应滤波器的的代码我都实现了,我需要一定的时间,一有时间我就会来更新代码,记得关注我,如果有问题记得反馈 ...

  6. 自适应滤波器原理——频域分块LMS算法(FDAF)

    在讲频域分块LMS之前建议大家回顾一个时域分块LMS算法 时域分块LMS: Block  LMS的误差计算 和 权重更新公式中, :输出信号是输入信号与滤波器系数的线性卷积 :更新梯度是误差信号与输入 ...

  7. lms c语言,LMS算法实现自适应滤波器(C语言版)

    上次只是发表了MATLAB版本的LMS算法,这次将C语言版的LMS算法一并发表,其中涉及到雅克比公式求矩阵最大特征值的部分我将后续发表到博客中,此C语言版本是本人自己研究MATLAB语言,然后独自翻译 ...

  8. LMS算法实现自适应滤波器

    LMS算法实现自适应滤波器 // LMS.c#include "LMS.h"/* xn--------输入的信号序列(列向量)* itr-------迭代次数,标量,默认为xn的长 ...

  9. 自适应滤波器:维纳滤波器3——GSC算法及语音增强

    本文转载自:http://www.cnblogs.com/xingshansi/p/6621185.html 前言 仍然是西蒙.赫金的<自适应滤波器原理>第四版第二章,首先看到无约束维纳滤 ...

最新文章

  1. Python大战C++,谁能更胜一筹?
  2. 使用jquery触发a标签跳转
  3. 7.1.15 单双击事件
  4. 水鱼 学习回顾 <1>
  5. Makefile学习资料及书籍推荐
  6. 工程中选择数据结构和算法的依据
  7. 最新系统之家系统win11 32位官方版v2021.07
  8. yolo如何降低loss_你一定从未看过如此通俗易懂的YOLO系列(从v1到v5)模型解读 (上)...
  9. 一个关于继承和多态的问题(思索篇)
  10. 计算机启动时默认输入法设置,怎么把输入法设置成默认(怎么设置首选输入法)...
  11. [IFRS17]什么是IFRS17?
  12. macOS 内置的端口扫描工具
  13. openresty ngx_lua常用指令
  14. 重装系统后需要做什么?
  15. Easy-Pay一行代码解决支付宝微信支付功能
  16. shiro使用Md5加密
  17. Python学习,第一课(基础知识,利用urllib库入门)
  18. 照相制版技术与图形转移技术
  19. 阿里云轻量应用服务器基于CentOS系统镜像快速部署Apache服务
  20. 鸿蒙钉钉app,钉钉鸿蒙版app下载_钉钉鸿蒙版app最新版下载 5.1.25

热门文章

  1. 使用python画圆以及正弦余弦曲线
  2. 【FIW2022精彩回顾】国泰君安新一代核心交易系统网络底座建设实践
  3. 酷狗怎么转换音乐格式
  4. Matlab数据分析与计算,进程线程面试题总结
  5. 中外大厂裁员赔偿谁最“良心”:苹果有人仅得两周工资,腾讯近期补偿达N+5
  6. Java数据结构之二分查找/插值查找/斐波那契查找
  7. php 反序列化漏洞,PHP反序列化漏洞详解
  8. SQL Server2008 无法连接到本地服务器
  9. 三菱plc fx2N用梯形图写crc校验
  10. Unity AVPro视频播放路径问题(andriod和pc)