MATLAB环境下基于健康指标(Health indicator)的齿轮故障诊断

基于数据驱动的健康指标HI根据其构建策略的不同,常被分成两类,即:有量纲的物理指标和无量纲的虚拟指标。

有量纲的物理指标通常是由信号处理技术对收集到的时频域信号进行分析得到,常见的时域指标有均方根值、峰值指标、峰值因子、峭度因子、峰度因子、方根幅值、裕度系数、绝对平均值、脉冲因子及波形指标等。其中以均方根指标为例,其常被用来评估轴承的退化阶段、衡量轴承的退化趋势。此外,信号的频域指标诸如重心频率、均方频率、均方根频率、频率方差及频率标准差等时常也被用来衡量轴承的健康阶段。

无量纲的虚拟指标通常是由多个物理指标或者多源信号融合组成。常见的融合构成方式包括主成分分析、自组织映射、马氏距离、多层前向网络、隐马尔可夫模型等。上述的多个物理指标或多源信号的组合具有一定的冗余。因此,虚拟指标常通过一些升降维的方式提取重要特征并融合成所需的轴承健康状态退化指标。

鉴于此,本项目以均方根RMS、峭度kurtosis、均方根差分difference_rms和偏度差分difference_skewness为指标,构建健康指标HI:

    sa_rms = rms(sa) ;sa_kurtosis = kurtosis(sa) ;difference_rms = rms(difference_sig) ;difference_skewness = skewness(difference_sig) ;sig_features = [sa_rms, sa_kurtosis, difference_rms, difference_skewness].' ;% HI calculationhi = mean(abs(sig_features - healthy_features_average)./healthy_features_std) ;hi_faulty_vctr(sig_num) = hi ;

程序运行环境为MATLAB R2018A,所使用齿轮故障数据:

主代码:

% load data
load('gear.mat')
% processing of the healthy signals
num_healthy_sigs = size(sigs_healthy_t, 2) ; % number of healthy signals
healthy_features = zeros(4, num_healthy_sigs) ; % pre-allocation for the healthy features
for sig_num = 1 : num_healthy_sigssig_healthy = sigs_healthy_t(:, sig_num) ; % signal in the time domainspeed_faulty_t = speed_healthy(:, sig_num) ; % speed vector in the time domaint = [0 : dt : (length(sig_healthy)-1)*dt].' ; % time vector% angular resampling[sig_cyc, cyc_fs] = angular_resampling(t, speed_faulty_t, sig_healthy) ;num_pnts_in_round = cyc_fs ;% synchronous averagesa = calc_sa(sig_cyc, num_pnts_in_round) ;% difference signalgear_mesh = 38; num_sidebands = 2 ;difference_sig = calc_difference_signal(sa, gear_mesh, num_sidebands) ;% features extraction sa_rms = rms(sa) ;sa_kurtosis = kurtosis(sa) ;difference_rms = rms(difference_sig) ;difference_skewness = skewness(difference_sig) ;sig_features = [sa_rms, sa_kurtosis, difference_rms, difference_skewness].' ;healthy_features(:, sig_num) = sig_features ;end % of for% average and standard deviation of the healthy features 
healthy_features_average = mean(healthy_features, 2) ;
healthy_features_std = std(healthy_features.').' ;healthy_hi_vctr = zeros(num_healthy_sigs, 1) ; % health indicator of the healthy signals
for sig_num = 1 : num_healthy_sigs% HI calculationhi = mean(abs(healthy_features(:, sig_num) - healthy_features_average)./healthy_features_std) ;healthy_hi_vctr(sig_num) = hi ;end % of for% processing of the faulty signals
num_faulty_sigs = size(sigs_faulty_t, 2) ; % number of faulty signals
hi_faulty_vctr = zeros(num_faulty_sigs, 1) ; % pre-allocation for the HI of the faulty signals
for sig_num = 1 : num_faulty_sigssig_faulty_t = sigs_faulty_t(:, sig_num) ; % signal in the time domainspeed_faulty_t = speed_faulty(:, sig_num) ; % speed vector in the time domaint = [0 : dt : (length(sig_faulty_t)-1)*dt].' ; % time vector% angular resampling[sig_cyc, cyc_fs] = angular_resampling(t, speed_faulty_t, sig_faulty_t) ;num_pnts_in_round = cyc_fs ;% synchronous averagesa = calc_sa(sig_cyc, num_pnts_in_round) ;% difference signalgear_mesh = 38; num_sidebands = 2 ;difference_sig = calc_difference_signal(sa, gear_mesh, num_sidebands) ;% features extraction sa_rms = rms(sa) ;sa_kurtosis = kurtosis(sa) ;difference_rms = rms(difference_sig) ;difference_skewness = skewness(difference_sig) ;sig_features = [sa_rms, sa_kurtosis, difference_rms, difference_skewness].' ;% HI calculationhi = mean(abs(sig_features - healthy_features_average)./healthy_features_std) ;hi_faulty_vctr(sig_num) = hi ;end % of for% ----------------------------------------------------------------------- %
% Part for figures
axis_font_size = 15 ;
title_font_size = 30 ;
axis_name_font_size = 25 ;
lgnd_font_size = 20 ;figure
plot([1:num_healthy_sigs], healthy_hi_vctr, 'LineWidth', 3, 'Color', 'g') ;
hold on
plot([num_healthy_sigs+1:num_healthy_sigs+num_faulty_sigs], hi_faulty_vctr, 'LineWidth', 3, 'Color', 'r') ;
hold off
ax = gca;
ax.FontSize = axis_font_size;
title('Health indicator of the healthy and faulty signals', 'FontName', 'Times New Roman', 'FontSize', title_font_size)
xlabel('Record number', 'FontName', 'Times New Roman', 'FontSize', axis_name_font_size)
ylabel('HI value', 'FontName', 'Times New Roman', 'FontSize', axis_name_font_size)
legend('Healthy records', 'Faulty records');

出图如下:

完整代码:MATLAB环境下基于健康指标(Health indicator)的齿轮故障诊断

擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

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

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

相关文章

docker swarm 集群创建

1,目的: 通过docker swarm 工具将一台或者多台安装了docker的服务器组成一个完整的集群,该集群中的node节点可以通过Leader节点管理。在使用docker stack部署时,可以将容器自动分发到合适的节点上。 2,服务器准备&am…

0基础学习VR全景平台篇第146篇:为什么需要3D元宇宙编辑器?

一.什么是3D元宇宙编辑器? 3D元宇宙编辑器是全新3DVR交互渲染创作工具,集3D建模、虚拟展厅、AI数字人等能力,渲染和虚拟现实技术于一身的生产力工具。 具有跨平台和随时随地编辑等特点,可广泛应用于展会、展厅、博物馆、可视化园…

flink join的分类

带窗口的join 下图是固定窗口,同样的还有滑动窗口和会话窗口join DataStream<Integer> orangeStream = ...; DataStream<Integer> greenStream = .

LeetCode每日一题——数组串联

数组串联OJ链接&#xff1a;1929. 数组串联 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; 题目说 ans 由两个 nums 数组 串联 形成。那么我们就只需要历遍两次nums数组&#xff0c;将它放在我们的ans数组里。 注意&#xff1a; 题目函数对于我…

由浅到深认识Java语言(9):Eclipse IDE简介

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

springboot网站开发如何配置log4j日志插件

springboot网站开发如何配置log4j日志插件&#xff01;为了便于服务器等环境下的错误情况的排查根源&#xff0c;还是很有必要使用日志插件的&#xff0c;它可以记录下我们提前埋下的锚点信息。 在遇到故障&#xff0c;查看这些锚点记录的日志信息&#xff0c;可以快速高效的解…

鸿蒙一次开发,多端部署(一)简介

背景 随着终端设备形态日益多样化&#xff0c;分布式技术逐渐打破单一硬件边界&#xff0c;一个应用或服务&#xff0c;可以在不同的硬件设备之间随意调用、互助共享&#xff0c;让用户享受无缝的全场景体验。而作为应用开发者&#xff0c;广泛的设备类型也能为应用带来广大的…

el-select动态禁用

在一个el-form表单中有5个el-form-item; 每个el-form-item是一个el-select控件&#xff1b; 这5个el-select控件遵循这样的规则&#xff0c;都是使用同一个list集合&#xff0c;如果第一个el-select选择了list中的某一项&#xff0c;那么这一项就被禁用&#xff1b;其他的el-…

陈巍:Sora大模型技术精要万字详解(上)——原理、关键技术、模型架构详解与应用

​目录 收起 1 Sora的技术特点与原理 1.1 技术特点概述 1.2 时间长度与时序一致性 1.3 真实世界物理状态模拟 1.4 Sora原理 1.4.1扩散模型与单帧图像的生成 1.4.2 Transformer模型与连续视频语义的生成 1.4.3 从文本输入到视频生成 2 Sora的关键技术 2.1 传统文生图技…

详解python中函数的参数传递

在这个用例中&#xff0c;我们要讨论的是关于函数的传参问题 我所使用的python版本为3.3.2 对于函数: def fun(arg):print(arg)def main():fun(hello,Hongten)if __name__ __main__:main() 当我们传递一个参数给fun()函数&#xff0c;即可打印出传递的参数值信息。 这里打印…

【嵌入式学习】Qtday03.21

一、思维导图 二、练习 自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面。&#xff08;不要使用课堂上的图片和代码&#xff0c;自己发挥&#xff0c;有利于后面项目的完成&#xff09; 要求&#xff1a; 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件…

OpenAI Q-Star:AGI距离自我意识越来越近

最近硅谷曝出一份54页的内部文件&#xff0c;揭露了去年OpenAI宫斗&#xff0c;导致Altman&#xff08;奥特曼&#xff09;差点离职的神秘项目——Q-Star&#xff08;神秘代号Q*&#xff09;。 根据该文件显示&#xff0c;Q-Star多模态大模型拥有125万亿个参数&#xff0c;比现…

牛客NC196 编辑距离(一)【较难 DFS/DP,动态规划,样本对应模型 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6a1483b5be1547b1acd7940f867be0da 思路 编辑距离问题 什么是两个字符串的编辑距离&#xff08;edit distance&#xff09;&#xff1f;给定字符串s1和s2&#xff0c;以及在s1上的如下操作&#xff1a;插入&…

关于安卓MPAnroidChart开发(一)直方图分组坑

背景 安卓开发一个图表显示数据&#xff0c;内容就是对直方图进行分组显示&#xff0c;大概示例如下&#xff1a; 开发环境 win10,as4,jdk8 开发 这里直接说重点。乱七八糟的就掠过了&#xff0c;最后会放出所有相关源码以及封装好的类。 如果对单组的直方图&#xff0c…

docker入门(十)—— docker-compose详解

Docker Compose dockercompose官网&#xff1a;https://docs.docker.com/compose/ 什么是 docker compose Docker Compose 是用于定义和运行多容器应用程序的工具。 这是解锁简化和高效的开发和部署体验的关键。 Compose 简化了对整个应用程序堆栈的控制&#xff0c;让您能…

微信小程序小案例实战

.wxml: <view class "title">狂飙经典语录 </view> <view class"out"><block wx:if"{{listArr.length}}"> <!-- bloock不会影响排版--><view class"list"><view class"row" wx:…

【DP】第十四届蓝桥杯省赛C++ B组《接龙数列》(C++)

【题目描述】 对于一个长度为 K 的整数数列&#xff1a;A1,A2,...,AK&#xff0c;我们称之为接龙数列当且仅当 的首位数字恰好等于 的末位数字 (2≤i≤K)。 例如 12,23,35,56,61,11 是接龙数列&#xff1b;12,23,34,56 不是接龙数列&#xff0c;因为 56 的首位数字不等于 3…

[linux]--关于进程概念(下)

目录 孤儿进程 环境变量 将程序放到PATH路径下 设置PATH环境变量 设置别名 环境变量相关的命令 环境变量的组织方式​编辑 通过系统调用获取环境变量 环境变量通常是具有全局属性的 进程优先级 查看系统进程 用top命令更改已存在进程的nice&#xff1a; 程序地址空…

[游戏开发][UE5.3]GAS学习心得

GAS(GameplayAbilitySystem) UE提供的一套技能框架&#xff0c;这个框架也不是万能的&#xff0c;甚至各个部件你要进行封装开发&#xff0c;但这也比你从头写一套技能框架要容易很多。 GAS功能极其强大&#xff0c;所以它是一个庞大的系统&#xff0c;如果想运用得当&#x…

2024.03.21作业

自由发挥实现一个登录窗口的应用场景 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QPen> #include <QBrush> #include <QPainter> #include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; class Painter; } QT_END_NAMESPACE…