一、最小均方算法(LMS)概述1959年,Widrow和Hoff在研究自适应线性元素——模式识别的方案时,提出了最小均方算法(简称LMS算法)。LMS算法是
一、最小均方算法(LMS)概述1959年,Widrow和Hoff在研究自适应线性元素——模式识别的方案时,提出了最小均方算法(简称LMS算法)。LMS算法是基于维纳滤波,然后借助最速下降算法发展起来的。只有当输入信号和期望信号的先验统计信息已知并且输入信号的自相关矩阵被求逆时,才能确定通过维纳滤波求解的维纳解。所以这个维纳解只是理论上的最优解。因此,借助最速下降算法,递归逼近维纳解,从而避免了矩阵求逆运算,但仍需要信号的先验信息,因此用瞬时误差的平方代替均方误差,最终得到LMS算法。
LMS算法具有计算复杂度低、在信号平稳的环境下收敛性好、其期望值无偏收敛到维纳解、算法实现精度有限时稳定等特点,这使得LMS算法成为自适应算法中最稳定、应用最广泛的算法。
下图是实现该算法的矢量信号流程图:
图1 LMS算法的矢量信号流程图
从图1可以知道,LMS算法主要包括两个过程:滤波和自适应调整。
一般来说,LMS算法的具体过程是:
(1)确定参数:全局步长参数和滤波器的抽头数(也叫滤波器阶数)。
(2)初始化滤波器的初始值
(3)算法操作过程:
滤波器输出:y(n)=wT(n)x(n)
误差信号:e(n)=d(n)-y(n)
权重系数更新:w(n ^ 1)=w(n)e(n)x(n)
二、性能分析很大程度上,自适应算法的选择决定了自适应滤波器是否具有良好的性能。因此,对应用最广泛的算法进行性能分析就显得尤为重要。平稳环境下算法的主要性能指标是收敛性、收敛速度、稳态误差和计算复杂度。
1、收敛
收敛是指当迭代次数趋于无穷大时,滤波器权向量会达到最优值或者在附近的小邻域内,也可以说滤波器权向量在一定的收敛条件下最终会逼近最优值。
2、收敛速度
收敛速度是指滤波器权向量从初始值向其最优解收敛的程度,是判断LMS算法性能的重要指标。
3、稳态错误
稳态误差是指算法进入稳态时滤波系数与最优解的距离。它也是衡量LMS算法性能的一个重要指标。
4、计算复杂性
计算复杂度是指当更新一次滤波器权重系数时所需的计算量。LMS算法的计算复杂度还是很低的,这也是LMS算法的一大特点。
三、LMS算法分类1、量化误差LMS算法
在回波消除和信道均衡等要求自适应滤波器高速工作的应用中,降低计算复杂度非常重要。LMS算法的计算复杂度主要来源于更新数据时的乘法运算和自适应滤波器输出的计算。量化误差算法是一种降低计算复杂度的方法。其基本思想是量化误差信号。带符号误差的普通LMS算法和带符号数据的LMS算法。
2、去相关LMS算法
在LMS算法中,有一个独立性假设,即输入u(1),u(2),u(n-1)是统计上独立的向量序列。当它们不满足统计独立性条件时,基本LMS算法的性能会下降,尤其是收敛速度会变慢。为了解决这个问题,提出了一种理解相关性的算法。研究表明,去相关可以有效加快LMS算法的收敛速度。去相关LMS算法分为时域去相关LMS算法和变换域去相关LMS算法。
3、并行延迟LMS算法
在自适应算法的实现结构中,有一种面向VLSI的脉动结构,因其高度并行性和流水线特性而备受关注。当算法直接映射到脉动结构时,权重更新和误差计算存在严重的计算瓶颈。该算法解决了从算法到结构的瓶颈问题,但当滤波器阶数较长时,算法的收敛性能会变差,因为其自身的延迟影响了其收敛性能。可以说延迟算法是以牺牲算法的收敛性能为代价的。
4、自适应网格LMS算法
LMS滤波器属于横向自适应滤波器,假设其阶数是固定的。但在实际应用中,横向滤波器的最佳阶数往往是未知的,需要通过比较不同阶数的滤波器来确定最佳阶数。当横向滤波器的阶数改变时,必须重新运行LMS算法,这显然是不方便和费时的。格型滤波器解决了这个问题。
格型滤波器具有共轭对称结构,前向反射系数是后向反射系数的共轭,其设计准则与LMS算法相同,均方误差最小。
5、牛顿-LMS算法
牛顿-LMS算法是一种估计环境信号二阶统计量的算法。其目的是解决输入信号相关性较高时算法收敛速度慢的问题。一般情况下,牛顿算法可以快速收敛,但R-1的估计需要大量计算,存在数值不稳定的问题。
四、 LMS LMS算法的基本原理根据小均方误差准则和均方误差曲面,自然会想到沿着各时刻均方误差在权向量曲面上的陡降的投影方向进行更新,即利用目标函数K的反梯度向量进行迭代更新。由于均方误差性能曲面只有唯一的极小值,只要收敛步长选择得当,无论初始权向量在哪里,都可以收敛到误差曲面的小点或其邻域之一。这种沿目标函数梯度反方向求解极小化问题的方法一般称为快速下降法,表达式如下:
基于随机梯度算法的小均方自适应滤波算法的完整表达式如下:
LMS自适应算法是一种特殊的梯度估计。它不需要重用数据,也不需要运算相关矩阵和互相关矩阵。它只需要在每次迭代中使用输入向量和期望响应。它结构简单,易于实现。虽然LMS收敛速度慢,但LMS算法仍然是解决很多实际信号处理问题的好选择。
3 LMS算法的性能分析
人们对随机梯度LMS算法的性能进行了大量的研究。根据上一章提到的自适应滤波性能指标,假设输入信号和期望信号具有联合平稳性,详细讨论了基于横向FIR滤波器的标准LMS算法的四个性质一、收敛性;二、收敛速度;三、稳态误差;四、计算复杂度。只有当输入信号具有严格稳定的统计特性时,权向量的最优解才是不变的。否则会随着统计特征的变化而变化。自适应算法通过不断调整滤波器权向量,使权向量接近最优解。因此,平稳条件下自适应算法的性能可以认为是非平稳条件下的特例。如果自适应算法在平稳条件下能快速稳定地逼近权向量的最优值,那么该算法在非平稳条件下也能很好地逼近时变权向量的最优解。
五、算法流程下面介绍LMS算法的基本流程。
1.初始化,用随机初始值覆盖每个输入的权重;
2.随机选取一组训练数据,计算得到计算结构c;
3.通过公式3调整每个输入的权重;
4.计算均方误差MSE由公式1表示;
5.判断均方误差,如果大于给定值,返回步骤2,继续算法;如果它小于给定值,则
结构lms_testdata
{
双重输入;
双输出;
};
double compute _ output(常量double * inputs,double* weights)
{
双和=0.0;
for(int I=0;我《傻瓜;我)
{
总和=权重[我]*输入[I];
}
//偏差
sum=weights[nInputs]* 1.0;
返回总和;
}
//计算均方差
double calculate _ MSE(constlms _ testdata * testdata,double * weights)
{
双和=0.0;
for(int I=0;我《考试;我)
{
sum=pow(testdata[i]).输出-计算输出(testdata[I]).输入、权重),2);
}
返回sum/(double)ntest;
}
//对计算所得值,进行分类
int分类输出(双输出)
{
如果(输出>0.0)
返回1
其他
return-1;
}
int _tmain(int argc,_TCHAR* argv[])
{
lms_testdata testdata[nTests]={
{-1.0,-1.0, -1.0},
{-1.0, 1.0, -1.0},
{ 1.0,-1.0, -1.0},
{ 1.0, 1.0, 1.0}
};
double weights[nInputs 1]={ 0.0 };
while(caculate_mse(testdata,weights)》 0.26)//计算均方差,如果大于给定值,算法继续
{
inti test=rand()% n个测试;//随机选择一组数据
double output=compute _ output(测试数据[iTest]).投入、权重);
doubleerr=testdata[iTest].输出-输出;
//调整输入端的权值
for(int I=0;我《傻瓜;我)
{
weights[I]=weights[I]rho * err * testdata[iTest].投入[I];
}
weights[nInputs]=weights[nInputs]rho * err;
cout《MSE》:《calculate _ MSE(测试数据,权重)》endl
}
for(int w=0;w《nInputs 1;w)
{
cout《重量》杂志《重量》杂志《w》杂志:《重量》杂志《w》杂志《endl》
}
cout""\ n
for(int I=0;我《考试;我)
{
cout《正确结果:o》测试数据[I].输出”“t”;
cout《计算结果:》classify _ output(compute _ output(test data[I]).输入、权重))《endl
}
//
炭化温度;
CIN》《temp;
返回0;
}
声明本站所有作品图文均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们