Matlab自适应滤波算法 LMS小白通俗易懂版

这篇具有很好参考价值的文章主要介绍了Matlab自适应滤波算法 LMS小白通俗易懂版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Matlab自适应滤波算法

在学习自适应算法的过程中,入门阶段,学习了LMS算法、NLMS算法,并用Matlab对算法进行了复现。

LMS

最小均方(LMS)是一种搜索算法,它通过对目标函数进行适当修改,以便简化梯度向量的计算,由于其计算简单,LMS算法及与之相关的其他算法,已经广泛应用于自适应滤波的各种的应用中。

先写一下官方给的算法公式


I n i t i a l i z e : Initialize: Initialize:
x ( 0 ) = w ( 0 ) = [ 0   0   0   ⋅ ⋅ ⋅ ⋅ ⋅   0   0   0 ] T x(0)=w(0)=[0\,0\,0 \,·····\,0\,0\,0]^T x(0)=w(0)=[000⋅⋅⋅⋅⋅000]T

f o r    i = 1 : k for \,\,i = 1:k fori=1:k
e ( k ) = d ( k ) − x T ( k ) w ( k ) \quad e(k) = d(k)-x^T(k)w(k) e(k)=d(k)xT(k)w(k)
w ( k + 1 ) = w ( k ) + 2 μ e ( k ) x ( k ) \quad w(k+1) = w(k)+2\mu e(k)x(k) w(k+1)=w(k)+2μe(k)x(k)
e n d end end


介绍算法变量

注意 x x x不是原信号, x x x是来自于原信号中与权重长度一致的与权重进行运算的数据

w w w为权重,首先需要对输入信号和权重进行初始化
x ( 0 ) = w ( 0 ) = [ 0   0   0   ⋅ ⋅ ⋅ ⋅ ⋅   0   0   0 ] T x(0)=w(0)=[0\,0\,0 \,·····\,0\,0\,0]^T x(0)=w(0)=[000⋅⋅⋅⋅⋅000]T
k k k是迭代次数
d ( k ) d(k) d(k)为期望信号的第 k k k个值
e e e是存储每一次迭代误差的一个向量, e ( k ) e(k) e(k)为第k次迭代的理想信号与经过滤波器(输入信号与权重相乘)的输入信号的结果做差
e ( k ) = d ( k ) − x T ( k ) w ( k ) e(k) = d(k)-x^T(k)w(k) e(k)=d(k)xT(k)w(k)
计算出对应的迭代误差后,使用该误差结合一个更新步长 μ \mu μ对权重进行更新
w ( k + 1 ) = w ( k ) + 2 μ e ( k ) x ( k ) w(k+1) = w(k)+2\mu e(k)x(k) w(k+1)=w(k)+2μe(k)x(k)

梳理完算法的结构对算法进行复现

  • 第一步生成一个理想信号
t = 0.1:0.1:100; %时间轴
signal_len = length(t);%信号长度
d = sin(t);%理想信号
plot(t,d)
xlabel('时间')
ylabel('幅度')
title('理想信号')

matlab 自适应滤波,matlab,算法

  • 第二步生成一个随机高斯白噪声
t = 0.1:0.1:100; %时间轴
noise = 0.1*randn(1,signal_len);%噪声

plot(t,noise)
xlabel('时间')
ylabel('幅度')
title('噪声')

matlab 自适应滤波,matlab,算法

  • 第三步生成含有噪声的信号
t = 0.1:0.1:100; %时间轴
signal_len = length(t);%信号长度
d = sin(t);%理想信号

noise = 0.1*randn(1,signal_len);%噪声
d_noise =  d+noise;%要过滤的信号-加了噪声的信号

plot(t,d_nosie)
xlabel('时间')
ylabel('幅度')
title('含噪信号')

matlab 自适应滤波,matlab,算法

  • 第四步初始化需要的变量
filter_len = 50;  %滤波器长度
W = zeros(1,filter_len); %初始化滤波器
x = zeros(1,filter_len); %初始化卷积输入
After_filter = zeros(1,signal_len);%用于存储滤波之后的信号
e = zeros(1,signal_len); %初始化误差
mull = 0.03; %步长

除了算法公式中给到的 x x x w w w之外还要定义一个训练步长以及滤波器长度,以及存储误差的变量。

  • 第五步编写算法主体
for k =1:signal_len
    x = [d_noise(k) x(1:filter_len-1)]; %线性卷积的输入
    After_filter(k) = W*x';
    e(k) =d(k) - After_filter(k);%计算误差
    W = W + 2*mull*e(k)*x; %计算误差更新权重
end

解释一下改句的运行原理,LMS算法中的输入信号实际上是用于和滤波器也就是权重进行卷积的信号需要将理想信号中的数据进行部分截取然后再翻转

 x = [d_noise(k) x(1:filter_len-1)]; %线性卷积的输入

这里先介绍一下Matlab的合并语法,如果将两个向量间隔一个空格放到一个中括号里实际上就是对这两个数据在横向上进行拼接。
matlab 自适应滤波,matlab,算法
然后模拟一下线性卷积的输入循环,下图展示了改代码机制是如果对原信号进行边位移边反转还能截取固定长度的功能,这块要是不清楚的话,可以去看下卷积的原理。
matlab 自适应滤波,matlab,算法

  • 第六步绘图
    将理想信号含噪信号误差信号以及去噪信号放到一起进行输出
subplot(411)
plot(d)
title('LMS')
xlabel('理想信号')

subplot(412)
plot(d_noise)
xlabel('含噪原信号')

subplot(413)
plot(e)
xlabel('误差')

subplot(414)
plot(After_filter)
xlabel('去噪信号')

matlab 自适应滤波,matlab,算法

完整代码

clc;%清除工作区
clear;%清除命令窗口

t = 0.1:0.1:100; %时间轴
signal_len = length(t);%信号长度
d = sin(t);%理想信号

noise = 0.1*randn(1,signal_len);%噪声
d_noise =  d+noise;%要过滤的信号-加了噪声的信号

filter_len = 50;  %滤波器长度
W = zeros(1,filter_len); %初始化滤波器
x = zeros(1,filter_len); %初始化卷积输入
After_filter = zeros(1,signal_len);%用于存储滤波之后的信号
e = zeros(1,signal_len); %初始化误差
mull = 0.03; %步长


for k =1:signal_len
    x = [d_noise(k) x(1:filter_len-1)]; %线性卷积的输入
    After_filter(k) = W*x';
    e(k) =d(k) - After_filter(k);%计算误差
    W = W + 2*mull*e(k)*x; %计算误差更新权重
end

figure(1)
subplot(411)
plot(t,d)
title('LMS')
xlabel('理想信号')

subplot(412)
plot(t,d_noise)
xlabel('含噪原信号')

subplot(413)
plot(t,e)
xlabel('误差')

subplot(414)
plot(t,After_filter)
xlabel('去噪信号')

总结

在论文对比中需要用到MSE指标等,并需要进行蒙特卡洛实验。同时下一步会继续更新NLMS算法。
如果需要,可以关注我们的微信公众号《浩浩的科研笔记》可以下载,有问题留言。文章来源地址https://www.toymoban.com/news/detail-783297.html

到了这里,关于Matlab自适应滤波算法 LMS小白通俗易懂版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 现代信号处理——自适应滤波器(LMS自适应滤波器)

    一、自适应滤波简介 维纳滤波存在的问题: 适用于平稳随机信号的最佳滤波,对于非平稳的随机信号,其统计特性(相关函数)是随机的,因此无法估计其相关函数,此时的维纳滤波不适用; 维纳滤波器的参数是固定的,就不可能根据输入信号的变换去自动调整滤波器的参

    2024年02月01日
    浏览(37)
  • 40行MATLAB代码实现卡尔曼滤波-简单易懂

    最近学习了卡尔曼滤波,体会到了数据融合下进行最优估计的思想。如果你也是小白,可以通过这个例子自己动手感受数据融合。 学习资料参考B站大神DR_CAN博士,连接: 【卡尔曼滤波器】直观理解与二维实例 基于上述视频中Excel的例子,使用MATLAB编写了一个简单的卡尔曼滤

    2024年02月04日
    浏览(41)
  • 基于变分贝叶斯的自适应卡尔曼滤波(matlab)

        参考文献《Recursive Noise Adaptive Kalman Filtering by Variational Bayesian Approximations》中的算法,用matlab编写了一个小程序测试了一下(demo版本)。程序是按照文章中的内容实现的。     下面是主程序:     下面是调用到的几个函数:     函数一(cholesky分解,

    2024年02月11日
    浏览(34)
  • 【状态估计】变分贝叶斯近似的递归噪声自适应卡尔曼滤波(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码及文献 文献来

    2024年02月09日
    浏览(32)
  • 小白入门区块链(通俗易懂)

    区块链基础入门 什么是区块链 科技层面解释 数学,密码学,互联网,计算机编程 官方解释 区块链是一个分布式的共享账本和数据库,具有去中心化,不可篡改,全程留痕,可以追溯,集体维护,公开通明的特点分布式数字账簿,加密技术,不可篡改,通证(一种以数字形

    2024年02月08日
    浏览(32)
  • 基于自适应扩展卡尔曼滤波器(AEKF)的锂离子电池SOC估计(附MATLAB代码)

    AEKF_SOC_Estimation函数使用二阶RC等效电路模型(ECM)和自适应扩展卡尔曼滤波器(AEKF)估计电池的端电压(Vt)和充电状态(SOC)。该函数将以下内容作为输入:  · 电流(A) · 电压(V) · 温度(℃) 该函数的输出为: ·  估计SOC · 估计电压Vt · 电压Vt误差 加载电池模型参数以及不

    2023年04月23日
    浏览(31)
  • Android Studio入门级教程(详细)【小白必看】[通俗易懂]

    Android Studio如何使用 本文主要讲解一下Android Studio使用方法 步骤: 1.建立项目 首先点击new——new project新建项目 选择想要创建的Android 的模板,建议选择empty activity(空模板),然后next Name:给你的项目起一个名字 API level:选择Android 虚拟机的版本,版本越低运行起来越快 剩

    2024年02月08日
    浏览(41)
  • 【MATLAB】 HANTS滤波算法

    有意向获取代码,请转文末观看代码获取方式~ HANTS滤波算法是一种时间序列谐波分析方法,它综合了平滑和滤波两种方法,能够充分利用遥感图像存在时间性和空间性的特点,将其空间上的分布规律和时间上的变化规律联系起来。该算法在进行影像重构时,充分考虑了植被生

    2024年01月16日
    浏览(29)
  • 滤波算法 | 无迹卡尔曼滤波(UKF)算法及其MATLAB实现

    本文接着分享位姿跟踪和滤波算法中用到的一些常用程序,希望为后来者减少一些基础性内容的工作时间。以往分享总结见文章:位姿跟踪 | 相关内容目录和链接总结(不断更新中~~~) 本文分享无迹卡尔曼滤波(UKF)算法的一些基本公式和MATLAB程序。 首先简单介绍一下UKF滤

    2023年04月15日
    浏览(36)
  • 深度学习:使用nanodet训练自己制作的数据集并测试模型,通俗易懂,适合小白

    关于目标检测的模型有很多, nanodet 模型小且轻量化,适合移植部署到硬件设备上,非常推荐学习这个模型。经过我自己踩了无数坑后总结了此教程,助学刚接触nanodet,想要快速上手的学者,教程很详细,学者耐心看。 我提供了一个已经调试好的源码包,后面的教程也都是

    2024年02月15日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包