1D CNN处理振动数据实现轴承不同故障诊断-python代码

1. 数据描述

数据来自实验室转子齿轮传动实验台,使用三轴振动传感器,共采集了轴承滚动体、外圈、内外混合、正常状态下的四种数据,每种状态,共采集到50000个数据点,因此对应的csv文件包含3列,50000行,三列分别为X,Y,Z三个方向的振动数据。

2. 代码详解

2.1 导入相关库

from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.layers import Embedding
from keras.layers import Conv1D, GlobalAveragePooling1D, MaxPooling1D
import numpy as np
import keras
import xlrd
import tensorflow as tf
from keras.utils import plot_model
from keras.callbacks import TensorBoard
from keras import regularizers

from time import time
import matplotlib.pyplot as plt
from matplotlib import offsetbox
from sklearn import (manifold, datasets, decomposition, ensemble,
                     discriminant_analysis, random_projection)

2.2 读取数据

写两个读取数据的函数,excel2train以及excel2testexcel2train从原始excel文件中读取前40000个数据点作为训练集,excel2test从原始excel文件中读取后10000个点作为测试集

def excel2train(path):
    data = xlrd.open_workbook(path)
    table = data.sheets()[0]
    nrows = table.nrows  # 行数
    ncols = table.ncols  # 列数
    datamatrix1 = np.zeros((40000,1))
    datamatrix = np.zeros((nrows, ncols))
    for x in range(ncols): #按列存储
        cols = table.col_values(x) #取第x列,返回list型数据
        # np.array创建数组,传递的实参一定是数组,不是tuple。例如,np.array((1,2,3)) # wrong, np.array([1,2,3]), # right
        cols1 = np.array(cols)  # 把list转换为矩阵进行矩阵操作    
        datamatrix[:, x] = cols1 # 把数据进行存储
    # 取前40000个做训练数据,只取第一列,也就是x方向振动数据进行建模
    datamatrix1 = datamatrix[0:40000,0] 
    return datamatrix1
def excel2test(path):
    data = xlrd.open_workbook(path)
    table = data.sheets()[0]
    nrows = table.nrows  # 行数
    ncols = table.ncols  # 列数
    datamatrix1 = np.zeros((10000,1))
    datamatrix = np.zeros((nrows, ncols))
    for x in range(ncols):
        cols = table.col_values(x)
        cols1 = np.array(cols)  # 把list转换为矩阵进行矩阵操作    
        datamatrix[:, x] = cols1 # 把数据进行存储
    datamatrix1 = datamatrix[40000:50000,0] #取第1列,后10000个点建模
    return datamatrix1

读取训练用数据

path1 = 'E:/xxxxxxxxxx' #数据路径
traindata_rollfault = excel2train(path1 + '/滚动体故障/RollFault1000.xlsx')
traindata_innerfault = excel2train(path1 + '/内圈故障/InnerFault1000.xlsx')
traindata_inner_outer_fault = excel2train(path1 + '/内圈+外圈混合故障/InnerOutterFault1000.xlsx')
traindata_normal = excel2train(path1 + '/正常轴承/Normal1000.xlsx')
traindata = np.hstack([rawdata_rollfault, rawdata_innerfault, rawdata_inner_outer_fault, rawdata_normal])

产生训练数据的one-hot标签。这里,样本的shape为(50,10),即500个数据点划分为一个样本,共得到320个样本,4类故障类型,每类80个样本。

#产生y标签-one-hot编码
x_train = rawdata.reshape(-1,50,10)
print(x_train.shape)
#每类故障的标签个数是80
y_train1 = keras.utils.to_categorical(np.random.randint(1, size=(80, 1)), num_classes=4)
print(y_train1.shape)
y_train2 = keras.utils.to_categorical(np.random.randint(1, size=(80, 1)), num_classes=3)
y_train2 =  np.insert(y_train2, 0, 0, axis=1)
print(y_train2.shape)
y_train3 = keras.utils.to_categorical(np.random.rand
  • 7
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 45
    评论
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值