美国西储大学(CRWU)轴承故障诊断——连续小波(CWT)变换

1.数据集介绍

在这里插入图片描述

2.代码

import random
import matplotlib
matplotlib.use('Agg')
from scipy.io import loadmat
import numpy as np

def split(DATA):
    step = 400;
    size = 1024;
    data = []
    for i in range(1, len(DATA) - size, step):
        data1 = DATA[i:i + size]
        data.append(data1)
        random.shuffle(data)

    npy = data[:300]
    npy = np.asarray(npy)

    return npy

# 读取CWRU数据集

B007 = loadmat('12KHZ_Data/2HP/12k_Drive_End_B007_2_120.mat')['X120_DE_time'].ravel()
B007_npy = split(B007)
np.save('npy/2HP/B007_data.npy', B007_npy)


B014 = loadmat('12KHZ_Data/2HP/12k_Drive_End_B014_2_187.mat')['X187_DE_time'].ravel()
B014_npy = split(B014)
np.save('npy/2HP/B014_data.npy', B014_npy)

B021 = loadmat('12KHZ_Data/2HP/12k_Drive_End_B021_2_224.mat')['X224_DE_time'].ravel()
B021_npy = split(B021)
np.save('npy/2HP/B021_data.npy', B021_npy)

IR007 = loadmat("12KHZ_Data/2HP/12k_Drive_End_IR007_2_107.mat")["X107_DE_time"].ravel()
IR007_npy = split(IR007)
np.save('npy/2HP/IR007_data.npy', IR007_npy)

IR014 = loadmat("12KHZ_Data/2HP/12k_Drive_End_IR014_2_171.mat")["X171_DE_time"].ravel()
IR014_npy = split(IR014)
np.save('npy/2HP/IR014_data.npy', IR014_npy)


IR021 = loadmat("12KHZ_Data/2HP/12k_Drive_End_IR021_2_211.mat")["X211_DE_time"].ravel()
IR021_npy  = split(IR021)
np.save('npy/2HP/IR021_data.npy', IR021_npy)


OR007 = loadmat("12KHZ_Data/2HP/12k_Drive_End_OR007@6_2_132.mat")["X132_DE_time"].ravel()
OR007_npy = split(OR007)
np.save('npy/2HP/OR007_data.npy', OR007_npy)


OR014 = loadmat("12KHZ_Data/2HP/12k_Drive_End_OR014@6_2_199.mat")["X199_DE_time"].ravel()
OR014_npy = split(OR014)
np.save('npy/2HP/OR014_data.npy', OR014_npy)


OR021 = loadmat("12KHZ_Data/2HP/12k_Drive_End_OR021@6_2_236.mat")["X236_DE_time"].ravel()
OR021_npy = split(OR021)
np.save('npy/2HP/OR021_data.npy',OR021_npy)

# # normal

Normal = loadmat("12KHZ_Data/2HP/normal_2_99.mat")["X099_DE_time"].ravel()
Normal_npy = split(Normal)
np.save('npy/2HP/Normal_data.npy', Normal_npy)

"""
连续小波变换 CWT
参考论文:https://www.mdpi.com/2076-3417/8/7/1102/html
morlet 小波在轴承故障诊断中比较常用
"""
import numpy as np
import pywt
import matplotlib.pyplot as plt

def CWT(data, fs=12000):
    t = np.arange(0, len(data)) / fs
    #wavename = "cgau8"   # Frequence_cgau8 小波
    wavename = "morl"  # morlet 小波
    # wavename = "cmor3-3"  # cmor 小波
    totalscale = 256
    fc = pywt.central_frequency(wavename)  # 中心频率
    cparam = 2 * fc * totalscale
    scales = cparam / np.arange(totalscale, 1, -1)
    [cwtmatr, frequencies] = pywt.cwt(data, scales, wavename, 1.0 / fs)  # 连续小波变换
    return t,cwtmatr,frequencies

def Toimage(data,lable):
    n = 0
    for i in range(len(data)):
        data1 = data[i]   #data1.shape = (1024,)
        # print(data1.shape)
        t,cwtmatr,frequencies = CWT(data1,fs=12000)
        n = n+1
        plt.figure(figsize=(1, 1), dpi=224)
        plt.contourf(t, frequencies, abs(cwtmatr))  # 画等高线图
        plt.ylabel("Frequency(Hz)")
        plt.xlabel('Time [sec]')
        plt.axis('off')
        plt.subplots_adjust(top=1, bottom=0, left=0, right=1, hspace=0, wspace=0)
        plt.margins(0, 0)
        plt.savefig('./image/2HP' + '/' + str(lable) + '/' + '{}'.format(n) + '.jpg',
                    pad_inches=0, bbox_inches='tight', format='jpg')
        plt.close()

B007 = np.load('npy/2HP/B007_data.npy')  #B007.shape = (300, 1024)
B014 = np.load('npy/2HP/B014_data.npy')
B021 = np.load('npy/2HP/B021_data.npy')
IR007 = np.load('npy/2HP/IR007_data.npy')
IR014 = np.load('npy/2HP/IR014_data.npy')
IR021 = np.load('npy/2HP/IR021_data.npy')
OR007 = np.load('npy/2HP/OR007_data.npy')
OR014 = np.load('npy/2HP/OR014_data.npy')
OR021 = np.load('npy/2HP/OR021_data.npy')
Normal = np.load('npy/2HP/Normal_data.npy')

Toimage(Normal,'Normal')
Toimage(B007,'B007')
Toimage(B014,'B014')
Toimage(B021,'B021')
Toimage(IR007,'IR007')
Toimage(IR014,'IR014')
Toimage(IR021,'IR021')
Toimage(OR007,'OR007')
Toimage(OR014,'OR014')
Toimage(OR021,'OR021')

3.CWT结果图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值