HO-VMD-TCN:西储大学轴承故障诊断全流程详解
目录原理详解1.数据预处理2.特征提取3.故障诊断流程介绍结果展示部分代码展示完整代码获取之前有小伙伴留言说需要CWRU西储大学轴承数据的预处理过程今天就给大家带来一期基于HO-VMD-TCN的西储大学轴承故障诊断全流程详解。为了防止创新点不够本期代码采用24年新出的河马优化算法HO优化VMD分解并基于时间卷积网络TCN模型对处理好的数据集进行分类预测。之前也有推文介绍过河马优化算法性能也是非常不错具体可以看以下这篇2024年Nature子刊新算法河马优化算法(HO)-公式原理详解与性能测评 Matlab代码免费获取同样本期代码所有流程均可一键运行全部出图包括特征提取过程与故障诊断结果还有打印出来的损失函数曲线不像其他程序一样需要运行很多次非常适合新手小白。当然本次模型在知网上和WOS上也是完全搜不到的不信可以看下图原理详解此处使用的数据是西储大学官方的轴承数据首先说一下该数据集的处理步骤以及来源1.数据预处理取官方下载的驱动端DE振动数据分别为97.mat、107.mat、120.mat、132.mat、171.mat、187.mat、199.mat、211.mat、224.mat、236.mat即转速为1750时的10种故障诊断类型包括正常情况。设置滑动窗口w为1000每个数据的故障样本点个数s为2048 每个故障类型的样本量m为 10。将所有的数据滑窗设置完毕之后将所有的数据和类别综合到一个Excel中。下图即为12K采样频率下的驱动端轴承故障数据*表示数据不可用。2.特征提取这里的特征提取主要分为3个步骤。①首先VMD 方法要从信号中提取丰富的特征信息, 需要选定最佳的参数组合模态个数 k 和惩罚参数 α 都要选定在合适的区间过大过小都会导致特征信号提取不充分。因此需要用优化算法进行优化。本期代码选择了一个24年新颖且性能较好的算法——河马优化算法HO优化VMD算法从而选择最佳参数K和α。同时需要选择合适的适应度函数此处提供了5种适应度函数分别为包络熵、样本熵、信息熵、排列熵或复合指标最小大家任选其一即可。优化完后提取每个样本的最佳IMF分量并丢弃其他分量因为最佳IMF分量已经包含了故障特征的丰富信息。②其次对最佳IMF分量的9个指标进行计算分别是均值方差峰值峭度有效值峰值因子脉冲因子波形因子裕度因子对应特征1-9③最后得到的数据是1200*9的矩阵。为了进行诊断我们需要对每行数据打上标签其中1-10 代表不同的故障类型。这里顺便说一下10种不同的故障类型分别是什么意思类别1正常情况类别2直径0.007英寸转速为1750时的内圈故障类别3直径0.007英寸转速为1750时的滚动体故障类别4直径0.007英寸转速为1750时的外圈故障类别5直径0.014英寸转速为1750时的内圈故障类别6直径0.014英寸转速为1750时的滚动体故障类别7直径0.014英寸转速为1750时的外圈故障类别8直径0.021英寸转速为1750时的内圈故障类别9直径0.021英寸转速为1750时的滚动体故障类别10直径0.021英寸转速为1750时的外圈故障当然如果你选用不同的转速那么就是对应不同转速时的故障类型。3.故障诊断按照上述流程处理完数据集后就是我们常见的机器学习分类数据集了。此处我们再采用TCN分类模型划分70%为训练集30%为测试集将数据送入网络进行训练和预测得到最终故障诊断准确率结果。也就是说我们做故障诊断的目的就是为了判断出它到底是什么故障之后我们才根据故障类型采取有效的解决措施流程介绍上面的文字可能有些冗长此处简单讲下故障诊断的具体步骤1将采集到的数据进行融合处理利用河马优化算法HO对VMD的惩罚因子以及模态分量进行参数优化并找寻最小适应度的索引值将两个参数以及索引值代回VMD中2将最小包络熵作为适应度函数从而提取其故障特征3基于TCN分类模型完成多级分类任务。结果展示此处采用的TCN模型还是比较新颖的大家也可以自行替换成想要的模型或者加入更多的优化算法提高分类准确率设置TCN分类模型卷积核个数为16卷积核大小为3残差块个数为2初始学习率为0.005最大训练次数为100学习率下降因子为0.8优化器为Adam得到的结果如下首先是分类效果图其次是混淆矩阵图以及打印出来的损失函数与准确率曲线TCN网络结构图以上所有图片作者都已精心整理过代码都可以一键运行main直接出图不像其他代码一样需要每个文件运行很多次不信的话可以看下面文件夹截图非常清晰明了同时每种故障类型在VMD分解完毕后也会显示对应的最优参数即α和k以及最佳IMF分量方便大家呈现在论文里。其中刚刚讲到的数据预处理部分已帮大家整理成Excel格式即3种不同转速的振动数据大家使用时选择一种即可特征提取与故障诊断部分已全部包含在main文件及其子函数中。部分代码展示%% 读取数据一共三种转速数据已整理完实际使用时选择一种即可 res xlsread(西储大学驱动端振动数据(转速1797).xlsx); %% 设置参数 D 2; % 优化变量数目 lb [100 3]; % 下限值分别是a,k ub [2500 10]; % 上限值 T 8; % 最大迭代数目 N 6; % 种群规模 vmddata []; samplenum size(res,1)/10; …… …… …… %% 分析数据 num_class length(unique(data(:, end))); % 类别数Excel最后一列放类别 num_dim size(data, 2) - 1; % 特征维度 num_res size(data, 1); % 样本数每一行是一个样本 num_size 0.7; % 训练集占数据集的比例 data data(randperm(num_res), :); % 打乱数据集不打乱数据时注释该行 flag_conusion 1; % 标志位为1打开混淆矩阵要求2018版本及以上 %% 设置变量存储数据 P_train []; P_test []; T_train []; T_test []; %% 划分数据集 for i 1 : num_class mid_res data((data(:, end) i), :); % 循环取出不同类别的样本 mid_size size(mid_res, 1); % 得到不同类别样本个数 mid_tiran round(num_size * mid_size); % 得到该类别的训练样本个数 P_train [P_train; mid_res(1: mid_tiran, 1: end - 1)]; % 训练集输入 T_train [T_train; mid_res(1: mid_tiran, end)]; % 训练集输出 P_test [P_test; mid_res(mid_tiran 1: end, 1: end - 1)]; % 测试集输入 T_test [T_test; mid_res(mid_tiran 1: end, end)]; % 测试集输出 end %% 数据转置 P_train P_train; P_test P_test; T_train T_train; T_test T_test; %% 得到训练集和测试样本个数 M size(P_train, 2); N size(P_test , 2); %% 数据归一化 [p_train, ps_input] mapminmax(P_train, 0, 1); p_test mapminmax(apply, P_test, ps_input); t_train categorical(T_train); t_test categorical(T_test );完整代码获取点击下方小卡片再后台回复关键字不区分大小写故障诊断单品其他更多需求或想要的代码均可点击下方小卡片后再后台私信看到后会秒回~