VMD分解,matlab代码,包络线,包络谱,中心频率,峭度值,能量熵,样本熵,模糊熵,排列熵,多尺度排列熵,近似熵,包络熵,频谱图,希尔伯特变换,包含所有程序MATLAB代码,-西储大学数据集为例

article/2025/9/25 18:35:06

目录

目录

1.选取数据

2.VMD函数-matlab代码  

3.采用matlab脚本导入数据并做VMD分解 

4.计算中心频率

5.结果展示 

6.智能算法优化VMD参数

1.选取数据

选取1797转速下的内圈故障数据,也就是105.mat,数据集可以在官网下载。下载数据文件|凯斯工程学院 |凯斯西储大学 (case.edu)https://engineering.case.edu/bearingdatacenter/download-data-file

9469c8834fd94fa0bc3c886924142009.png

2.VMD函数-matlab代码  

VMD函数的matlab代码实现,该代码作为函数实现,无需修改,直接使用即可。

function [u, u_hat, omega] = VMD(signal, alpha, tau, K, DC, init, tol)
% Variational Mode Decomposition% Input and Parameters:
% ---------------------
% signal  - the time domain signal (1D) to be decomposed
% alpha   - the balancing parameter of the data-fidelity constraint 惩罚因子
% tau     - time-step of the dual ascent ( pick 0 for noise-slack )
% K       - the number of modes to be recovered 模态分量
% DC      - true if the first mode is put and kept at DC (0-freq)
% init    - 0 = all omegas start at 0
%                    1 = all omegas start uniformly distributed
%                    2 = all omegas initialized randomly
% tol     - tolerance of convergence criterion; typically around 1e-6
%
% Output:
% -------
% u       - the collection of decomposed modes
% u_hat   - spectra of the modes
% omega   - estimated mode center-frequencies%---------- Preparations
% Period and sampling frequency of input signal
save_T = length(signal);
fs = 1/save_T;% extend the signal by mirroring
T = save_T;
f_mirror(1:T/2) = signal(T/2:-1:1);
f_mirror(T/2+1:3*T/2) = signal;
f_mirror(3*T/2+1:2*T) = signal(T:-1:T/2+1);
f = f_mirror;% Time Domain 0 to T (of mirrored signal)
T = length(f);
t = (1:T)/T;% Spectral Domain discretization
freqs = t-0.5-1/T;% Maximum number of iterations (if not converged yet, then it won't anyway)
N = 500;% For future generalizations: individual alpha for each mode
Alpha = alpha*ones(1,K);% Construct and center f_hat
f_hat = fftshift((fft(f)));
f_hat_plus = f_hat;
f_hat_plus(1:T/2) = 0;% matrix keeping track of every iterant // could be discarded for mem
u_hat_plus = zeros(N, length(freqs), K);% Initialization of omega_k
omega_plus = zeros(N, K);
switch initcase 1for i = 1:Komega_plus(1,i) = (0.5/K)*(i-1);endcase 2omega_plus(1,:) = sort(exp(log(fs) + (log(0.5)-log(fs))*rand(1,K)));otherwiseomega_plus(1,:) = 0;
end% if DC mode imposed, set its omega to 0
if DComega_plus(1,1) = 0;
end% start with empty dual variables
lambda_hat = zeros(N, length(freqs));% other inits
uDiff = tol+eps; % update step
n = 1; % loop counter
sum_uk = 0; % accumulator% ----------- Main loop for iterative updateswhile ( uDiff > tol &&  n < N ) % not converged and below iterations limit% update first mode accumulatork = 1;sum_uk = u_hat_plus(n,:,K) + sum_uk - u_hat_plus(n,:,1);% update spectrum of first mode through Wiener filter of residualsu_hat_plus(n+1,:,k) = (f_hat_plus - sum_uk - lambda_hat(n,:)/2)./(1+Alpha(1,k)*(freqs - omega_plus(n,k)).^2);% update first omega if not held at 0if ~DComega_plus(n+1,k) = (freqs(T/2+1:T)*(abs(u_hat_plus(n+1, T/2+1:T, k)).^2)')/sum(abs(u_hat_plus(n+1,T/2+1:T,k)).^2);end% update of any other modefor k=2:K% accumulatorsum_uk = u_hat_plus(n+1,:,k-1) + sum_uk - u_hat_plus(n,:,k);% mode spectrumu_hat_plus(n+1,:,k) = (f_hat_plus - sum_uk - lambda_hat(n,:)/2)./(1+Alpha(1,k)*(freqs - omega_plus(n,k)).^2);% center frequenciesomega_plus(n+1,k) = (freqs(T/2+1:T)*(abs(u_hat_plus(n+1, T/2+1:T, k)).^2)')/sum(abs(u_hat_plus(n+1,T/2+1:T,k)).^2);end% Dual ascentlambda_hat(n+1,:) = lambda_hat(n,:) + tau*(sum(u_hat_plus(n+1,:,:),3) - f_hat_plus);% loop countern = n+1;% converged yet?uDiff = eps;for i=1:KuDiff = uDiff + 1/T*(u_hat_plus(n,:,i)-u_hat_plus(n-1,:,i))*conj((u_hat_plus(n,:,i)-u_hat_plus(n-1,:,i)))';enduDiff = abs(uDiff);end%------ Postprocessing and cleanup% discard empty space if converged early
N = min(N,n);
omega = omega_plus(1:N,:);% Signal reconstruction
u_hat = zeros(T, K);
u_hat((T/2+1):T,:) = squeeze(u_hat_plus(N,(T/2+1):T,:));
u_hat((T/2+1):-1:2,:) = squeeze(conj(u_hat_plus(N,(T/2+1):T,:)));
u_hat(1,:) = conj(u_hat(end,:));u = zeros(K,length(t));for k = 1:Ku(k,:)=real(ifft(ifftshift(u_hat(:,k))));
end% remove mirror part
u = u(:,T/4+1:3*T/4);% recompute spectrum
clear u_hat;
for k = 1:Ku_hat(:,k)=fftshift(fft(u(k,:)))';
endend

3.采用matlab脚本导入数据并做VMD分解 

该段代码将内圈故障数据导入,并进行了VMD分解。其中得到的u即为分解出来的IMF分量。

clc
clear 
fs=12000;%采样频率
Ts=1/fs;%采样周期
L=1500;%采样点数
t=(0:L-1)*Ts;%时间序列
STA=1; %采样起始位置
%----------------导入内圈故障的数据-----------------------------------------
load 105.mat
X = X105_DE_time(1:L)'; %这里可以选取DE(驱动端加速度)、FE(风扇端加速度)、BA(基座加速度),直接更改变量名,挑选一种即可。%--------- some sample parameters forVMD:对于VMD样品参数进行设置---------------
alpha = 2500;       % moderate bandwidth constraint:适度的带宽约束/惩罚因子
tau = 0;          % noise-tolerance (no strict fidelity enforcement):噪声容限(没有严格的保真度执行)
K = 8;              % modes:分解的模态数,可以自行设置,这里以8为例。
DC = 0;             % no DC part imposed:无直流部分
init = 1;           % initialize omegas uniformly  :omegas的均匀初始化
tol = 1e-7;        
%--------------- Run actual VMD code:数据进行vmd分解---------------------------
[u, u_hat, omega] = VMD(X, alpha, tau, K, DC, init, tol); %其中u为分解得到的IMF分量

4.计算中心频率

中心频率可以用来确定模态分量K的个数,average即为计算得出的中心频率。因为是要确定分解层数,将K设置不同的值,例如1-9,比较最后一个分量的频率。可以确定K值的依据为:一旦出现相似频率,此时的K值被确定为最佳K值。 

5.结果展示 

VMD分解图:

28242e85aff449e4a163de669fc7070e.png

包络线图 :

87f6d388eb2d4e2d9be55280780ded81.png

包络谱图:

69b5e6a771bc4953a47ce8a44b0c062f.png

峭度值:

3b3c6559b38f40f491527e72cc9b9a1a.png

频谱图: 

包络熵计算:

7bc019e538374c8ba99e6a311fd257e1.png

近似熵计算:

9f93980ff68d4e07a740025804939b87.png

 模糊熵计算:

 

 排列熵计算:

 多尺度排列熵计算结果:

 样本熵计算结果:

 

6.智能算法优化VMD参数

智能算法优化VMD的模态分解数和惩罚因子两个参数将在下一篇文章介绍!敬请关注!

(2条消息) 麻雀算法SSA,优化VMD,适应度函数为最小包络熵,包含MATLAB源代码,直接复制粘贴!_今天吃饺子的博客-CSDN博客

完整代码获取:下方卡片回复关键词:VMD


http://chatgpt.dhexx.cn/article/23UAH4mu.shtml

相关文章

信号滤波器以及中心频率概念

1 信号滤波器&#xff1a; 最早期的合成器&#xff0c;用简单的振荡器发生“傻乎乎”的波形&#xff0c;象正弦波、三角波&#xff0c;还有更明亮些的锯齿波、脉冲波等。然后用变形、调制等手法来修饰它们&#xff0c;滤波器是非常重要的工具。 当前的合成器技术已经与早期大不…

无线RF knowledge

2.4G频段 当AP工作在2.4GHz频段的时候&#xff0c;AP工作的频率范围是2.402GHz~2.483GHz。在此频率范围内又划分出14个信道。每个信道的中心频率相隔5MHz&#xff0c;每个信道可供占用的带宽为22MHz&#xff0c;例如&#xff1a;如图所示&#xff0c;channel 1的中心频率为2412…

中心频率详解

该文章讲述了有关中心频率知识详细讲解&#xff08;图&#xff09;. 中心频率详细讲解 什么是中心频率呢&#xff0c;中心频率就是滤波器通频带中间的频率,以中心频率为准,高于中心频率一直到频率电压衰减到0.707倍时为上边频,相反为下边频,上边频和下边频之间为通频带。 从原理…

Hector slam算法原理解析与代码详解

写了markdown 上传&#xff0c;公式都乱码&#xff0c;无果&#xff0c;截图上传吧 目录 1. hector 原理解析 1.4 多重分辨率地图 2.代码框架 2.1 回调函数 2.2 更新 3. 扫描匹配 3.1 多分辨率匹配 3.2 matchData_2 3.3 scan_match_3 3.4 迭代计算函数 3.5 hession 矩…

Ubuntu常用命令 如何远程连接服务器? 如何创建anaconda虚拟环境? 如何从github上下载代码到服务器? 如何移动、复制、删除文件夹? 如何在服务器间传输文件? 如何在服务器后台运行代码

目前 Ubuntu常用命令 如何远程连接服务器&#xff1f; 如何创建anaconda虚拟环境&#xff1f; 如何从github上下载代码到服务器&#xff1f; 如何移动、复制、删除文件夹&#xff1f; 如何在服务器间传输文件&#xff1f; 如何在服务器后台运行代码&#xff1f; 2.5 创建anacon…

JS逆向day05-某网站登录生成元素加密破解

逆向某网站的登录接口生成元素加密 由于是非法网站所以本文对网址进行了遮挡,但是其中的登录接口加密还是挺有意思的,故写下日志进行逆向,本文仅供参考! 登录接口解析 还是用我们的老套路,发送登录请求,获取登录的url,来看看参数加密情况 password很明显这个参数加密了,作者这…

破解 jar 包之直接修改 .class 文件方式

一、常规 JAVA 软件破解流程 先讲一下常规jar包的破解流程。 1. 快速定位。 1) 通过procmon监控相关软件&#xff0c;查看程序都访问了些啥。 2) 用jd-gui反编译 jar 包&#xff0c;得到源码。 3) 搜索关键字以定位。 这种定位方法只是千万种中的一种&#xff…

Maven项目整合MyBatis、Spring、Springmvc

一、MyBaits 1. MyBatis简介(了解) 1.1. 什么是MyBatis MyBatis 本是apache的一个开源项目iBatis&#xff0c;2010年这个项目由apache software foundation 迁移到了google code&#xff0c;并且改名为MyBatis 。2013年11月迁移到Github。 MyBatis是一个优秀的持久层框架&…

Git正解 脱水版 【10. 内部机制】

a.1 底层命令 之前大概介绍了30个Git常用命令,比如checkout/branch/remote等,由于Git的最初目标是一个工具集合,而不是VCS系统,因此包含了大量的底层命令,以便在类Unix系统的脚本中调用,所以这类命令被称为底层命令,而那些对用户更友好的命令,被称为封装命令.之前的介绍以封装…

微服务知识以及项目实战

01-Spring Boot 快速入门 Spring Boot 简介 Spring 作为一个软件设计层面的框架&#xff0c;在 Java 企业级开发中应用非常广泛&#xff0c;但是 Spring 框架的配置非常繁琐&#xff0c;且大多是重复性的工作&#xff0c;Spring Boot 的诞生就解决了这一问题&#xff0c;通过…

SQLMap使用攻略及技巧分享

SQLMap使用攻略及技巧分享 1.1 sqlmap简介1.2 下载及安装1.3 SQL使用参数详解1.4 实际利用以下为实战内容 sqlmap是一个开源的渗透测试工具&#xff0c;可以用来进行自动化检测&#xff0c;利用SQL注入漏洞&#xff0c;获取数据库服务器的权限。它具有功能强大的检测引擎,针对各…

Golang Devops项目开发

1.1 GO语言基础 1 初识Go语言 1.1.1 开发环境搭建 参考文档&#xff1a;《Windows Go语言环境搭建》 1.2.1 Go语言特性-垃圾回收 a. 内存自动回收&#xff0c;再也不需要开发人员管理内存 b. 开发人员专注业务实现&#xff0c;降低了心智负担 c. 只需要new分配内存&#xff0c;…

Clickhouse-MergeTree原理解析

MergeTree原理解析 表引擎是ClickHouse设计实现中的一大特色。可以说&#xff0c;是表引擎决定了一张数据表最终的“性格”&#xff0c;比如数据表拥有何种特性、数据以何种形式被存储以及如何被加载。ClickHouse拥有非常庞大的表引擎体系&#xff0c;截至本书完成时&#xff0…

Python数据分析高薪实战第七天 数据解析和电商行为分析案例

15 时间序列&#xff1a;时间数据的解析与应用 在很多数据分析任务中&#xff0c;经常会遇到处理时间相关的数据。比如电商网站经常需要根据下单记录来分析不同时间段的商品偏好&#xff0c;以此来决定网站不同时间段的促销信息&#xff1b;又或者是通过对过去十年的金融市场的…

C++语法整理(From GitHub)

&#x1f4d6; Github    |    &#x1f4da; Docsify 简体中文    |    English &#x1f4a1; 关于 &#x1f4da; 本仓库是面向 C/C 技术方向校招求职者、初学者的基础知识总结&#xff0c;包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经…

28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架

20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语言进行机器学习的开源项目&#xff0c;并挑选出最受欢迎和最活跃的项目。”图1&#xff1a;在GitHub上用Python语…

十分钟的爬虫erAST解混淆

前言 本文大约4000字&#xff0c;阅读大约时间10分钟。 可以一口气读完入门在爬虫er手中如何使用AST去解混淆。 正文 抽象语法树&#xff08;Abstract Syntax Tree&#xff09;通常被称为AST语法树&#xff0c;指的是源代码语法所对应的树状结构。也就是一种将源代码通过构…

什么是目标检测?github项目解析(持续更新中)

温馨提示&#xff1a;文章内容完整但是过长&#xff0c;由于前后内容有关联&#xff0c;读者学习可以多开几个浏览器分屏有助于定位 目录 目标检测理论部分&#xff1a; 1.目标检测介绍 2.YOLOv5的检测原理 3.目标检测的意义 4.目标检测的应用场景 5.先行知识储备 &…

2021年你必须拥有的10个最流行和最基本的Linux应用

点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复“大礼包”有惊喜礼包&#xff01; 每日英文 If you’re brave to say “good bye”, life will reward you with a new “hello”. -- Paulo Coelho. 如果你勇于对过去说“拜拜”&#xff0c;生活就会回赠给…

中国linux系统

对于广大电脑初级用户来说,Windows就是操作系统的代名词。但“天外有天,OS外有OS”,操作系统并非只有Windows一种。早在Windows诞生之前,Unix、Macintosh这些知名的操作系统就已经存在。只是因为Windows占据了操作系统绝大部分的市场份额,所以许多用户都不太熟悉Windows之…