自适应滤波器解决非平稳的过程,因为实际信号的统计特性可能是非平稳的或者是未知的。自适应滤波,就是利用前一时刻获得的滤波器参数的结果,自动的调节现时刻的滤波器参数,以适应信号和噪声未知的或随时间变化的统计特性,从而实现最优滤波,应用于:噪声抵消、回声抵消、谱线增强、通道均衡、系统辨识、时间延迟估计。

       自适应滤波器实质上就是一种能调节自身传输特性以达到最优的维纳滤波器。自适应滤波器不需要关于输入信号的先验知识,计算量小,特别适用于实时处理。常用的自适应滤波技术有:最小均方(LMS)自适应滤波器、递推最小二乘(RLS)滤波器格型滤波器和无限冲激响应(IIR)滤波器等。这些自适应滤波技术的应用又包括:自适应噪声抵消、自适应谱线增强和陷波等。

       维纳滤波器参数是固定的,适合于平稳随机信号。卡尔曼滤波器参数是时变的,适合于非平稳随机信号。但是只有在信号和噪声的统计特性先验已知的情况下,这两种滤波技术才能获得最优滤波。在实际应用中,常常无法得到信号和噪声统计特性的先验知识。在这种情况下,自适应滤波技术能够获得极佳的滤波性能,因而具有很好的应用价值。

自适应滤波器的特点:

    1.没有关于待提取信息的先验统计知识

    2.直接利用观测数据依据某种判据在观测过程中不断递归更新

    3.最优化

自适应滤波算法有几种应用类型,不同类型的目的、原理和手段不同,所以相对应的选取输入和期望信号也很不一样。

1.系统辨识:当需要描述一个未知系统,解析的算出系统的冲击响应或者系统函数是比较困难的。这时,我们就可以用未知系统的输入和输出训练自适应滤波器(未知系统的输入作为自适应滤波器的输入,未知系统的输出作为自适应滤波器的期望信号,当自适应滤波器收敛后,对应的滤波器就可以看做是未知系统的近似)。

                                                     
2.逆系统辨识:在这类应用中,自适应滤波器的作用是提供一个逆模型,该模型可在某种意义上最好拟合未知噪声装置。理想的在线性系统的情况下,该逆模型具有等于未知装置转移函数倒数的转移函数,使得二者的组合构成一个理想的传输媒介。该系统输入的延迟构成自适应滤波器的期望响应。在某些应用中,该系统输入不加延迟地用做期望响应。

                                                        

3.预测:自适应滤波器的作用是对随机信号的当前值提供某种意义上的一个最好预测。于是,信号的当前值用作自适应滤波器的期望响应。信号的过去值加到滤波器的输入端。取决于感兴趣的应用,自适应滤波器的输出或估计误差均可作为系统的输出。在第一种情况下,系统作为一个预测器;而在后一种情况下,系统作为预测误差滤波器。

                                                  

4.噪声消除: 自适应滤波器以某种意义上的最优化方式消除包含在基本信号中的未知干扰。基本信号用作自适应滤波器的期望响应,参考信号用作滤波器的输入。参考信号来自定位的某一传感器或一组传感器,并以承载新息的信号是微弱的或基本不可预测的方式,供给基本信号上。这种类型自适应滤波器的输入信号为噪声源,期望信号信号为含有噪声的信号源。经过多次迭代后,期望信号和自适应滤波器的输出信号之差就是信号源的估计。

                                  

     上图给出了用自适应噪声抵消技术来解决噪声背景中的信号提取问题的基本原理。主输入端接收从信号源发来的信号s但是受到噪声源的干扰收到噪声vo。参考输入端的参考信号为u2是一个与有用信号s无关但与u相关的噪声信号。主输入中含有待抵消的加性噪声,参考输入对准主输入中的噪声vo。利用两输入噪声的相关性和信号与噪声的独立性,使参考输入通过自适应滤波器与主输入中噪声分量逼近并相减,输出误差信号。自适应滤波算法决定滤波器对参考信号 u2的处理,使得滤波器的输出尽可能地逼近主输入中的干扰成分。所以在最佳准则意义下滤波器的输出u逼近u1等效于系统的输出e逼近s。从而在噪声对消器的输出端大大地提高了信噪比。但若参考通道除检测到噪声 u2外,还收到信号分量,则自适应滤波器的输出中将包含信号分量,从而使噪声对消效果变坏。因此,为获得良好的噪声对消性能,应使参考通道检测到的信号尽可能小,在信号不可测的噪声环境拾取参考输入信号。

from:https://www.zhihu.com/question/28603557

去噪有两种情况:

1、已知带噪信号为输入信号,已知噪声为参考信号。

2、仅知道带噪信号:这种情况下,带噪信号作为参考信号,然后对带噪信号进行延迟处理,延迟的信号作为输入信号。这样做的目的是假定在延迟的时间段内,信号仍是相关的,但噪声却不相关。通过去相关来去除噪声分量,一次延迟的时间需要设置合理。参考某论文。。。

自适应滤波--LMS(Least Mean Square)算法

     最小均方自适应滤波,通过两路信号,一路为参考信号d,另一路信号通过滤波器(H)估计出d',d'和参考信号d之间要满足均方误差最小的判据,而初始状态下滤波器系数设置为W(0),得到的结果d'不满足误差最小的判据,此时采用自适应优化算法去调节滤波器系数W,在不断的迭代计算后,找到这样的W*,使得估计的d'和期望得到的d误差最小,而采取的最优化算法为随机梯度下降,也即是每进一个新数据x(t)求取它梯度并计算W,在这过程中x(t)和d(t)的误差是对应的。

LMS实质上就是一种求最优的算法,为了使误差函数e(n)最小,与自适应滤波的关系已经不大了(自适应滤波主要体现在如何构造误差e(n)上)。

LMS算法步骤:

除了最小均方自适应滤波器(LMS),还有一种改进的归一化最小均方自适应滤波器(NLMS,Normalized Least Mean Square):

NLMS算法步骤:

推导详情可参见:https://www.cnblogs.com/xingshansi/p/6658203.html#


MATLAB自带自适应滤波器实现

dsp.LMSFilter():实现了一个自适应FIR滤波器对象,该对象返回 滤波后的输出、误差向量和滤波器权重。 LMS过滤器可以实现五种不同的LMS算法。

H = dsp.LMSFilter('PropertyName',PropertyValue,...)返回一个LMS过滤器对象H,每个属性均设置为指定值。

H = dsp.LMSFilter(LEN,'PropertyName',PropertyValue,...)返回长度属性设置为LEN的LMS过滤器对象H,以及其他指定属性dsp.LMSFilter System对象。

Properties:

Method

计算过滤器权重的方法,用于计算过滤器权重的方法指定为 LMSNormalized LMSSign-Error LMSSign-Data LMS, or Sign-Sign LMS. 默认 LMS.

Length

FIR滤波器权重向量的长度,将FIR滤波器权重向量的长度指定为正整数。默认值为32。

StepSizeSource

如何指定自适应步长,将如何将自适应步长因子指定为“ Property”或“Input port”。默认值为 Property,即固定步长

StepSize

适应步长,将自适应步长因子指定为非负实数。为了使normalized LMS方法收敛,请将步长设置为大于0且小于2。仅当StepSizeSource属性为Property时,此属性才适用。默认值为0.1,可调的。

LeakageFactor

泄漏因子,LMS滤波器中使用的泄漏系数,将泄漏因子指定为介于0和1之间(含0和1)的实数。泄漏系数为1表示在适配方法中没有泄漏。默认值为1。此属性可调。

InitialConditions

初始条件,过滤器重量的初始条件。将FIR滤波器权重的初始值指定为标量或长度等于“ Length”属性值的向量。默认值为0。

AdaptInputPort

启用权重适应
指定LMS滤波器何时应调整过滤器权重。默认情况下,此属性的值为false,并且该对象不断更新过滤器权重。如果将此属性设置为true,则将自适应控制输入提供给step方法。如果此输入的值不为零,则对象将连续更新过滤器权重。如果输入为零,则过滤器权重保持在其当前值。

WeightsResetInputPort

启用权重重置
指定何时LMS过滤器应重置过滤器权重。默认情况下,此属性的值为false,并且该对象不会重置权重。如果将此属性设置为true,则将重置控制输入提供给step方法,并且应用WeightsResetCondition属性。该对象根据WeightsResetCondition属性的值以及对step方法的重置输入来重置过滤器权重。

WeightsResetCondition

重置过滤器权重的触发设置
指定事件以将过滤器权重重置为 Rising edgeFalling edgeEither edge, or Non-zero。 LMS过滤器会根据此属性的值以及对step方法的重置输入来重置过滤器权重。仅当WeightsResetInputPort属性为true时,此属性才适用。默认值为 Non-zero.

WeightsOutputPort

启用返回过滤器权重
将此属性设置为true以输出调整后的过滤器权重。默认值为true。

%%自适应滤波器工具箱初始化设置

lms = dsp.LMSFilter
%% 基本设置
lms.Method='Normalized LMS';%使用方法:LMS,Normalized LMS ; Sign-Data LMS ; Sign-Error LMS ; Sign-Sign LMS
lms.Length=16;%使用的FIR滤波器长度L,抽头数
lms.StepSizeSource='Property';%'Property'为固定步长,如果使用设定步长方式为'Input port'
lms.StepSize=0.1;%步长mu大小,可使用'maxstep'方式来获取最大步长,仅在'Property'模式下使用
    %[mumax,mumaxmse] = maxstep(lmsFilt,x);%获取最大步长的方式
lms.LeakageFactor=1;%泄露因子,当值为1是普通LMS,不含有泄露参数,当值在[0,1]之间时为泄露LMS
lms.InitialConditions=[1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 ];%初始权值w设置,长度需要和Length一致


%% 使用方法
% [y,err,wts] = lms(x,d,mu,a,r);%输入信号x,期望信号d,步长mu(当StepSizeSource为Input port形式时激活),
%自适应控制系数a(当AdaptInputPort='ture'时激活),复位信号r,信号输出为y,误差函数err,自适应权值wts
%% 最大步长
[mumax,mumaxmse] = maxstep(lms,x);%lms为预设好的最小均方误差滤波器,x为输入信号,当为NLMS时mumax=2,mumin=2

%% 预测最小均方误差的误差信号
[mmseemse,meanw,mse,tracek] = msepred(lms,x,d,m);
%返回值mmse
%最小均方误差,这个参数是用维纳滤波器估计的,是为维纳滤波器输出的信号与期望信号之间的均方误差
%较大的均方误差表明自适应滤波器不能准确的跟踪期望信号,最小的均方误差表征了自适应滤波器是最优的。
%将期望信号的特定帧与滤波后的信号之间的最小均方误差计算为两帧信号之间的方差。
%msepred函数输出所有帧的mmse值的平均值。

%返回值emse
%该误差是自适应滤波器引入的均方误差与相应维纳滤波器产生的最小均方误差之差。

%meanw
%系数向量序列表示自适应滤波器在各时刻的瞬时值,以矩阵形式返回。
%该矩阵的列包含LMS自适应滤波系数在每一时刻的平均值的预测。如果抽取因子m = 1,均值的维数为m×n。M是输入信号的帧大小(行数),
%x. N是FIR滤波器权向量的长度,由lmsFilt系统对象的length属性指定。如果m > 1,均值的维数为m /m×n。

%tracek
%预测LMS自适应滤波器在每一时刻的总系数误差功率,以列向量的形式返回。
%这些值由系数协方差矩阵的迹给出。协方差可以用来衡量两个变量间的相似性.


用LMS去除噪声: 

lms2 = dsp.LMSFilter('Length',11, ...
   'Method','Normalized LMS',...
   'AdaptInputPort',true, ...
   'StepSizeSource','Input port', ...
   'WeightsOutputPort',false);
filt2 = dsp.FIRFilter('Numerator', fir1(10,[.5, .75]));
x = randn(1000,1); % Noise
d = step(filt2,x) + sin(0:.05:49.95)'; % Noise + Signal
a = 1; % adaptation control
mu = 0.05; % step size
[y, err] = step(lms2,x,d,mu,a);

subplot(2,1,1);
plot(d);
title('Noise + Signal');
subplot(2,1,2);
plot(err);
title('Signal');

 

LMS用于回声消除实验数据的产生与分离:https://blog.csdn.net/ljl86400/article/details/80542784

LMS自适应滤波代码参见:https://blog.csdn.net/m1f2c3/article/details/89709050

LMS自适应滤波代码参见:https://www.cnblogs.com/void0/p/4197337.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐