HO-VMD-TCN:西储大学轴承故障诊断全流程详解

news2025/2/24 7:12:26

        声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~

目录

原理详解

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

完整代码获取

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

GZZDC

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

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

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

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

相关文章

AI Agent学习系列:微信搭配Agent,让微信秒变特工

在之前的文章里介绍了如何把微信变成高考志愿填报小助手,我已经把这个bot发布到了公众号,大家可以直接在公众号消息输入框里提问即可直接使用,如图: 上面说的bot就是智能体,也叫Agent,和英文里特工是一个单…

AMSR-MODIS 边界层水汽 L3 每日 1 度 x 1 度 V1、V2 版本数据集

AMSR-MODIS Boundary Layer Water Vapor L3 Daily 1 degree x 1 degree V1 (AMDBLWV) at GES DISC AMSR-MODIS Boundary Layer Water Vapor L3 Daily 1 degree x 1 degree V2 (AMDBLWV) at GES DISC 简介 该数据集可估算均匀云层下的海洋边界层水汽。AMSR-E 和 AMSR-2 的微波…

2024 年最新基于 LLOneBot NT 框架搭建 QQ 机器人详细教程(更新中)

LLOneBot 概述 llonebot(LLOneBot)是一个与OneBot(也称为CQHTTP)协议兼容的机器人框架,它允许开发者使用不同的编程语言(如Python、Go、JavaScript等)编写机器人应用,并与各种支持 …

观察 jvm 运行时数据区内存大小(native memory tracking)

jvm 运行时数据区 jvm 运行时数据区包括且不限于以下几个部分: 堆(heap): 用于存储对象实例和数组。堆内存的分配和释放由垃圾回收器进行管理。方法区(method area): 用于存储类的信息、静态变量、常量等。jdk 8 后方法区位于 metaspace。虚拟机栈(vm stack): 用于存储方法的…

Mysql之不使用部署在k8s集群的Mysql而是选择单独部署的Mysql的原因

测试准备: 线程组:并发数100,持续时间2min 两个请求:使用k8s集群中的mysql的wordpress对应端口30011 使用单独部署的mysql的wordpress的对应端口为30022 访问同一个博客 测试结果: 汇总报告: 响应时间图&…

16.番外_模拟c语言文件流

16.番外:模拟c语言文件流 一,前言 先来看一下Struct _IO_FILE的定义。 grep -rnw /usr/include/ -e struct _IO_FILE今天我们要做的就是模拟实现FILE及C语言文件操作相关函数 二,开始!做吧!我们! 1.FILE的缓冲区及…

「小爱同学」接入豆包大模型;华为鸿蒙 OS 成为中国第二大操作系统丨 RTE 开发者日报 Vol.224

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

【Android面试八股文】你知道如何实现非阻塞式生产者消费者模式吗?

文章目录 这道题想考察什么 ?考察的知识点日常生活中的生产者消费者模式生产者消费者模式简介为什么需要缓冲区?阻塞与非堵塞非阻塞式生产者消费者模式的实现非阻塞式生产者消费者模式的实现阻塞式生产者消费者模式实现特点这道题想考察什么 ? 是否了解非阻塞式生产者消费者…

R可视化:ggpubr包学习

欢迎大家关注全网生信学习者系列: WX公zhong号:生信学习者 Xiao hong书:生信学习者 知hu:生信学习者 CDSN:生信学习者2 介绍 ggpubr是我经常会用到的R包,它傻瓜式的画图方式对很多初次接触R绘图的人来…

GO RACE 测试在低版本GCC上报错误 exit status 0xc0000139

windows机器环境,go程序使用race定位时一运行就报错,写了个example如: 能看到加了race之后就不行了, 搜了一下,git上有个issue: runtime: Race detector causes exit status 0xc0000139 on Windows 11 wi…

高考志愿填报选专业,兴趣爱好和就业前景哪个优先?

每个人都有自己的兴趣与爱好,而高考志愿填报是在为自己选择职业方向。最理想的状态就是把自己的兴趣和爱好与自己的职业统一起来,让兴趣和爱好促进职业的发展,为职业增添动力。但现实生活中,这种理想的状态并不是每个人都能达到的…

Java多线程面试重点-2

16.Synchronized关键字加在静态方法和实例方法的区别? 修饰静态方法,是对类进行加锁(Class对象),如果该类中有methodA和methodB都是被Synch修饰的静态方法,此时有两个线程T1、T2分别调用methodA()和methodB()&#x…

http穿透怎么做?

众所周知http协议的默认端口是80,由于国家工信部要求,域名必须备案才给开放80端口,而备案需要固定公网IP,这就使得开放http80端口的费用成本和时间成本变的很高。那么能不能利用内网穿透技术做http穿透呢?下面我就给大…

Stability AI最新的SD3模型存在严重问题 为规避裸体结果导致躯体部分错乱

人工智能 Stability AI 最新的 SD3 Medium 模型存在严重问题,只要生成人物就会出现躯体错乱,这似乎是该公司刻意规避生成裸体图片的结果。目前猜测他们可能在训练过程中就剔除了 NSFW 内容,同时在训练时规避裸体内容进而导致模型也会刻意将人…

Haption Virtuose 6D力反馈设备遥操作机器人应用研究

在虚拟现实和远程操作技术的飞速发展下,力反馈设备成为了一个不可或缺的工具。其中,Haption Virtuose 6D力反馈设备以其卓越的性能和广泛的应用领域,成为了这一领域的佼佼者。本文将详细介绍Haption Virtuose 6D力反馈设备及其在遥操作机器人…

Flutter系列:关于ensureInitialized()

Flutter系列 关于ensureInitialized() - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28…

RBAC权限实战

一、项目结构说明、搭建以及初步验证 引入SSM框架依赖: <dependencies> <dependency> <groupId>javax.servlet…

原型模式(大话设计模式)C/C++版本

原型模式 C 参考&#xff1a;https://www.cnblogs.com/Galesaur-wcy/p/15924300.html #include <iostream> #include <string> using namespace std;class WorkExprerience { private:string workDate;string company;public:WorkExprerience() {}~WorkExprerie…

《站在2024年的十字路口:计算机专业是否仍是高考生的明智之选?》

文章目录 每日一句正能量前言行业竞争现状行业饱和度和竞争激烈程度[^3^]新兴技术的影响[^3^]人才需求的变化[^3^]行业创新动态如何保持竞争力 专业与个人的匹配度判断专业所需的技术能力专业核心课程对学生的要求个人兴趣和性格特点专业对口的职业发展要求实践和经验个人价值观…

redis的四种模式部署应用

这里写目录标题 redis应用redis单机部署redis主从redis哨兵Cluster模式 redis应用 redis单机部署 关闭防火墙[rootzyq ~]#: yum -y install wget make gcc gcc-c ...... [rootzyq ~]#: wget https://download.redis.io/redis-stable.tar.gz --2024-01-01 19:41:14-- https:/…