基于LMS算法的自适应滤波



前言

姚天任、孙洪的《现代数字信号处理》第三章自适应滤波中关于LMS算法的学习,全文包括:

1.      自适应滤波器简介

2.      自适应干扰抵消原理

3.      自适应滤波原理

4.      最小均方LMS算法

5.      Matlab实现

内容为自己读书记录,本人知识有限,若有错误之处,还请各位指出!



一、自适应滤波器简介

自适应滤波器由参数可调的数字滤波器和自适应算法两部分组成。如图所示。

输入信号x(n) 通过参数可调数字滤波器后产生输出信号 y(n),将其与期望信号d(n)进行比较,形成误差信号e(n), 通过自适应算法对滤波器参数进行调整,最终使 e(n)的均方值最小。自适应滤波可以利用前一时刻已得的滤波器参数的结果,自动调节当前时刻的滤波器参数,以适应信号和噪声未知的或随时间变化的统计特性,从而实现最优滤波。自适应滤波器实质上就是一种能调节自身传输特性以达到最优的维纳滤波器。自适应滤波器不需要关于输入信号的先验知识,计算量小,特别适用于实时处理。维纳滤波器参数是固定的,适合于平稳随机信号。卡尔曼滤波器参数是时变的,适合于非平稳随机信号。然而,只有在信号和噪声的统计特性先验已知的情况下,这两种滤波技术才能获得最优滤波。在实际应用中,常常无法得到信号和噪声统计特性的先验知识。在这种情况下,自适应滤波技术能够获得极佳的滤波性能,因而具有很好的应用价值。

常用的自适应滤波技术有:最小均方(LMS)自适应滤波器、递推最小二乘(RLS)滤波器格型滤波器和无限冲激响应(IIR)滤波器等。这些自适应滤波技术的应用又包括:自适应噪声抵消、自适应谱线增强和陷波等。

二、 自适应干扰抵消原理

如图是自适应干扰抵消器的基本结构。其中期望响应d(n) 是信号与噪声之和,即自适应处理器的输入是与 相关的另一个噪声 。当 不相关时,利用噪声的相关性,自适应滤波器将调整自己的参数,以力图使成为 的最佳估计 。这样, 将逼近信号。噪声 就得到一定程度的抵消。但若参考通道除检测到噪声 外,还收到信号分量,则自适应滤波器的输出中将包含信号分量,从而使噪声对消效果变坏。因此,为获得良好的噪声对消性能,应使参考通道检测到的信号尽可能小,在信号不可测的噪声环境拾取参考输入信号。



三、自适应滤波原理

单输入情况:输入信号矢量           

输出                                                    (3.1)

自适应线性组合器的L+1个权系数构成一个权系数矢量,称为权矢量,用表示,

则(3.1)可表示为(3.2)

参考响应与输出响应之差称为误差信号,用表示,即

自适应线性组合器按照误差信号均方值(或平均功率)最小的准则,即

由式(3.3)和(3.4)可得均方误差表示式为

都是平稳随机信号的情况下,有如下定义:

输入信号自相关矩阵

期望信号与输入信号的互相关矩阵

则均方误差的简单表示形式

从该式可看出,在输入信号和参考响应都是平稳随机信号的前提下,均方误差是权矢量的各分量的二次函数。的函数图形是L+2维空间中一个中间下凹的超抛物面,有唯一的最低点,该曲面称为均方误差性能曲面,简称性能曲面。

均方误差性能曲面的梯度

令梯度等于零,可求得最小均方误差对应的最佳权矢量或维纳解

解得



四、最小均方(LMS)算法

最陡下降法是沿性能曲面最陡方向向下搜索曲面的最低点。曲面的最陡下降方向是曲面的负梯度方向。这是一个迭代搜索过程。最陡下降法迭代计算权矢量的公式为

最陡下降法每次迭代都需要知道性能曲面上某点的梯度值,而实际上梯度值只能根据观测数据进行估计。LMS算法是一种很有用且很简单的估计梯度的方法。只需要每次迭代运算时知道输入响应和参考信号。

LMS算法最核心的思想是用平方误差代替均方误差。

实际上,只是单个平方误差序列的梯度,而则是多个平方误差序列统计平均的梯度,所以LMS算法就是用前者作为后者的近视。由(4.1)可得

该式是LMS算法的基本关系式。该式说明,LMS算法实际上是在每次迭代中使用粗略的梯度估计值来代替精确值。不难预计,权系数的调整路径不可能准确地沿着理想的最陡下降的路径,因而权系数的调整过程是“有噪”的,或者说 不再是确定性函数而变成了随机变量。

下一刻权矢量等于当前权矢量加上一个修正量,该修正量等于误差信号的加权值,加权系数为,它正比于当前的输入信号。



五、Matlab实现

程序借用自[LMS算法自适应滤波器](https://www.cnblogs.com/void0/p/4197337.html)

1.LMS算法实现

% 迭代计算
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

LMSfilter.m  

% 输入参数:
%     xn   输入的信号序列      (列向量)
%     dn   所期望的响应序列    (列向量)
%     M    滤波器的阶数        (标量)
%     mu   收敛因子(步长)      (标量)     要求大于0,小于xn的相关矩阵最大特征值的倒数
% 输出参数:
%     W    滤波器的权值矩阵     (矩阵)
%          大小为M x itr,
%     en   误差序列(itr x 1)    (列向量)
%     yn   实际输出序列         (列向量)
function [yn,W,en]=LMSfilter(xn,dn,M,mu)
itr = length(xn);
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
% 求最优时滤波器的输出序列  r如果没有yn返回参数可以不要下面的
yn = inf * ones(size(xn)); % inf 是无穷大的意思
for k = M:length(xn)
    x = xn(k:-1:k-M+1);
    yn(k) = W(:,end).‘* x;%用最后得到的最佳估计得到输出
end

  

2. 主函数main,m设计

产生信号源,可以直接读取音频文件。

产生相关噪声,一个作为滤波输入,一个产生期望信号。

产生期望信号,信号源于噪声叠加产生含噪信号作为期望信号。

LMS滤波算法,调用LMSfilter.m函数。

绘制图形进行观察对比。

clc;
clear all;
close all;

%% 产生信号源
[X,Fs] = audioread(‘voicefile.wav‘);
s = X(:,1); %取出双通道中其中一个通道作为信号源s
audiowrite(‘原始音频.wav‘,s,Fs); %创建原始音频.wav
n = length(s);
t=(0:n-1);
figure(1);
subplot(4,1,1);
plot(t,s);grid;ylim([-2 2]);
ylabel(‘幅度‘);
xlabel(‘时间‘);
title(‘原始音频信号‘);
%% 产生均值为0方差为0.1的噪声信号
v = sqrt(0.1)*randn(n,1);

%% 产生AR模型的噪声
ar=[1,1/2];   %AR模型
v_ar=filter(1,ar,v);
% subplot(4,1,2);
% plot(t,v_ar);grid;
% ylabel(‘幅度‘);
% xlabel(‘时间‘);
% title(‘AR模型噪声信号‘);

%% 产生MA模型的噪声 是AR模型的相关噪声
ma=[1,-0.8,0.4,-0.2];  %MA模型
v_ma=filter(ma,1,v);
subplot(4,1,2);
plot(t,v_ma);grid;ylim([-2 2]);
ylabel(‘幅度‘);
xlabel(‘时间‘);
title(‘相关噪声信号‘);

%% 产生期望信号
dn = s + v_ar;
audiowrite(‘含噪音频.wav‘,dn,Fs); %创建含噪音频
subplot(4,1,3);
plot(t,dn);grid;ylim([-2 2]);
ylabel(‘幅度‘);
xlabel(‘时间‘);
title(‘含噪音频信号‘);

%% LMS滤波算法
M = 50;     %滤波器阶数M
mu = 0.0008;  %滤波器的步长
[ylms,W,elms] =LMSfilter(v_ma,dn,M,mu); 

%% 绘制去噪后的语音信号
subplot(4,1,4);
plot(t,elms);grid;ylim([-2 2]);
ylabel(‘幅度‘);
xlabel(‘时间‘);
title(‘去噪后的音频信号‘);
audiowrite(‘去噪音频.wav‘,elms,Fs);%保存去除噪声的音频

%%
e = s-elms;%剩余噪声
figure(2);
subplot(2,1,1);
plot(t,e);grid;
ylabel(‘幅度‘);
xlabel(‘时间‘);
title(‘剩余噪声‘);

%% 一小段三个信号比较
subplot(2,1,2);
t=(100000:100500);
plot(t,elms(100000:100500,1 ),‘r‘,t,e(100000:100500,1),‘g‘,t,s(100000:100500,1),‘b‘);
axis([100000,100500,-1,1]);
ylabel(‘幅度‘);
xlabel(‘时间‘);
legend(‘去噪后的语音信号‘,‘剩余噪声‘,‘原始音频‘);
title(‘一小段三个信号比较‘);

  

3.结果分析

步长$\mu=0.0001$时

步长$\mu=0.0004$时

步长$\mu=0.0012$时

从图中可以看出虽然真实的音频信号中混杂了很强的噪声,甚至噪声淹没了真实的信号,但是通过我们的LMS自适应滤波器后,可以很好的恢复出真实信号。所以自适应滤波器具有良好的去噪性能。

通过改变步长$\mu$,可以发现随着步长增加,收敛时间t逐渐减少,音频信号在$\mu$很小的时候,因为收敛慢,混有噪声;但是当$\mu$增加是,音频信号越来越清晰。但是当步长超过某一值时,音频中又开始很有噪声产生,再接着增加步长$\mu$,甚至会把音频信号也滤去掉。所以若$\mu$值取的过小,收敛速度就会过于缓慢,当$\mu$取的过大时,又会造成系统收敛的不稳定,导致发散。

参考:

姚天任、孙洪《现代数字信号处理》

Marty at HDU  LMS算法自适应滤波器

原文地址:https://www.cnblogs.com/augustine0654/p/10041313.html

时间: 2024-08-28 04:09:33

基于LMS算法的自适应滤波的相关文章

自适应滤波:最小均方误差滤波器(LMS、NLMS)

作者:桂. 时间:2017-04-02  08:08:31 链接:http://www.cnblogs.com/xingshansi/p/6658203.html 声明:欢迎被转载,不过记得注明出处哦~ [读书笔记08] 前言 西蒙.赫金的<自适应滤波器原理>第四版第五.六章:最小均方自适应滤波器(LMS,Least Mean Square)以及归一化最小均方自适应滤波器(NLMS,Normalized Least Mean Square).全文包括: 1)LMS与维纳滤波器(Wiener F

自适应滤波:维纳滤波器——GSC算法及语音增强

作者:桂. 时间:2017-03-26  06:06:44 链接:http://www.cnblogs.com/xingshansi/p/6621185.html 声明:欢迎被转载,不过记得注明出处哦~ [读书笔记04] 前言 仍然是西蒙.赫金的<自适应滤波器原理>第四版第二章,首先看到无约束维纳滤波,接着到了一般约束条件的滤波,此处为约束扩展的维纳滤波,全文包括: 1)背景介绍: 2)广义旁瓣相消(Generalized Sidelobe Cancellation, GSC)理论推导: 3)

LMS算法自适应滤波器

目录 1.自适应滤波器简介 2.自适应滤波噪声抵消原理 3.LMS算法原理 4.matlab实现 4.1.LMSfliter() 4.2.LMSmain() 5.结果分析 1.自适应滤波器简介 自适应滤波,就是利用前一时刻以获得的滤波器参数的结果,自动的调节现时刻的滤波器参数,以适应信号和噪声未知的或随时间变化的统计特性,从而实现最优滤波.自适应滤波器实质上就是一种能调节自身传输特性以达到最优的维纳滤波器.自适应滤波器不需要关于输入信号的先验知识,计算量小,特别适用于实时处理.维纳滤波器参数是固

基于Otsu算法的图像自适应阈值分割

在图像处理实践中,将灰度图转化为二值图是非常常见的一种预处理手段.在Matlab中,可以使用函数BW = im2bw(I, level)来将一幅灰度图 I,转化为二值图.其中,参数level是一个介于0~1之间的值,也就是用于分割图像的阈值.默认情况下,它可取值是0.5. 现在问题来了,有没有一种根据图像自身特点来自适应地选择阈值的方法呢?答案是肯定的!我们今天就来介绍其中最为经典的Otsu算法(或称大津算法).该算法由日本科学家大津展之(Nobuyuki Otsu)于1979年提出.这个算法看

自适应滤波——第二章:维纳滤波器(1)

作者:桂. 时间:2017-03-23  06:28:45 链接:http://www.cnblogs.com/xingshansi/p/6603263.html 声明:欢迎被转载,不过记得注明出处哦~ 前言 仍然是西蒙.赫金的<自适应滤波器原理>第四版,距离上次看这本书已经过去半个月,要抓点紧了.本文主要包括: 1)何为维纳滤波器(Wiener Filter); 2)Wiener滤波器的推导: 内容为自己的学习总结,内容多有参考他人,最后一并给出链接. 一.维纳滤波器简介 A-基本概念 对于

LMS算法

一.感知器算法和LMS算法 感知器和自适应线性元件在历史上几乎是同时提出的,并且两者在对权值的调整的算法非常相似.它们都是基于纠错学习规则的学习算法. 感知器算法存在如下问题:不能推广到一般的前向网络中:函数不是线性可分时,得不出任何结果. 而由美国斯坦福大学的Widrow和Hoff在研究自适应理论时提出的LMS算法,由于其容易实现而很快得到了广泛应用,成为自适应滤波的标准算法. 二.算法流程 1.设置变量和参量: X(n)为输入向量,或称为训练样本 W(n)为权值向量 e(n)为偏差 d(n)

LMS算法去噪

LMS在语音增强中具备广泛的应用,是最为常见的算法之一,该算法也是很多更为复杂算法的理论基础或 组成部分,例如阵列语音增强中的重要方法--GSC(广义旁瓣抵消).LMS算法由最初的版本延伸出来许多变种结构,例如归一化LMS,变步长LMS等等.这些都是对LMS的迭代部分进行了一定的优化所得. 最近又看起了GSC的实现,以前写的程序又重新看了一遍,差不多又巩固了一遍,希望以后自己能够不要忘记了····我这个破记性,有时候真是很无奈! 首先是理论部分推导,在此不详述,简要给出流程: 自适应线性组合器及

自适应滤波

应用: ① ② ③ 公式: 自适应滤波器中最重要的一个环节就是其系数的更新算法,如果不对自适应滤波器的系数更新的话,那么它就只是一个普通的FIR滤波器了.系数更新算法有很多种类,最基本.常用.简单的一种方法叫做NLMS(归一化最小均方),让我们先来看看它的数学公式表达: 设置自适应滤波器系数h的所有初始值为0,h的长度为I. 对每个取样值进行如下计算,其中n=0, 1, 2, ... 自适应滤波器系数 是一个长度为I的矢量,也就是一个长度为I的FIR滤波器.在时刻n,滤波器的每个系数对应的输入信

#研发解决方案#基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案

郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档适用人员:技术人员 提纲: 所谓异常流量 如何识别异常流量 Apriori如何工作 如何让 Nginx 拦截可疑 IP 0x00,所谓异常流量 有害的异常流量大概分为以下几种: 僵尸网络中的节点对主站发起无目的的密集访问: 黑客.白帽子或某些安全公司为了做漏洞扫描,对主站各个 Web 工程发起字典式