您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页符号LMS算法

符号LMS算法

来源:华佗小知识


符号LMS算法

LMS算法简介

LMS(Least Mean Square)算法是Widrow和Hoff于1960年首次提出的,目前仍然是实际中使用的最广泛的一种算法。 LMS算法是在最陡下降法的基础上实现的,它是维纳滤波和最速下降算法互相结合而生成的一种新的算法。通过维纳滤波所求解的维纳解,.必须在已知输入信号与期望信号的先验统计信息,以及再对输入信号的自相关矩阵进行求逆运算的情况下才能得以确定。LMS算法具有计算复杂程度低、在信号为平稳信号的环境中的收敛性好、其期望值无偏地收敛到维纳解和利用有限精度实现算法时的稳定性等特性,使LMS算法成为自适应算法中稳定性最好、应用最广泛的算法。

LMS算法原理

LMS算法是在最陡下降法的基础上导出的,LMS算法中是直接取误差信号平方瞬时值

e2(n)作为均方误差的估计值E{e2(n)}的估计值,直接取误差信号平方瞬时值E{e2(n)}的导数

作为均方误差梯度的的估计值。

LMS算法的权值更新方程为

w(n1)w(n)e(n)x(n)

LMS算法的实现步骤:

1,、设置变量和参量:

X(n)为输入向量,或称为训练样本

W(n)为权值向量

b(n)为偏差

d(n)为期望输出

y(n)为实际输出

u为学习速率

n为迭代次数

2、初始化,赋给w(0)各一个较小的随机非零值,令n=0

3、对于一组输入样本x(n)和对应的期望输出d,计算

y(n)=w(n)’x(n)

e(n)=d(n)-y(n)

W(n+1)=W(n)+uX(n)e(n)

4、判断是否满足条件,若满足算法结束,若否n增加1,转入第3步继续执行。

符号LMS算法

LMS算法的迭代公式为

1w(n1)w(n)[(n)]2w(n)e(n)x(n)

而符号LMS算法得权值更新方程变换如下

1Signed-Error LMS算法:

w(n1)w(n)sign[e(n)]x(n)

2Signed-Data LMS算法:

w(n1)w(n)e(n)sign[x(n)]

在LMS算法收敛过程中,影响其性能的参数主要有迭代步长,滤波器阶数和滤波器权值的初始值,下面主要研究滤波器阶数对两者符号lms算法的影响。

滤波器的阶数L是自适应滤波器设计过程中很重要的一个参数。当滤波器阶数选择过小时,称之为欠长度滤波器,则必将带来较大的误差,甚至导致LMS算法的发散。因此人们在滤波器设计过程中通常将滤波器阶数选为一个较大的值,以满足滤波器长度的要求,而这将带来较大的计算量,增加计算的复杂度,同时注意到,满足收敛条件的迭代步长μ与滤波器的阶数L成反比,因此,对于相同的输入情况,滤波器阶数越高,迭代步长μ满足

收敛性的最大值μmax越小,收敛速度越慢,收敛条件越严格;反之同理,滤波器阶数越低,迭代步长的收敛最大值μmax越大,收敛速度越快,收敛条件也越宽松。

符号LMS算法的matlab仿真

function [yn,W,en]=LMS(xn,dn,M,mu,itr)

% LMS(Least Mean Squre)算法

% 输入参数:

% xn 输入的信号序列 (列向量)

% dn 所期望的响应序列 (列向量)

% M 滤波器的阶数 (标量)

% mu 收敛因子(步长) (标量) 特征值的倒数

% itr 迭代次数 (标量) % 输出参数:

% W 滤波器的权值矩阵 (矩阵)

要求大于0,小于xn的相关矩阵最大默认为xn的长度,M% 大小为M x itr,

% en 误差序列(itr x 1) (列向量)

% yn 实际输出序列 (列向量)

% 参数个数必须为4个或5个

if nargin == 4 % 4个时递归迭代的次数为xn的长度

itr = length(xn);

elseif nargin == 5 % 5个时满足Mif itr>length(xn) | itrerror('迭代次数过大或过小!');

end

else

error('请检查输入参数的个数!');

end

% 初始化参数

en = zeros(itr,1); % 误差序列,en(k)表示第k次迭代时预期输出与实际输入的误差

W = zeros(M,itr); % 每一行代表一个加权参量,每一列代表-次迭代,初始为0

% 迭代计算

for k = M:itr % 第k次迭代

x = xn(k:-1:k-M+1); % 滤波器M个抽头的输入

y = W(:,k-1).' * x; % 滤波器的输出

en(k) = dn(k) - y ; % 第k次迭代的误差

% 滤波器权值计算的迭代式

W(:,k) = W(:,k-1) + 2*mu*en(k)*x;

end

% 求最优时滤波器的输出序列

yn = inf * ones(size(xn));

for k = M:length(xn)

x = xn(k:-1:k-M+1);

yn(k) = W(:,end).'* x;

end

上面是原始的lms算法的程序,

调用上面LMS算法的程序

设定滤波器阶数为20,然后设定输入信号和期望信号的序列长度为100,

程序的输出结果如下

对于Signed-Data LMS算法把LMS程序的权值更新方程给为如下

W(:,k) = W(:,k-1) + 2*mu*en(k)*sign(x);

再次设定滤波器阶数为20,输入信号和期望信号的序列长度为仍为100,程序运行结果为

可见输出结果的误差比较大。

下面设定输入信号和期望信号的序列长度为为200.滤波器阶数为40

程序运行结果如下,

误差相对来说小了很多。

下面设定滤波器阶数为60再看运行结果

可见效果要好多了,误差几乎接近于零了。

所以当信号序列较长时,选择大一些的滤波器阶数能取的很好地结果。

对于Signed-Error LMS算法把LMS程序的权值更新方程给为如下

W(:,k) = W(:,k-1) + 2*mu*sign(en(k))*x;

设定滤波器阶数为20,输入信号和期望信号的序列长度为100,程序运行结果如下

效果也是不错,误差较小。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务