MATLAB环境基于健康指标(Health indicator)的滚动轴承故障诊断

轴承的剩余使用寿命RUL预测过程一般包括以下三个步骤:(1)数据采集,(2)健康指标HI构建,(3)RUL预测。在预测过程中,RUL并不能直接依靠观测得到,其主要原因是轴承的工作环境复杂,噪声、温度、湿度等其他因素往往对振动信号产生一定的干扰。同时由于轴承的退化过程通常是非线性的,其退化模式难以通过人为方式捕捉,因此HI的构建显得非常重要。HI被用来作为反映退化过程的数据指标,和RUL存在一一对应的关系。性能优越的健康指标在表征轴承退化趋势的过程中发挥着重要的作用,可以降低神经网络学习故障特征的困难度和复杂度,缩短模型训练时间,减小网络误差,提高RUL预测精度。健康指标作为评估轴承健康状态以及运行状况的重要参数,应能够表征轴承的退化过程或退化程度,这就要求从机械设备的原始监测数据中提取轴承退化特征、挖掘时序信息,构建能够充分、全面、准确地表征轴承健康状态和运行状况的健康指标曲线,从而有效地评估轴承健康状态和预测轴承的RUL。

HI的构建对剩余使用寿命的预测发挥着至关重要的作用,尽管随着机器学习技术和深度学习技术的发展和应用,现有的健康指标构建方法可以有效地构建出反映轴承退化过程的HI,在一定程度上提高了健康指标的单调性和相关性,为RUL预测奠定了良好的基础,但仍有以下几个问题需要重点关注:

(1)轴承特征参数的数量较多,在前期进行特征筛选时多依赖于专家经验和先验知识,缺乏一定的评价标准,为此,需要构建一种较为完善和准确的参数筛选和健康指标评价标准,实现原始特征参数的筛选和健康指标性能的评估。

(2)基于机器学习和深度学习技术构建HI的方法,主要是通过特征提取和特征融合,建立健康指标和剩余使用寿命之间的非线性关系,然而在特征提取和融合时存在着信息丢失的现象,导致HI不能充分反映轴承的退化过程,影响预测结果。

(3)由于轴承工作环境复杂,工作状况易受温度、湿度、噪声、负载和其他因素的干扰,在不同运行阶段表现出不同的退化特征,基于有监督的方法构建健康指标时,需合理划分健康阶段,为网络输入数据设置科学合理的标签。

(4)轴承数据量较大,模型训练时容易出现训练速度较低、过拟合的现象,如何提高网络运算速度、避免过拟合现象的发生是亟需解决的问题。

鉴于此,提出一种基于健康指标(Health indicator)的滚动轴承故障诊断方法,运行环境为MATLAB R2018A,轴承特征参数及HI构建方法如下:

 % features extraction
    shaft_speed = 1 ; % in the cycle domain the shaft speed is 1.
    [ftf, bsf, bpfo, bpfi] = calc_bearing_tones(shaft_speed, bearing_specifications.num_balls, ...
    bearing_specifications.ball_diameter, bearing_specifications.pitch_diameter, bearing_specifications.bearing_contact_angle) ;
    bearing_tones = [ftf, bsf, bpfo, bpfi] ;
    
    order_sensativity = 0.02 ; % sensitivity of the order value for searching the bearing tone pick
    first_ftf_value = extract_specific_bearing_tone(dorder, sig_env_order, ftf, order_sensativity) ;
    first_bsf_value = extract_specific_bearing_tone(dorder, sig_env_order, bsf, order_sensativity) ;
    first_bpfo_value = extract_specific_bearing_tone(dorder, sig_env_order, bpfo, order_sensativity) ;
    first_bpfi_value = extract_specific_bearing_tone(dorder, sig_env_order, bpfi, order_sensativity) ;

    % HI calculation
    hi_ftf = mean(abs(first_ftf_value - healthy_ftf_average)./healthy_ftf_std) ;
    hi_ftf_faulty_vctr(sig_num) = hi_ftf ;
    hi_bsf = mean(abs(first_bsf_value - healthy_bsf_average)./healthy_bsf_std) ;
    hi_bsf_faulty_vctr(sig_num) = hi_bsf ;
    hi_bpfo = mean(abs(first_bpfo_value - healthy_bpfo_average)./healthy_bpfo_std) ;
    hi_bpfo_faulty_vctr(sig_num) = hi_bpfo ;
    hi_bpfi = mean(abs(first_bpfi_value - healthy_bpfi_average)./healthy_bpfi_std) ;
    hi_bpfi_faulty_vctr(sig_num) = hi_bpfi ;

所使用数据如下:

主代码如下:

% load data
load('bearing.mat')

% processing of the healthy signals
num_healthy_sigs = size(sigs_healthy_t, 2) ; % number of healthy signals
% pre-allocation
healthy_ftf_values = zeros(num_healthy_sigs, 1) ; hi_ftf_healthy_vctr = zeros(num_healthy_sigs, 1) ;
healthy_bsf_values = zeros(num_healthy_sigs, 1) ; hi_bsf_healthy_vctr = zeros(num_healthy_sigs, 1) ;
healthy_bpfo_values = zeros(num_healthy_sigs, 1) ; hi_bpfo_healthy_vctr = zeros(num_healthy_sigs, 1) ;
healthy_bpfi_values = zeros(num_healthy_sigs, 1) ; hi_bpfi_healthy_vctr = zeros(num_healthy_sigs, 1) ;
for sig_num = 1 : num_healthy_sigs
    
    sig_healthy_t = sigs_healthy_t(:, sig_num) ; % signal in the time domain
    speed_healthy_gear_t = speed_healthy_gear(:, sig_num) ; % speed vector of the gear
    speed_healthy_bearing_t = speed_healthy_bearing(:, sig_num) ;  % speed vector of the bearing
    t = [0 : dt : (length(sig_healthy_t)-1)*dt].' ; % time vector
    
    % dephase
    num_of_fllwing_sgmnts_2_average = 20 ;
    sig_after_dephase = dephase(t, speed_healthy_gear_t, sig_healthy_t, num_of_fllwing_sgmnts_2_average) ;

    % angular resampling
    [sig_cyc, cyc_fs] = angular_resampling(t, speed_healthy_bearing_t, sig_after_dephase) ;
    dcyc = 1 / cyc_fs ;
    
    % envelope calculation
    sig_env_cyc = abs(hilbert(sig_cyc).^2) ;

    % convert envelope from the cycle domain to the order domain
    sig_env_order = fft(sig_env_cyc) ;
    dorder = 1 / (length(sig_env_cyc)*dcyc) ;

    % features extraction
    shaft_speed = 1 ; % in the cycle domain the shaft speed is 1.
    [ftf, bsf, bpfo, bpfi] = calc_bearing_tones(shaft_speed, bearing_specifications.num_balls, ...
    bearing_specifications.ball_diameter, bearing_specifications.pitch_diameter, bearing_specifications.bearing_contact_angle) ;
    bearing_tones = [ftf, bsf, bpfo, bpfi] ;
    
    order_sensativity = 0.02 ; % sensitivity of the order value for searching the bearing tone pick
    first_ftf_value = extract_specific_bearing_tone(dorder, sig_env_order, ftf, order_sensativity) ;
    first_bsf_value = extract_specific_bearing_tone(dorder, sig_env_order, bsf, order_sensativity) ;
    first_bpfo_value = extract_specific_bearing_tone(dorder, sig_env_order, bpfo, order_sensativity) ;
    first_bpfi_value = extract_specific_bearing_tone(dorder, sig_env_order, bpfi, order_sensativity) ;
    
    healthy_ftf_values(sig_num) = first_ftf_value ;
    healthy_bsf_values(sig_num) = first_bsf_value ;
    healthy_bpfo_values(sig_num) = first_bpfo_value ;
    healthy_bpfi_values(sig_num) = first_bpfi_value ;

end % of for

healthy_ftf_average = mean(healthy_ftf_values) ; healthy_ftf_std = std(healthy_ftf_values) ;
healthy_bsf_average = mean(healthy_bsf_values) ; healthy_bsf_std = std(healthy_bsf_values) ;
healthy_bpfo_average = mean(healthy_bpfo_values) ; healthy_bpfo_std = std(healthy_bpfo_values) ;
healthy_bpfi_average = mean(healthy_bpfi_values) ; healthy_bpfi_std = std(healthy_bpfi_values) ;

for sig_num = 1 : num_healthy_sigs
    
    % HI calculation
    hi_ftf = mean(abs(healthy_ftf_values(sig_num) - healthy_ftf_average)./healthy_ftf_std) ;
    hi_ftf_healthy_vctr(sig_num) = hi_ftf ;
    hi_bsf = mean(abs(healthy_bsf_values(sig_num) - healthy_bsf_average)./healthy_bsf_std) ;
    hi_bsf_healthy_vctr(sig_num) = hi_bsf ;
    hi_bpfo = mean(abs(healthy_bpfo_values(sig_num) - healthy_bpfo_average)./healthy_bpfo_std) ;
    hi_bpfo_healthy_vctr(sig_num) = hi_bpfo ;
    hi_bpfi = mean(abs(healthy_bpfi_values(sig_num) - healthy_bpfi_average)./healthy_bpfi_std) ;
    hi_bpfi_healthy_vctr(sig_num) = hi_bpfi ;

end % of for

% processing of the faulty signals
num_faulty_sigs = size(sigs_faulty_t, 2) ;
hi_ftf_faulty_vctr = zeros(num_faulty_sigs, 1) ;
hi_bsf_faulty_vctr = zeros(num_faulty_sigs, 1) ;
hi_bpfo_faulty_vctr = zeros(num_faulty_sigs, 1) ;
hi_bpfi_faulty_vctr = zeros(num_faulty_sigs, 1) ;
for sig_num = 1 : num_faulty_sigs
    
    sig_faulty_t = sigs_faulty_t(:, sig_num) ; % signal in the time domain
    speed_faulty_gear_t = speed_faulty_gear(:, sig_num) ; % speed vector of the gear
    speed_faulty_bearing_t = speed_faulty_bearing(:, sig_num) ; % speed vector of the bearing
    t = [0 : dt : (length(sig_faulty_t)-1)*dt].' ; % time vector
    
    % dephase
    num_of_fllwing_sgmnts_2_average = 20 ;
    sig_after_dephase = dephase(t, speed_faulty_gear_t, sig_faulty_t, num_of_fllwing_sgmnts_2_average) ;

    % angular resampling
    [sig_cyc, cyc_fs] = angular_resampling(t, speed_faulty_bearing_t, sig_after_dephase) ;
    dcyc = 1 / cyc_fs ;
    
    % envelope calculation
    sig_env_cyc = abs(hilbert(sig_cyc).^2) ;

    % convert envelope from the cycle domain to the order domain
    sig_env_order = fft(sig_env_cyc) ;
    dorder = 1 / (length(sig_env_cyc)*dcyc) ;

    % features extraction
    shaft_speed = 1 ; % in the cycle domain the shaft speed is 1.
    [ftf, bsf, bpfo, bpfi] = calc_bearing_tones(shaft_speed, bearing_specifications.num_balls, ...
    bearing_specifications.ball_diameter, bearing_specifications.pitch_diameter, bearing_specifications.bearing_contact_angle) ;
    bearing_tones = [ftf, bsf, bpfo, bpfi] ;
    
    order_sensativity = 0.02 ; % sensitivity of the order value for searching the bearing tone pick
    first_ftf_value = extract_specific_bearing_tone(dorder, sig_env_order, ftf, order_sensativity) ;
    first_bsf_value = extract_specific_bearing_tone(dorder, sig_env_order, bsf, order_sensativity) ;
    first_bpfo_value = extract_specific_bearing_tone(dorder, sig_env_order, bpfo, order_sensativity) ;
    first_bpfi_value = extract_specific_bearing_tone(dorder, sig_env_order, bpfi, order_sensativity) ;

    % HI calculation
    hi_ftf = mean(abs(first_ftf_value - healthy_ftf_average)./healthy_ftf_std) ;
    hi_ftf_faulty_vctr(sig_num) = hi_ftf ;
    hi_bsf = mean(abs(first_bsf_value - healthy_bsf_average)./healthy_bsf_std) ;
    hi_bsf_faulty_vctr(sig_num) = hi_bsf ;
    hi_bpfo = mean(abs(first_bpfo_value - healthy_bpfo_average)./healthy_bpfo_std) ;
    hi_bpfo_faulty_vctr(sig_num) = hi_bpfo ;
    hi_bpfi = mean(abs(first_bpfi_value - healthy_bpfi_average)./healthy_bpfi_std) ;
    hi_bpfi_faulty_vctr(sig_num) = hi_bpfi ;

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], hi_ftf_healthy_vctr, 'LineWidth', 3, 'Color', 'g') ;
hold on
plot([num_healthy_sigs+1:num_healthy_sigs+num_faulty_sigs], hi_ftf_faulty_vctr, 'LineWidth', 3, 'Color', [0.7 0.7 0.7]) ;
hold off
ax = gca;
ax.FontSize = axis_font_size;
title('Health indicator of the cage', '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');

figure
plot([1:num_healthy_sigs], hi_bsf_healthy_vctr, 'LineWidth', 3, 'Color', 'g') ;
hold on
plot([num_healthy_sigs+1:num_healthy_sigs+num_faulty_sigs], hi_bsf_faulty_vctr, 'LineWidth', 3, 'Color', [0.7 0.7 0.7]) ;
hold off
ax = gca;
ax.FontSize = axis_font_size;
title('Health indicator of the rolling elements', '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');

figure
plot([1:num_healthy_sigs], hi_bpfo_healthy_vctr, 'LineWidth', 3, 'Color', 'g') ;
hold on
plot([num_healthy_sigs+1:num_healthy_sigs+num_faulty_sigs], hi_bpfo_faulty_vctr, 'LineWidth', 3, 'Color', 'r') ;
hold off
ax = gca;
ax.FontSize = axis_font_size;
title('Health indicator of the outer race', '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');

figure
plot([1:num_healthy_sigs],hi_bpfi_healthy_vctr, 'LineWidth', 3, 'Color', 'g') ;
hold on
plot([num_healthy_sigs+1:num_healthy_sigs+num_faulty_sigs], hi_bpfi_faulty_vctr, 'LineWidth', 3, 'Color', [0.7 0.7 0.7]) ;
hold off
ax = gca;
ax.FontSize = axis_font_size;
title('Health indicator of the inner race', '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)的滚动轴承故障诊断

工学博士,担任《Mechanical System and Signal Processing》审稿专家,担任
《中国电机工程学报》优秀审稿专家,《控制与决策》,《系统工程与电子技术》,《电力系统保护与控制》,《宇航学报》等EI期刊审稿专家。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧水务:雨季山区水域水务智能化监控与监测管理方案

一、方案背景 雨季的水务管理对于各区县来说,无疑是一项至关重要的任务。夏季雨水充沛,江河湖泊水位上涨,山洪、上游排水等情况时有发生,给各地的水务设施和防汛工作带来了严峻的挑战。针对区县的各类水域监管场景,需…

欧润金:抗衰生意火爆?抗老制品受富裕中产追捧,抢购难求!

当人们物质财富积累到一定程度后,他们开始踏上“用金钱留住时间”的探寻之路。 亚马逊创始人贝索斯为解锁“青春密码”,投资30亿美元建造生物研究所Alots;硅谷富豪莱恩约翰逊每年豪掷上百万美元,用于自己的健康管理;世…

JavaSE—IO流之字符流

📌 字符流中的常用类及基本方法: 输入字符流 Reader输出字符流 Writer ○ Reader 的基本方法: • 读取一个字符并以整数的形式返回, 如果返回-1已到输入流的末尾。 int read() throws IOException • 读取一系列字符并存储到一个数组buff…

OPPO案例 | Alluxio在DataAI湖仓一体的实践

分享嘉宾: 付庆午-OPPO数据架构组大数据架构师 在OPPO的实际应用中,我们将自研的Shuttle与Alluxio完美结合,使得整个Shuttle Service的性能得到显著提升,基本上实现了性能翻倍的效果。通过这一优化,我们成功降低了约一…

【免费】教你如何考取腾讯云《云函数 SCF》认证

云函数 SCF考试PC网址 云函数 SCF - 认证中心 - 腾讯产业互联网学堂 (tencent.com) 注:免费认证,里面包含免费的课程,浏览器用Edge。 文章目录 目录 文章目录 前言 一、备考流程 二、注意事项 总结 前言 随着云计算的不断发展&#xf…

基于word2vec+LSTM模型实现百度贴吧恶意评论预测

大家好,我是带我去滑雪! Word2Vec模型能够将词语映射到高维空间中的向量表示,同时保留了词语之间的语义信息和上下文关系。这使得模型能够更好地理解评论中的语境和含义。LSTM模型是一种适用于处理序列数据的深度学习模型,能够有效…

面对淘天的升级,如果说我们要在渠道运营端口做出一些改变,最重要、最应该、最优先的是什么?|淘天商品API数据采集接口

2024年,电商真正跨入了新AI时代。 在这个新时代,工具、方法、体系……都在升级,堪称一日千里。 商家如何更好地顺应时代的变化?2024年,我给大家的建议总结为两句话。 第一句是借平台的红利; 第二句是建立自…

【VTKExamples::Points】第十期 NormalEstimation

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例NormalEstimation,并解析接口vtkPCANormalEstimation,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力…

I.MX6ULL_Linux_驱动篇(55)linux 网络驱动

网络驱动是 linux 里面驱动三巨头之一, linux 下的网络功能非常强大,嵌入式 linux 中也常常用到网络功能。前面我们已经讲过了字符设备驱动和块设备驱动,本章我们就来学习一下linux 里面的网络设备驱动。 嵌入式网络简介 网络硬件接口 首先…

【C语言】tcp_sendmsg_locked

一、讲解 tcp_sendmsg_locked 函数是 Linux 内核中实现 TCP 数据发送的一个核心函数。这个函数被调用来将用户空间的数据通过 TCP 发送出去。以下是该函数的基本工作流程的中文解释: 1. 函数初始化和检查: - 它首先检查是否使用了 TCP 零拷贝发送&am…

【微服务】Spring Boot 版本升级到 2.7.18

前言 目前项目上扫描出一些 Java 依赖的代码漏洞&#xff0c;需要对现有依赖版本升级&#xff0c;记录一下遇到的问题。 <spring-boot.version>2.3.2.RELEASE</spring-boot.version> <spring-cloud.version>Hoxton.SR9</spring-cloud.version> <s…

RuoYi-Vue-Plus(登录流程-验证码生成)

一、登录流程 1- 进入登录页面&#xff0c;调用 com.ruoyi.web.controller.common.CaptchaController 类中的 captchaImage 方法&#xff0c;生成base64的图片 以及 UUID 2- 提交 登录信息 验证码 uuid 比对 错误&#xff1a;返回错误信息&#xff0c;删除缓存的验证码 成功…

一个优秀的开源ChatGpt外壳项目(lobe-chat)

lobe-chat 简介&#xff1a; 开源、现代化设计的 ChatGPT/LLMs 聊天应用与开发框架支持语音合成、多模态、可扩展的插件系统&#xff0c;一键免费拥有你自己的 ChatGPT/Gemini/Ollama 应用。 下载lobe-chat lobe-chat项目开源地址&#xff1a;GitHub - lobehub/lobe-chat: &am…

MySQL高可用解决方案――从主从复制到InnoDB Cluster架构

2024送书福利正式起航 关注「哪吒编程」&#xff0c;提升Java技能 文末送5本《MySQL高可用解决方案――从主从复制到InnoDB Cluster架构》 大家好&#xff0c;我是哪吒。 爱奇艺每天都为数以亿计的用户提供7x24小时不间断的视频服务。通过爱奇艺的平台&#xff0c;用户可以…

查看Linux系统重启的四种基本命令

目录 前言1. last2. uptime3. journalctl4. dmesg 前言 对于排查其原因推荐阅读&#xff1a;详细分析服务器自动重启原因&#xff08;涉及Linux、Window&#xff09; 在Linux中&#xff0c;有多种命令可以查看系统重启的信息 以下是其中一些常用的命令及其解释&#xff1a; …

跨时钟域学习记录(一)

亚稳态 亚稳态是电平介于高低电平之间的一种暂时状态。在同步系统中&#xff0c;当寄存器的信号无法满足建立时间和保持时间时&#xff0c;输出端的信号就可能出现亚稳态。在异步系统中&#xff0c;亚稳态并非一定在建立时间和保持时间无法满足时出现。   受噪声、温度、电压…

ZYNQ学习之PetaLinux开发环境搭建

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ FTP&#xff1a;File Transfer Protocol 一、Ubuntu 和 Windows 文件互传 1.1、开启 Ubu…

HarmonyOS系统开发ArkTS常用组件文本及参数(五)

目录 一、Text组件 1、Text组件案例 二、Text组件参数 1、string字符串类型 2、Resources类型 2.1、resources中内容配置 base/element/string.json 中的内容 zh_US/element/string.json 中的内容 es_US/element/string.json 中的内容 2.2、环境适配 适配英文 适配中文…

初探Ruby编程语言

文章目录 引言一、Ruby简史二、Ruby特性三、安装Ruby四、命令行执行Ruby五、Ruby的编程模型六、案例演示结语 引言 大家好&#xff0c;今天我们将一起探索一门历史悠久、充满魅力的编程语言——Ruby。Ruby是由松本行弘&#xff08;Yukihiro Matsumoto&#xff09;于1993年发明…

计算机网络实验——学习记录二(HTTP协议)

1. Linux主机上连接互联网的网络接口是&#xff1a;ens33。 2. 在显示过滤器&#xff08;Filter&#xff09;中输入“ http.host www.zzu.edu.cn”&#xff0c;筛选出HTTP协议报文首部行中包含“ Host&#xff1a;www.zzu.edu.cn”的报文&#xff08;目的地址是Web服务器的报…
最新文章