符号LMS算法
LMS算法简介
LMS(Least Mean Square)算法是Widrow和Hoff于1960年首次提出的,目前仍然是实际中使用的最广泛的一种算法。 LMS算法是在最陡下降法的基础上实现的,它是维纳滤波和最速下降算法互相结合而生成的一种新的算法。通过维纳滤波所求解的维纳解,.必须在已知输入信号与期望信号的先验统计信息,以及再对输入信号的自相关矩阵进行求逆运算的情况下才能得以确定。LMS算法具有计算复杂程度低、在信号为平稳信号的环境中的收敛性好、其期望值无偏地收敛到维纳解和利用有限精度实现算法时的稳定性等特性,使LMS算法成为自适应算法中稳定性最好、应用最广泛的算法。
LMS算法原理
LMS算法是在最陡下降法的基础上导出的,LMS算法中是直接取误差信号平方瞬时值作为均方误差的估计值的估计值,直接取误差信号平方瞬时值的导数作为均方误差梯度的的估计值。
LMS算法的权值更新方程为
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算法的迭代公式为
而符号LMS算法得权值更新方程变换如下
1Signed-Error LMS算法:
2Signed-Data LMS算法:
在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 收敛因子(步长) (标量) 要求大于0,小于xn的相关矩阵最大特征值的倒数
% itr 迭代次数 (标量) 默认为xn的长度,M<itr<length(xn)
% 输出参数:
% W 滤波器的权值矩阵 (矩阵)
% 大小为M x itr,
% en 误差序列(itr x 1) (列向量)
% yn 实际输出序列 (列向量)
% 参数个数必须为4个或5个
if nargin == 4 % 4个时递归迭代的次数为xn的长度
itr = length(xn);
elif nargin == 5 % 5个时满足M<itr<length(xn)
if itr>length(xn) | itr<M病人的英语
error('迭代次数过大或过小!');
end
el
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
程序运行结果如下,
>经线指示什么方向