matlab自带VMD详解,VMD去噪,VMD分解

news2024/12/27 10:38:09

为了更好的利用MATLAB自带的vmd函数,本期作者将详细讲解一下MATLAB自带的vmd函数如何使用,以及如何画漂亮的模态分解图。

首先给出官方vmd函数的调用格式。

[imf,residual,info] = vmd(x)

函数的输入:

这里的x是待分解的信号,一行或者一列都可以!

函数的输出:

第一个参数位置--imf:vmd分解得到的IMF分量。

第二个参数位置--residual:残余分量,残差表示原始信号x中未被vmd分解的部分。

第三个参数位置--info,是一个结构体,包含以下信息:

ExitFlag——终止标志。值0表示算法在达到最大迭代次数时停止。值为1表示算法在满足绝对和相对公差时停止。

CentralFrequencies——IMF的中心频率。

NumIterations——迭代总数。

AbsoluteImprovement——在最后两次迭代之间,IMF收敛的均方绝对改进。

RelativeImprovement——在最后两次迭代之间,IMF收敛的平均相对改进。

LagrangeMultiplier ——上一次迭代时的频域拉格朗日乘数。

示例:

以西储大学轴承故障的105.mat为例,进行vmd分解展示。代码如下:

clc
clear
fs=12000;%采样频率
Ts=1/fs;%采样周期
L=2000;%采样点数
t=(0:L-1)*Ts;%时间序列
%----------------导入内圈故障的数据-----------------------------------------
load 105.mat
X = X105_DE_time(1:L); %这里可以选取DE(驱动端加速度)、FE(风扇端加速度)、BA(基座加速度),直接更改变量名,挑选一种即可。
[imf,residual,info] = vmd(X);
figure(1);
[p,q] = ndgrid(t,1:size(imf,2));
plot3(p,q,imf)
grid on
xlabel('Time Values')
ylabel('Mode Number')
zlabel('Mode Amplitude')

选取105.mat的2000个采样点,进行分解,结果图如下所示:dcd68876b7b111ab47dc7793dd772ba2.png

还可以指定vmd的模态分解数和惩罚因子:

[imf,residual,info] = vmd(X,'NumIMF',6,'PenaltyFactor',2500,')

d219af08f1be7e912cd114017d4e59d7.png

可以看到,模态分解数变成了6个。

当分解模态数较多的时候,还可以这样画图:

clc
clear
fs=12000;%采样频率
Ts=1/fs;%采样周期
L=2000;%采样点数
t=(0:L-1)*Ts;%时间序列
%----------------导入内圈故障的数据-----------------------------------------
load 105.mat
X = X105_DE_time(1:L); %这里可以选取DE(驱动端加速度)、FE(风扇端加速度)、BA(基座加速度),直接更改变量名,挑选一种即可。
[imf,residual] = vmd(X,'NumIMF',9);
t1 = tiledlayout(3,3,TileSpacing="compact",Padding="compact");
for n = 1:9
    ax(n) = nexttile(t1);
    plot(t,imf(:,n)')
    xlim([t(1) t(end)])
    txt = ["IMF",num2str(n)];
    title(txt)
    xlabel("Time (s)")
end
title(t1,"Variational Mode Decomposition")

结果如下:

4830fe30f773179524c3497d5b8c1ce0.png

VMD去噪

对分解的信号进行重构,即为去噪,代码如下:

cleanX = sum(imf(:,2:8),2);
figure
plot(t,X,t,cleanX)
legend("Original X","Clean X")
xlabel("Time (s)")
ylabel("Signal")

这里选用IMF2-IMF8进行相加,丢弃了IMF1和IMF9。为什么要这么做呢,这是MATLAB官方文档给出的解释:

第一种模式包含最多的噪声,第二种模式是以重要特征的频率振荡。通过对除第一个和最后一个VMD模式之外的所有模式求和来构建干净的X信号,从而丢弃低频基线振荡和大部分高频噪声。

结果如下:

d7b1bd249897d3785c9aa74dd573684d.png

105.mat下载地址:https://engineering.case.edu/sites/default/files/105.mat

感觉作者总结还不错的,留个小小的赞吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1002145.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes Up and Running

从整体概念思想到具体组件对象的思想设计说明和实践探索,对分布式系统软件建设的认识更上一层楼。 英文版本下载 链接:https://pan.baidu.com/s/1ZjMqEMc3GGJxDc0ekz4ihA?pwdhjko 提取码:hjko 摘要 《Kubernetes Up and Running》是一本非…

前后端分离,JSON数据如何交互

如何接收: 在配置文件商法加上相应注解 EnableWebMvc 在接收的路径上加上RequestBody注解 注解的作用:在Spring框架中,RequestBody注解用于将HTTP请求的body中的内容转换为Java对象,并将其作为参数传递给控制器方法。它通常用…

【TCPDF】使用TCPDF导出PDF文件

目录 一、安装TCPDF类库 二、安装字体 三、使用TCPDF导出PDF文件 目的:PHP通过TCPDF类库导出文件为PDF。 开发语言及类库:ThinkPHP、TCPDF 效果图如下 一、安装TCPDF类库 在项目根目录使用composer安装TCPDF,安装完成后会在vendor目录下…

JAVAEE初阶相关内容第十一弹--多线程(进阶)

目录 一、常见的锁策略 1乐观锁VS悲观锁 1.1乐观锁 1.2悲观锁 2.轻量级锁VS重量级锁 2.1轻量级锁 2.2重量级锁 3.自旋锁VS挂起等待锁 3.1自旋锁 3.2挂起等待锁 4.互斥锁VS读写锁 4.1互斥锁 4.2读写锁 5.公平锁VS非公平锁 5.1公平锁 5.2非公平锁 6.可重入锁VS不…

记LGSVL Map Annotation(2)导入点云、以及地图

导入点云 内置的点云导入器工具提供了将最流行的点云文件格式(PCD、PLY、LAS、LAZ)转换为可用于仿真的数据所需的所有功能。 要访问点云导入器窗口,请在 Unity 编辑器中打开模拟器项目,然后导航到 Simulator/Import Point Cloud…

SpringCloud学习笔记(六)OpenFeign 服务接口调用

一、OpenFeign简介 1、OpenFeign是什么 Feign是一个声明式WebService客户端,使用Feign能让编写Web Service客户端更加简单。 它的使用方法是定义一个服务接口然后在上面添加注解,Feign也支持可拔插式的编码器和解码器,Spring Cloud对Feign进…

SolVES4.1学习2——导入数据运行模型

使用样例数据运行模型很容易,运行自己的数据要根据教程先对数据进行预处理之后根据教程导入数据。 首先新建一个solves数据库,之后restore。导入数据大概的流程为: 1、导入数据 首先使用PostGIS导入矢量数据。矢量数据包括点位和范围数据。…

grpc多语言通信之GO和DART

都是一个吗生的,找下例子 上一篇文章说到go实现的grpc方法已经实现了一个grpc的server端, 注意: 这两个项目的.proto文件应当是完全一致的,只是方法用各自的语言实现罢了 报错了: Caught error: gRPC Error (code: 12, codeName: UNIMPLEMENTED, message: grpc: Decompresso…

MySQL——命令行客户端的字符集问题

原因:服务器端认为你的客户端的字符集是utf-8,而实际上你的客户端的字符集是GBK。 查看所有字符集:SHOW VARIABLES LIKE character_set_%; 解决方案,设置当前连接的客户端字符集 “SET NAMES GBK;”

Nacos服务心跳和健康检查源码介绍

服务心跳 Nacos Client会维护一个定时任务通过持续调用服务端的接口更新心跳时间,保证自己处于存活状态,防止服务端将服务剔除,Nacos默认5秒向服务端发送一次,通过请求服务端接口/instance/beat发送心跳。 客户端服务在注册服务的…

论文解读 | 用于3D对象检测的PV-RCNN网络原创

原创 | 文 BFT机器人 01 背景 本文的背景涉及到3D物体检测,这是一个在自动驾驶和机器人等领域应用广泛的重要问题。在这些领域,LiDAR传感器被广泛用于捕捉3D场景信息,生成不规则且稀疏的点云数据。这些点云数据提供了理解和感知3D场景的关键…

QVector 和 QMap

QVector_QMap QVector简介 头文件&#xff1a;#include<QVector> 模块&#xff1a; QT core 功能&#xff1a; QVector类是动态数组的模板类&#xff0c;顺序容器&#xff0c;它将自己的每一个对象存储在连续的内存中&#xff0c;可以使用索引号来快速访问它们 常用…

【数据结构】树和二叉树概念

1.树概念及结构 树概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#xff0c;…

Android获取系统读取权限

在Androidifest.xml文件中加上授权语句 <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/>

Android12之/proc/pid/status参数含义(一百六十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【LeetCode题目详解】第九章 动态规划part13 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组 (day52补)

本文章代码以c为例&#xff01; 一、力扣第300题&#xff1a;最长递增子序列 题目&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改…

Scrum敏捷开发工具的基本概念、使用方法、优势以及实际应用案例

​随着软件开发行业的不断发展和进步&#xff0c;Scrum敏捷开发工具逐渐成为了备受关注的话题。 Scrum是一种灵活且高效的项目管理方法&#xff0c;旨在提高团队协作和交付效率&#xff0c;使团队能够更快地响应变化和需求。 本文将深入探讨Scrum敏捷开发工具的基本概念、使用…

分类预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元数据分类预测

分类预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-CNN-BiGRU多特征分类…

敏捷项目管理实践及敏捷工具

​敏捷项目管理是一种基于敏捷开发方法的项目管理方式&#xff0c;它强调快速响应变化、持续交付价值和高效的团队合作。 1、确定敏捷宣言的价值观和原则&#xff0c;例如“以人为本”、“可用的软件”、“以客户为中心”、“拥抱变化”等&#xff0c;并在项目中始终遵循这些价…

二维差分---基础算法

书接上回 a二维数组是b二维数组的前缀和数组,b二维数组是a二维数组的差分数组,也就是说a[i][j]b[1][1]b[1][2] ......b[i][1] b[i][2] ...... b[i][j] ,下图是b的二维数组 如图,当你想要整个矩阵中的一个子矩阵都加上一个C,如果我们将b[x1][x2]加上C,那么a数组右下角所有的…