网站建设教程 企业邮箱,电商网站设计哪家好,wordpress 交友模板,谷歌云 wordpress之前写过一篇优化核极限学习机的轴承诊断#xff0c;今天再出一期基于SVM的轴承诊断。 依旧是包含了从数据处理#xff0c;到减法优化器SABO算法优化VMD参数#xff0c;再到支持向量机的故障诊断#xff0c;实现故障诊断的全流程#xff0c;其他类型的故障诊断均可参考此流… 之前写过一篇优化核极限学习机的轴承诊断今天再出一期基于SVM的轴承诊断。 依旧是包含了从数据处理到减法优化器SABO算法优化VMD参数再到支持向量机的故障诊断实现故障诊断的全流程其他类型的故障诊断均可参考此流程。数据替换十分简单 友情提示对于刚接触故障诊断的新手来说这篇文章信息量可能有点大大家可以收藏反复阅读。即便有些内容本篇文章没讲出来但其中的一些跳转链接也完全把故障诊断这个故事讲清楚了。 与上一期文章相似先给大家看看文件夹目录都是作者精心整理过的。 最后一个压缩包是有关VMD画图的程序。考虑到大家可能会用到VMD的相关作图包络谱频谱图等作者在这里也一并附在代码中了。这部分大家需要自行更改数据也就是作者比较火的文章之一这里边提到的所有代码VMD分解matlab代码包络线包络谱中心频率峭度值能量熵样本熵模糊熵排列熵多尺度排列熵西储大学数据集为例 如图所示本次内容一共做了三件事情 一对官方下载的西储大学数据进行处理步骤如下 1.一共加载10种数据然后取每个数据的DE_time%DE是驱动端数据 FE是风扇端数据 BA是加速度数据 选择其中一个就行 2.设置滑动窗口w每个数据的故障样本点个数s每个故障类型的样本量m 3.将所有的数据滑窗完毕之后综合到一个data变量中 有关西储大学数据的处理之前有文章也讲过大家可以看这篇文章西储大学轴承诊断数据处理matlab免费代码获取 图中的175017721790是西储大学轴承的转速大家做诊断的时候选择其中一个即可即选同一转速下的不同故障进行诊断更有意义 二对第一步数据处理得到的数据进行特征提取 选取五种适应度函数进行优化这里大家可以自行决定选哪一个以此确定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时的 外圈故障
w1000; % w是滑动窗口的大小1000
s2048; % 每个故障表示有2048个故障点
m 10; %每种故障有120个样本
D0[];
for i 1:mD0 [D0,X097_DE_time(1w*(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 fobjEnvelopeEntropyCost; %最小包络熵
elseif xz 2fobjSampleEntropyCost; %最小样本熵
elseif xz 3 fobjinfoEntropyCost; %最小信息熵
elseif xz 4fobjPermutationEntropyCost; %最小排列熵
elseif xz 5fobjcompositeEntropyCost; %复合指标排列熵/互信息熵
end
load data_total_1797.mat %这里选取转速为1797的10种故障大家也可以选取其他类型的数据
D2; % 优化变量数目
lb[100 3]; % 下限值分别是a,k
ub[2500 10]; % 上限值
T20; % 最大迭代数目
N15; % 种群规模
vmddata [];
for i1:10 %因为有十种故障状态disp([正在对第,num2str(i),个故障类型的数据进行VMD优化……请耐心等待])every_data data(1120*(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,kidx回带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 i1:size(data,1)/bvdata(1bv*(i-1):bv*i,hhh1)i;
end
inputdata(:,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(1jg*(i-1):jg*(i-1)tn,:)];output_train[output_train;output(1jg*(i-1):jg*(i-1)tn,:)];input_test[input_test;input(jg*(i-1)tn1:i*jg,:)];output_test[output_test;output(jg*(i-1)tn1: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诊断