西交大轴承振动数据集的多通道推送例程

1说明

西交大轴承振动数据集
XJTU-SY滚动轴承加速寿命试验数据集解读预测与健康管理对保障机械装备安全服役、提高生产效率、增加经济效益至关重要。高质量的全寿命周期数据是预测与健康管理领域的基础性资源,这些数据承载着反映装备服役性能完整退化过程与规律的关键信息。然而,由于数据获取成本高、存储与传输技术有待发展等原因,典型的全寿命周期数据极其匮乏,严重制约了机械装备预测与健康管理技术的理论研究与工程应用。为解决上述难题,西安交通大学机械工程学院雷亚国教授团队联合浙江长兴昇阳科技有限公司,选取工业场景中典型的关键部件——滚动轴承为试验对象,开展了历时两年的滚动轴承加速寿命试验,并将获取的试验数据——XJTU-SY滚动轴承加速寿命试验数据集面向全球学者公开发布。该数据集共包含3种工况下15个滚动轴承的全寿命周期振动信号,采样频率高、数据量大、失效类型丰富、记录信息详细,既可为预测与健康管理领域提供新鲜的"数据血液",推动故障诊断与剩余寿命预测等领域的算法研究,又可助力工业界智能化运维的"落地生根"。icon-default.png?t=N7T8https://qikan.cmes.org/jxgcxb/CN/10.3901/JME.2019.16.001
如果要在自己的振动解析程序中进行处理,需要能够把振动数据逐帧压入分析程序,这里是一份具备完整功能的python源码,它会检索多个通道数据最终统一采样率后压入一个.bin的数据文件。

2.源码

1.读取数据文件 ReadXjtuDatafile.py

import csv
import numpy as np


file_path = r"D:\git2024\20240304_PushVibrationData\XJTU-SY_Bearing_Datasets\35Hz12kN\Bearing1_1\1.csv"

def ReadOneChannelRecordFromXJBD(file_path):
    horizontal_signals = []
    vertical_signals = []

    with open(file_path, newline='') as csvfile:
        reader = csv.reader(csvfile)
        next(reader)  # 跳过标题行
        for row in reader:
            horizontal_signals.append(float(row[0]))
            vertical_signals.append(float(row[1]))

    return (horizontal_signals, vertical_signals)

#将[+-50g的信号归一化为0点在32768处的u16信号]
def double2u16(data_in_array):
    data = np.array(data_in_array);
    normalized_data = np.clip(np.array(((data - (-50.0)) / 100.0 * 65535), dtype=np.uint16), 0, 65535)
    return normalized_data;


def resampleData(data_in_array, target_point):
    # 确定抽样点位置的索引值
    idx = np.linspace(0, len(data_in_array)-1, target_point, dtype=np.int32)
    # 使用interp函数进行抽样
    resampled_data = np.interp(idx, np.arange(len(data_in_array)), data_in_array)
    return resampled_data;

def getSampledataIn2048U16(file_path, dataType):
    (hdata, vdata) = ReadOneChannelRecordFromXJBD(file_path);
    if(dataType == "h"):
        data = resampleData(hdata, 2048)
    else:
        data = resampleData(vdata, 2048)
    return double2u16(data);

2.配置文件 in json

{
"dataset":{
      "root_path":"D:\\git2024\\20240304_PushVibrationData"
},
"ch1":{
"path":".\\XJTU-SY_Bearing_Datasets\\35Hz12kN\\Bearing1_1",
"type":"h",
"range":[1,100]
},
"ch2":{
"path":".\\XJTU-SY_Bearing_Datasets\\35Hz12kN\\Bearing1_1",
"type":"v",
"range":[1,100]
},
"ch3":{
"path":".\\XJTU-SY_Bearing_Datasets\\35Hz12kN\\Bearing1_2",
"type":"h",
"range":[1,100]
},
"default":{
"path":".\\XJTU-SY_Bearing_Datasets\\35Hz12kN\\Bearing1_1",
"type":"h",
"range":[1,100]
}
}

3.读取配置,检索数据集,打包数据 PackXjtuDataByConfig.py

import json
import os
import ReadXjtuDatafile

def getfilecountByExt(dirOfFile, extWithDot):
    # 指定目录路径
    directory = dirOfFile

    # 初始化计数器
    csv_count = 0

    # 遍历目录下所有文件
    for filename in os.listdir(directory):
        if filename.endswith(extWithDot):  # 判断文件是否以.csv结尾
            csv_count += 1
    return csv_count;


XJTU_CONFIG_FILE = r"xjtu_dataset.json"

def get_xjtu_dataset_rootpath():
    # 读取 JSON 文件
    with open(XJTU_CONFIG_FILE) as f:
        data = json.load(f)

    # 获取 root_path 值
    root_path = data['dataset']['root_path']
    return root_path

def get_channel_config(ch):
    # 读取 JSON 文件
    with open(XJTU_CONFIG_FILE) as f:
        data = json.load(f)

    #读取default配置:
    key = str.format("ch%d" %ch)
    
    if not (key in data):
        key = "default"
        
    ch_path = data[key]['path']
    ch_type = data[key]['type']
    ch_range = data[key]['range']
    
    return (ch_path, ch_type, ch_range);

def get_channel_data(ch, idx):
    (ch_path, ch_type, ch_range) = get_channel_config(ch);
    file_path = get_xjtu_dataset_rootpath() + ch_path[1:];
    print(file_path);

    totalDataFileSize = getfilecountByExt(file_path, ".csv");
    target_idx = idx%totalDataFileSize;
    #TODO:range;
    
    fullname = str.format("%s\\%d.csv" %(file_path, target_idx));
    sampleDataInU16 =  ReadXjtuDatafile.getSampledataIn2048U16(fullname, ch_type);
    return (sampleDataInU16, ch, idx, fullname);

def test_PackXjtuDataByConfig():
    print(get_xjtu_dataset_rootpath())
    print(get_channel_config(1))
    print(get_channel_config(2))
    print(get_channel_config(3))
    (sampleDataInU16, ch, idx, fullname) = get_channel_data(1, 3);
    print(len(sampleDataInU16), ch, idx, fullname)

test_PackXjtuDataByConfig()
    
    

4. 顶层调用接口 读取多个通道振动数据,写入唯一文件 PushVirbrationData.py

import csv
import numpy as np
import PackXjtuDataByConfig
import array
import struct
import os
import time

vibration_data_file = "d:\\vibration_data_file.bin";

def Gen21ChanelsData(idx):
    u16array = array.array('H')
    for i in np.arange(1,22):
        (sampleDataInU16, ch, idx, fullname) = PackXjtuDataByConfig.get_channel_data(i, idx)
        u16array.extend(sampleDataInU16);
    return u16array;

def write2file(filename, data):
    # 打开文件
    with open(filename, "wb") as file:
        # 将数组转换为字节流
        byte_data = struct.pack(f"{len(data)}H", *data)
        # 写入数据到文件
        file.write(byte_data)

def TestReadOneRecordFromXJDB():
    #raw
    idx=1
    while(1):
        u16array=Gen21ChanelsData(idx)
        write2file(vibration_data_file, u16array)
        time.sleep(5)
        idx=idx+1
    

TestReadOneRecordFromXJDB();

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

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

相关文章

【活动】金三银四,前端工程师如何把握求职黄金期

随着春意盎然的气息弥漫大地,程序员群体中也迎来了一年一度的“金三银四”求职热潮。这个时间段对于广大前端工程师而言,不仅象征着生机勃发的新起点,更是他们职业生涯中至关重要的转折点。众多知名公司在这一时期大规模开启招聘通道&#xf…

递归实现n的k次方(C语言)

编写一个函数实现n的k次方,使用递归实现。 下面来说一下思路 5的3次方:就是5*(5的3-1次方) 7的4次方:就是7*(7的4-1次方) 以此类推 n的k次方就是:n* n的(k-1)次方 int Func(int n,…

mac使用sequl的报错说明

出现下图错误,则到此地址下载test-builds版本 Test Builds 使用 sequel pro 的时候出现了 SequelPro encountered an unexpected error 表现为:测试通过,链接就卡住报错的问题。 解决办法 这是软件的问题,下载使用这个 TEST…

怎么找靠谱游戏开发公司?

在寻找靠谱的游戏开发公司时,有几个关键因素需要考虑。选择合适的游戏开发团队对于确保项目的成功和高质量成果至关重要。以下是一些有助于您找到靠谱游戏开发公司的建议: 首先,评估公司的经验和专业知识是至关重要的。您可以查看公司的历史和…

浅谈去耦电容的作用、选择、布局及其它电容的区别!

在一些文章资料中,去耦电容器被认为是旁路电容器。在其他资料中,去耦电容和旁路电容的区别在于:“旁路电容以输入信号中的干扰为滤波对象,而去耦电容以输出信号的干扰为滤波对象,防止干扰信号返回到输出端。”力量。”…

SpringBootWeb快速入门

1.创建springboot工程,新建module 2.勾选web开发相关依赖 3.删除多余文件 4.新建类 5.启动类中运行main方法 6.启动 默认端口号8080 7.打开浏览器,地址栏输入 8.报错 9.原因,控制层位置放错,剪切controller层放进com.example …

SwiftUI中Alert与ActionSheet的集成

在SwiftUI中,Alert和ActionSheet是两个用于显示提示信息和选项的组件。Alert用于显示简单的提示信息,而ActionSheet用于显示多个选项供用户选择。 要在SwiftUI中使用Alert,首先需要在视图中定义一个State属性来存储是否显示Alert&#xff0c…

【大厂AI课学习笔记NO.58】(11)混淆矩阵

混淆矩阵(confusion matrix)—— 混淆矩阵(Confusion Matrix)是人工智能领域,特别是在机器学习和深度学习中,用于衡量分类模型性能的重要工具。它通过统计分类模型的真实分类与预测分类之间的结果&#xf…

【小白学机器学习5】MSE, RMSE,MAE, MAPE, WMAPE

目录 1 评价误差的各种度量指标 2 从误差的评价开始捋这个问题 2.1 误差问题的由来:回归模型预测值和真实值的差距 2.2 如何评价某函数的预测值是否足够好? 如何比较不同的预测函数的预测值的好坏呢? 2.3 最小二乘法:应该叫最…

Vue——携带参数跳转路由

Vue学习之——跳转路由 前情回顾 当我们进行点击修改时,会进行跳转到修改页面,为了完成回显数据(根据对应id查找),我们需要携带对应选择中的id跳转到修改页面,让其进行查找回显 学习useRoute和useRoute…

企业要想构建 AI 竞争力,就必须“私藏”大模型

3 月 3 日,由深圳市产学研合作促进会举办的海峡两岸暨港澳人工智能与机器人发展论坛在深圳市福田区会展中心开幕。极狐GitLab CEO 柳钢受邀出席此次活动,并做了题为 《创新与安全并重:大模型私藏之道》 的主题分享。 人工智能之新曦 自 Chat…

链表理论:基础概念与实战技巧!

推荐阅读 算法day01_ 27. 移除元素、977.有序数组的平方 算法day02_209.长度最小的子数组 算法day03_ 59.螺旋矩阵II 目录 推荐阅读链表理论知识单向链表(单链表)定义单链表单链表添加下一个节点单链表中插入一个节点单链表中删除下一节点遍历单链表 双…

《GitHub新手入门指南:从零开始掌握基本用法》

在现代软件开发和技术社区中,GitHub已经成为了一个不可或缺的平台。它不仅是一个代码托管平台,更是一个技术交流、学习分享的社交平台。但对于初学者来说,GitHub可能会有些令人望而却步。本文将详细介绍GitHub的基本用法,帮助新手快速入门并融入这个充满活力的技术社区。 …

Linux 实现打印彩色进度条

文章目录 预备知识一、理解回车换行二、认识行缓冲1、代码一、二(回车换行理解)2、代码三、四(sleep函数和ffush函数理解) 三、简单倒计时1. 倒计时代码2、效果展示 四、进度条1、效果展示2、进度条代码makefileProcessBar.hProce…

从零开始搭建web组态

成果展示:by组态[web组态插件] 一、技术选择 目前只有两种选择,canvas和svg Canvas: 是一个基于像素的渲染引擎,使用JavaScript API在画布上绘制图像,它的优点包括: Canvas渲染速度快,适合处理大量图像和…

【STM32】STM32学习笔记-FLASH闪存(48)

00. 目录 文章目录 00. 目录01. FLASH简介02. 闪存模块组织03. FLASH基本结构04. FLASH解锁05. 使用指针访问存储器06. 程序存储器编程07. 选项字节08. 选项字节编程09. 选项字节擦除10. 器件电子签名11. 附录 01. FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选…

【.NET Core】.NET中的流(Stream)

【.NET Core】.NET中的流(Stream) 文章目录 【.NET Core】.NET中的流(Stream)一、流(Stream)1.1 FileStream类1.2 IsolatedStorageFileStream类1.3 MemoryStream类1.4 BufferedStream类1.5 NetworkStream类…

STM32 (2)

1.stm32编程模型 将C语言程序烧录到芯片中会存储在单片机的flsah存储器中,给芯片上电后,Flash中的程序会逐条进入到CPU中去执行,进而CPU去控制各种模块(即外设)去实现各种功能。 2.寄存器和寄存器编程 CPU通过控制其…

公司电脑文件防泄密软件——| 中科数安

公司电脑文件防泄密软件是一种专门设计用于保护企业敏感信息和数据安全的软件。这些软件通过采用各种技术手段,如数据加密、访问控制、行为监控等,来防止公司的机密文件、客户资料、财务数据等被非法获取、复制或传播。 www.weaem.com 以下是公司电脑文件…

选项 打光 试题总结

试题1 被测物体100100mm,精度要求被测物体 ,精度要求0.1mm,相机距被测物体在200~320mm之间,要求选择合适的相机和镜头? 分析如下: 通常我们用的相机靶面是4:3 的所以我们要用短边来计算视场&am…