一、LMS算法
全称 Least mean square 算法。中文是最小均方算法。
感知器和自适应线性元件在历史上几乎是同时提出的,并且两者在对权值的调整的算法非常相似。它们都是基于纠错学习规则的学习算法。感知器算法存在如下问题:不能推广到一般的前向网络中;函数不是线性可分时,得不出任何结果。而由美国斯坦福大学的Widrow和Hoff在研究自适应理论时提出的LMS算法,由于其容易实现而很快得到了广泛应用,成为自适应滤波的标准算法。
均方差这个概念的公式如下所示:
(1) 上述公式中的R表示正确的预期结果,C表示当前计算结果。这个便是LMS算法中终止算法的核心公式。 如何得到当前计算结果C的公式如下所示: (2) i表示输入值,W表示输入端所对应的权值,对这两个值进行乘法运算后,并求和。对于求和的结果可以进行一定处理,比如大于0的O便为1;否则就为-1。 用于调整输入端权值的公式如下所示: (3) 在算法运行时,不断利用公式(2)进行输入端的权值调整,使权值越来越接近正确值。其中w便是输入端所对应的权值,I是输入值,它表示学习参数,一般为小于1的正数。
LMS算法步骤:
1,、设置变量和参量:
X(n)为输入向量,或称为训练样本
W(n)为权值向量
b(n)为偏差
d(n)为期望输出
y(n)为实际输出
η为学习速率
n为迭代次数
2、初始化,赋给w(0)各一个较小的随机非零值,令n=0
3、对于一组输入样本x(n)和对应的期望输出d,计算
e(n)=d(n)-X(n)^W(n)
W(n+1)=W(n)+ηX(n)e(n)
4、判断是否满足条件,若满足算法结束,若否n增加1,转入第3步继续执行。
二、代码
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); elseif nargin == 5 % 5个时满足M<itr<length(xn) if itr>length(xn) | itr<M error('迭代次数过大或过小!'); 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
