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_classmid_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 );

完整代码获取

          点击下方小卡片,再后台回复关键字,不区分大小写:

GZZDC

         其他更多需求或想要的代码,均可点击下方小卡片后,再后台私信,看到后会秒回~

         更多代码链接:更多代码链接

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

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

相关文章

DomoAI让你轻松变身视频达人!支持20s完整视频生成!

账号注册 官网:https://www.domoai.app/zh-Hant/library 功能 支持不同风格的视频类型,支持图片转视频,支持文字转图片,支持静态图片变为动态。 可以切换语言为中文 风格转换 选择不同风格的 支持生成20s,目前接触…

数据预处理 #数据挖掘 #python

数据分析中的预处理步骤是数据分析流程中的重要环节,它的目的是清洗、转换和整理原始数据,以便后续的分析能够准确、有效。预处理通常包括以下几个关键步骤: 数据收集:确定数据来源,可能是数据库、文件、API或网络抓取…

Zabbix Centos8 安装笔记

Zabbix 安装笔记 安装环境 Centos 8 正常发行版 安装版本 Zabbix 7 (LTS) 安装步骤 1、关闭防火墙 systemctl stop firewalld && systemctl disable firewalld && setenforce 0 && sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/c…

【C#】开发过程中记录问题

1.DateTimePicker控件获取时间 拖动控件,设置属性format为custom格式。例如我想获得20240101这种类型的string类型的数据: string DateTime DateTimePicker.Value.ToString("yyyyMMdd");2.ComboBox下拉列表控件 默认为DropDown,…

【Apache Doris】周FAQ集锦:第 6 期

【Apache Doris】周FAQ集锦:第 6 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…

聚焦新版综合编程能力面试考查汇总

目录 一、业务性编程和广度能力考查 (一)基本定义 (二)必要性分析 二、高频考查样题(编程扩展问法) 考题1: 用java 代码实现一个死锁用例,说说怎么解决死锁问题?(高…

大模型应用:LangChain-Golang核心模块使用

1.简介 LangChain是一个开源的框架,它提供了构建基于大模型的AI应用所需的模块和工具。它可以帮助开发者轻松地与大型语言模型(LLM)集成,实现文本生成、问答、翻译、对话等任务。LangChain的出现大大降低了AI应用开发的门槛,使得任何人都可以…

2_2、MFC对话框应用

对话框应用 模态与非模态对话框模态对话框弹出模态对话框创建模态对话框 非模态对话框 属性页对话框向导对话框一般属性页对话框 消息对话框函数原型函数返回值调用 文件对话框字体对话框获取字体对话框中所选字体选取字体样式并显示在编辑框中 颜色对话框获取取颜色对话框中所…

word空白页删除不了怎么办?

上方菜单栏点击“视图”,下方点击“大纲视图”。找到文档分页符的位置。将光标放在要删除的分节符前,按下键盘上的“Delet”键删除分页符。

L52--- 144. 二叉树的后序遍历(深搜)---Java版

1.题目描述 2.思路 (1)二叉树后序遍历:左右根 (2)根节点的压入: 根节点首先被压入stack中,然后被弹出并压入output中。 遍历过程: stack用于存储需要遍历的节点。 output用于反转遍历顺序。 入栈顺序: 左子节点先入栈,右子节点后入栈。这…

基于C#开发web网页管理系统模板流程-总集篇

第一篇 基于C#开发web网页管理系统模板流程-登录界面和主界面_c#的网页编程-CSDN博客 第二篇 基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善_c#网页设计-CSDN博客 第三篇 基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善_c#web程序设计…

目标检测数据集 - PCB板表面缺陷检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍:PCB 板表面缺陷检测数据集,真实采集高质量 PCB 板表面含缺陷图片数据,数据集含多款不同 PCB 板高清表面图片数据,包括俯拍正拍、旋转拍摄姿态。数据标注标签包括 missing_hole、mouse_bite、open_circuit、short、spur…

【Python推导式秘籍】:一行代码的艺术,高效数据处理之道

文章目录 🚋Python推导式🚀一、列表推导式🌈1. 了解推导式❤️2. 实践💥3. 总结 🚀二、字典推导式🌈1. 了解字典推导式❤️2. 实践💥3. 总结 🚀三、集合推导式🌈1. 了解集…

AI实践与学习5-AI解题场景RAG应用预研demo

背景 AI解题场景现状,教研测评文档:xxx 解题正确率仍需进一步提高,提示词优化方案基本无力o目前配置的易错题CoT示例支持的长度有限,后续题量大的时候配置具有局限性。某些英语翻译题型BAD CASE反映大模型的输出格式不太符合要求…

java:spring【AnnotationMetadata】的简单使用例子

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89435385 # 项目代码 【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start…

Linxu开机出现 Generating “/run/initramfs/rdsosreport.txt“解决方案

Linxu开机出现 Generating "/run/initramfs/rdsosreport.txt"解决方案 解决&#xff1a; 一、找这个-root结尾的文件也不一样。 大家可以用ls /dev/mapper查看到自己装的镜像对应的以-root结尾的文件是哪个。 二、所以我们运行的是&#xff1a;xfs_repair /dev/map…

Flutter 自定义日志模块设计

前言 村里的老人常说&#xff1a;“工程未动&#xff0c;日志先行。” 有效的利用日志&#xff0c;能够显著提高开发/debug效率&#xff0c;否则程序运行出现问题时可能需要花费大量的时间去定位错误位置和出错原因。 然而一个复杂的项目往往需要打印日志的地方比较多&#…

web错题(1)

action属性是form标签的必须属性&#xff0c;用于指定表单提交时表单数据将被发往哪里 dir能够指定文本显示方向的属性 可以产生下拉列表的标记时<select> multiple属性设为true&#xff0c;表示输入字段可以选择多个值 lable标签的for属性可以把lable绑定到另一个元…

vagrant putty错误的解决

使用Vagrant projects for Oracle products and other examples 新创建的虚机&#xff0c;例如vagrant-projects/OracleLinux/8。 用vagrant ssh可以登录&#xff1a; $ vagrant ssh > vagrant: Getting Proxy Configuration from Host...Welcome to Oracle Linux Server …

网络协议,OSI,简单通信,IP和mac地址

认识协议 1.讲故事 2004年&#xff0c;小明因为给他爹打电话&#xff08;座机&#xff09;费用太贵&#xff0c;所以约定一种信号&#xff0c;响一次是报平安&#xff0c;响两次是要钱&#xff0c;响三次才需要接通。 2.概念 协议&#xff1a;是一种约定&#xff0c;这种约…