保姆级教程之SABO-VMD-SVM的西储大学轴承诊断
之前写过一篇优化核极限学习机的轴承诊断,今天再出一期基于SVM的轴承诊断。
依旧是包含了从数据处理,到减法优化器SABO算法优化VMD参数,再到支持向量机的故障诊断,实现故障诊断的全流程,其他类型的故障诊断均可参考此流程。数据替换十分简单!
友情提示:对于刚接触故障诊断的新手来说,这篇文章信息量可能有点大,大家可以收藏反复阅读。即便有些内容本篇文章没讲出来,但其中的一些跳转链接,也完全把故障诊断这个故事讲清楚了。
与上一期文章相似,先给大家看看文件夹目录,都是作者精心整理过的。

最后一个压缩包是有关VMD画图的程序。考虑到大家可能会用到VMD的相关作图,包络谱,频谱图等,作者在这里也一并附在代码中了。这部分大家需要自行更改数据!也就是作者比较火的文章之一,这里边提到的所有代码:VMD分解,matlab代码,包络线,包络谱,中心频率,峭度值,能量熵,样本熵,模糊熵,排列熵,多尺度排列熵,西储大学数据集为例
如图所示,本次内容一共做了三件事情:
一,对官方下载的西储大学数据进行处理,步骤如下:
1.一共加载10种数据,然后取每个数据的DE_time(%DE是驱动端数据 FE是风扇端数据 BA是加速度数据 选择其中一个就行)
2.设置滑动窗口w,每个数据的故障样本点个数s,每个故障类型的样本量m
3.将所有的数据滑窗完毕之后,综合到一个data变量中
有关西储大学数据的处理之前有文章也讲过,大家可以看这篇文章:西储大学轴承诊断数据处理,matlab免费代码获取
图中的1750,1772,1790是西储大学轴承的转速,大家做诊断的时候,选择其中一个即可,即选同一转速下的不同故障进行诊断更有意义!
二,对第一步数据处理得到的数据进行特征提取
选取五种适应度函数进行优化,这里大家可以自行决定选哪一个!以此确定VMD的最佳k和α参数。五种适应度函数分别是:最小包络熵,最小样本熵,最小信息熵,最小排列熵,排列熵/互信息熵,代码中可以一键切换。至于应该选择哪种作为自己的适应度函数,大家可以看这篇文章。VMD为什么需要进行参数优化,最小包络熵/样本熵/排列熵/信息熵,适应度函数到底该选哪个
老粉应该知道,之前也推过一篇文章,就是关于西储大学特征提取的,但当时作者懒,没有写一个大循环,需要大家针对每种类型的数据依次提取。这次,作者把特征提取写了一个大循环,方便一键特征提取,大家也可以很简单的更换自己的数据!
至于特征提取的具体原理,也在这篇文章进行过详细介绍,大家可以跳转阅读。简单来说,就是利用包络熵最小的准则把每个样本的最佳IMF分量提取出来,然后对其9个指标进行计算,分别是:均值,方差,峰值,峭度,有效值,峰值因子,脉冲因子,波形因子,裕度因子。然后用这9个指标构建每个样本的特征向量。
另外本篇文章采用了2023年一个较新且效率较高的智能算法---减法优化器(SABO),对VMD参数进行了优化,找到了每个故障类型的最佳IMF分量,并利用包络熵最小的准则,提取出了最佳的IMF分量。
三,采用支持向量机实现故障分类
本文所选SVM是从官网下载的libsvm-3.3版本,作者已编译好,大家可以直接运行。如果想自行编译的童鞋可以从网站下载:https://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html,编译步骤可以参考https://blog.csdn.net/qq_42457960/article/details/109275227
本文采用了网格搜索机制,并采用5折交叉验证,对SVM的惩罚因子c和gamma参数进行寻优。
结果展示

混淆矩阵图,有的文章会采用这种图:

这里不得不说一句,官方给出的libSVM包,准确率就是嘎嘎高!
部分代码
数据处理代码:
clc;
clear;
addpath(genpath(pwd));
%DE是驱动端数据 FE是风扇端数据 BA是加速度数据 选择其中一个就行
load 97.mat %正常
load 107.mat %直径0.007英寸,转速为1750时的 内圈故障
load 120.mat %直径0.007,转速为1750时的 滚动体故障
load 132.mat %直径0.007,转速为1750时的 外圈故障
load 171.mat %直径0.014英寸,转速为1750时的 内圈故障
load 187.mat %直径0.014英寸,转速为1750时的 滚动体故障
load 199.mat %直径0.014英寸,转速为1750时的 外圈故障
load 211.mat %直径0.021英寸,转速为1750时的 内圈故障
load 224.mat %直径0.021英寸,转速为1750时的 滚动体故障
load 236.mat %直径0.021英寸,转速为1750时的 外圈故障
w=1000; % w是滑动窗口的大小1000
s=2048; % 每个故障表示有2048个故障点
m = 10; %每种故障有120个样本
D0=[];
for i =1:mD0 = [D0,X097_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D0 = D0'; SABO优化VMD参数并特征提取的代码:
%% 此程序运行需要很长的时间!!
% vmddata.mat就是最终特征提取的结果!%% 以最小包络熵、最小样本熵、最小信息熵、最小排列熵,排列熵/互信息熵,为目标函数(任选其一),采用SABO算法优化VMD,求取VMD最佳的两个参数
clear
clc
close all
addpath(genpath(pwd))
xz = 5; %xz, 选择1,以最小包络熵为适应度函数,
% 选择2,以最小样本熵为适应度函数,
% 选择3,以最小信息熵为适应度函数,
% 选择4,以最小排列熵为适应度函数,
% 选择5,以复合指标:排列熵/互信息熵为适应度函数。
if xz == 1 fobj=@EnvelopeEntropyCost; %最小包络熵
elseif xz == 2fobj=@SampleEntropyCost; %最小样本熵
elseif xz == 3 fobj=@infoEntropyCost; %最小信息熵
elseif xz == 4fobj=@PermutationEntropyCost; %最小排列熵
elseif xz == 5fobj=@compositeEntropyCost; %复合指标:排列熵/互信息熵
end
load data_total_1797.mat %这里选取转速为1797的10种故障,大家也可以选取其他类型的数据
D=2; % 优化变量数目
lb=[100 3]; % 下限值,分别是a,k
ub=[2500 10]; % 上限值
T=20; % 最大迭代数目
N=15; % 种群规模
vmddata = [];
for i=1:10 %因为有十种故障状态disp(['正在对第',num2str(i),'个故障类型的数据进行VMD优化……请耐心等待!'])every_data = data(1+120*(i-1):120*i,:); %一种状态是120个样本,每次选120个样本进行VMD优化和特征提取da = every_data(1,:); %从当前状态的数据中任选一组数据进行VMD优化即可。[SABOBest_score,SABOBest_pos,Bestidx,SABO_curve] = SABO(N,T,lb,ub,D,fobj,da');display(['第',num2str(i),'个故障类型数据的最佳VMD参数是:', num2str(fix(SABOBest_pos)),'最佳IMF分量是:IMF',num2str(Bestidx)]); %输出最佳位置%% 以下为将最佳的a,k,idx回带VMD中,并进行9种时域指标特征提取bbh = fix(SABOBest_pos);%最佳位置取整new_data = tezhengtiqu(bbh(1),bbh(2),Bestidx,every_data); %将优化得到的两个参数和最小适应度的索引值带回VMD中,提取得到当前状态的特征向量vmddata = [vmddata;new_data]; %将每个状态提取得到的特征向量都放在一起
endsave vmddata.mat vmddata %将提取的特征向量保存为mat文件
%% 删除路径,以免被其他函数混淆
rmpath(genpath(pwd)) SVM诊断的代码:
%% 初始化
clear
close all
clc
warning off
% 数据读取
addpath(genpath(pwd));
load vmddata.mat %加载处理好的特征数据
data = vmddata;
% 数据载入bv = 120; %每种状态数据有120组
% 加标签值
hhh = size(data,2);
for i=1:size(data,1)/bvdata(1+bv*(i-1):bv*i,hhh+1)=i;
end
input=data(:,1:hhh);
output =data(:,end);
jg = bv; %每组120个样本
tn = 90; %选前tn个样本进行训练
input_train = []; output_train = [];
input_test = []; output_test = [];
for i = 1:max(data(:,end))input_train=[input_train;input(1+jg*(i-1):jg*(i-1)+tn,:)];output_train=[output_train;output(1+jg*(i-1):jg*(i-1)+tn,:)];input_test=[input_test;input(jg*(i-1)+tn+1:i*jg,:)];output_test=[output_test;output(jg*(i-1)+tn+1:i*jg,:)];
end
input_train = input_train';
input_test = input_test';
%归一化
[inputn_train,inputps]=mapminmax(input_train);inputn_train = inputn_train';
[inputn_test,inputtestps]=mapminmax('apply',input_test,inputps); inputn_test =inputn_test';
[c,g] = meshgrid(-10:0.5:10,-10:0.5:10); %调整间距,可以搜索的更加精细
[m,n] = size(c);
cg = zeros(m,n);
eps = 10^(-4);
v = 5; %采用5折交叉验证
bestacc = 0; 代码获取
完整代码获取,点击下方卡片,后台回复关键词:
SVM诊断
相关文章:
保姆级教程之SABO-VMD-SVM的西储大学轴承诊断
之前写过一篇优化核极限学习机的轴承诊断,今天再出一期基于SVM的轴承诊断。 依旧是包含了从数据处理,到减法优化器SABO算法优化VMD参数,再到支持向量机的故障诊断,实现故障诊断的全流程,其他类型的故障诊断均可参考此流…...
指向任意节点的带环链表
🌈图示指向任意节点的带环链表 如图: 🌈快慢指针法判断链表是否带环 🌟思路:快指针fast一次走2步,慢指针slow一次走1步,fast先进环在换中运动,随后slow进入环。两指针每同时移动…...
应用于伺服电机控制、 编码器仿真、 电动助力转向、发电机、 汽车运动检测与控制的旋变数字转换器MS5905P
MS5905P 是一款 12bit 分辨率的旋变数字转换器。 片上集成正弦波激励电路,正弦和余弦允许输入峰峰值 幅度为 2.3V 到 4.0V ,可编程激励频率为 10kHz 、 12kHz 、 15kHz 、 20kHz 。 转换器可并行或串行输出角度 和速度对应的数字量。 MS5905…...
Ansible学习笔记(持续更新)
Ansible学习目录 1.自动化运维1.1 企业实际应用场景1.1.1 Dev开发环境1.1.2 测试环境1.1.3 发布环境1.1.4 生产环境1.1.5 灰度环境 1.2 程序发布1.3 自动化运维应用场景1.4 常用自动化运维工具 2.Ansible介绍和架构2.1 Ansible特性2.2 Ansible架构2.2.1 Ansible主要组成部分2.2…...
CCF HPC China2023|澎峰科技:使能先进计算,赋能行业应用
CCF HPC China2023圆满落幕! 桂秋八月,为期三天的中国高性能计算领域最高规格盛会——2023CCF全球高性能计算学术年会(HPC China)在青岛红岛国际展览中心圆满落幕。行业超算大咖、顶级学界精英、先锋企业领袖参会者齐聚山东青岛&a…...
【FlowDroid】一、处理流程学习
FlowDroid 一、处理流程学习 下载配置源码概况代码逻辑分析analyzeAPKFilerunInfoflowprocessEntryPointcalculateCallbacks(sourcesAndSinks)再次回到processEntryPoint 自己做一些笔记 下载配置 参照我前面的文章可以使用FlowDroid安装初体验 为了看代码了解FlowDroid如何处…...
MyBatis——MyBatis插件原理
摘要 本博文主要介绍MyBatis插件机原理,帮助大家更好的理解和学习MyBatis。 一、插件机制概述 MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis允许使用插件来拦截的方法调用包括: Executor (update, que…...
简易虚拟培训系统-UI控件的应用5
目录 Toggle控件简介 示例-使用Toggle组实现主轴速度选择 本篇介绍UI控件Toggle,尝试一个小示例-使用单选框实现速度的选择控制。 Toggle控件简介 1. Toggle的结构如下:最重要的Toggle组件挂在Toggle节点上,下面的Image组件用于显示单选框…...
Lnmp架构
关闭防火墙 安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make 创建运行用户、组 编译安装Nginx 让系统识别nginx的操作命令 添加Nginx系统服务 vim /lib/systemd/system/nginx.service 编译安装mysql 安装Mysql环境依赖包 创建运行用户 编译安装 cd /opt …...
es5的实例__proto__(原型链) prototype(原型对象) {constructor:构造函数}
现在看这张图开始变得云里雾里,所以简单回顾一下 prototype 的基本内容,能够基本读懂这张图的脉络。 先介绍一个基本概念: function Person() {}Person.prototype.name KK;let person1 new Person();在上面的例子中, Person …...
Oracle DBlink使用方法
DBlink作用:在当前数据库中访问另一个数据库中的表中的数据 create public database link dblink名称 connect to 对方数据库用户名 identified by 对方数据库用户密码 using (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 要连接的数据库所在服务…...
UE4 植物生长
这个可以改变SplineMesh朝向...
企业应用系统 PHP项目支持管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页
一、源码特点 PHP 项目支持管理系统是一套完善的web设计系统 应用于企业项目管理,从企业内部的各个业务环境总体掌握,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 php项目支撑管理系统2 二、功能介绍 (1)权限管理࿱…...
微服务通信[HTTP|RPC同步通信、MQ异步通信]
概念 A服务调用B服务,B服务调C服务,C服务调D服务,即微服务之间的通信(也可以叫微服务之间的调用) HTTP同步通信 一种轻量级的通信协议,常用于在不同的微服务之间进行通信,也是最简单的通信方式使用REST ful为开发规范,将服务对外暴露的HTTP调用方式为REST API(如GET…...
C语言模拟最简单的计算机
C语言模拟最简单的计算机 以下内容参考南大“计算机系统基础”实验:不停计算的机器 概述 如下面的伪代码所示,计算机运行程序的过程为取指令–>运行指令–>更新PC的值。 while (1) {从PC指示的存储器位置取出指令;执行指令;更新PC; }取指(inst…...
c++图论免费ppt,简单深度理解图论
本篇博文想分享一个ppt,是帮助大家简单深度理解c图论. 作者承诺:分享的东西没有病毒,是资料。 分享的东西一个是ppt,ppt里面是150页的,里面将带领大家简单深度理解c图论,还有一个就是里面例题的数据,大家可以按照数据…...
xml中in的使用
目录 一、简介 二、使用 1、参数为list 2、参数为Array 3、参数为Map XML中大于、小于、不等于符号使用 一、简介 在xml中使用in查询需要使用foreach标签 <foreach item"item" collection"list" index"index" open"(" sep…...
Unity生命周期函数
1、Awake 当对象(自己这个类对象,就是这个脚本)被创建时 才会调用该生命周期函数 类似构造函数的存在 我们可以在一个类对象创建时进行一些初始化操作 2、OnEnable 失活激活(这个勾) 想要当一个对象(游戏…...
【OpenCV入门】第六部分——腐蚀与膨胀
文章结构 腐蚀膨胀开运算闭运算形态学方法梯度运算顶帽运算黑帽运算 腐蚀 腐蚀操作可以让图像沿着自己的边界向内收缩。OpenCV通过”核“来实现收缩计算。“核”在形态学中可以理解为”由n个像素组成的像素块“,像素块包含一个核心(通常在中央位置&…...
[C++] STL_list常用接口的模拟实现
文章目录 1、list的介绍与使用1.1 list的介绍1.2 list的使用 2、list迭代器3、list的构造4、list常用接口的实现4.1 list capacity4.2 插入删除、交换、清理4.2.1 insert任意位置插入4.2.2 push_front头插4.2.3 push_back尾插4.2.4 erase任意位置删除4.2.5 pop_front头删4.2.6 …...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
