(此图出自,官方数据集里,自带的说明文件)
1.轴承数据解释:
第一列表示的数据的直径,有的人用的单位是毫米,也有的人用的是多少密尔(1英寸等于1000密尔),总共有四种,但是第四种,缺少外圈故障所以只取前三种,故障数据
第二和第三列表示的 数据是电机负载和电机转速(工况),一种负载对应一种转速,总共有四种,0马力/1797r/min,1马力/1772r/min,2马力/1750r/min,3马力/1730r/min。大多数人,都用前三种,因为三种和四种效果差不多,都可以解决问题。
第四、五、六到八列分别为内圈、滚动体、和外圈的三种位置不同时的故障数据,一般只取六点钟的,因为数据差别不大
综上:三种直径数据和三种故障数据,所以每个工况共有3*3+1(正常数据)=10种数据。所以根据工况的不同可以把数据分为A、B、C三种。每个工况有10种数据。
2.数据处理:
文件放置部分:
首先通过简单整理,生成三个文件夹代表着三种工况。
每个工况,有十个文件夹,分别代表着,不同情况下的故障数据和正常数据
通过上图,分别找到不同 工况的数据放进文件夹。
我这里已经找好了,大家可以复制对应的代码段。如果实在需要完整代码的,请私信。
#文件修改部分
#分别对应三种工况,1797,1772,1750转/分
#异常文件修改
A = ['105','118','130','169','185','197','209','222','234']
B = ['106','119','131','170','186','198','210','223','235']
C = ['107','120','132','171','187','199','211','224','236']
文件读入部分:
遍历各个文件,通过scio.loadmat()函数读入mat文件,再读取某个端的数据。大部分人都是读取DE端的数据。之后通过划窗取值(大多数窗口大小为2048)。之后可以利用FFT变换,将时域数据转化成频域数据,彰显特征。
name = "_DE_time" # 仅仅获取DE数据
for j in mat_filename_list:
data_name.append(os.listdir(j)) # 找到每个文件名
for i, j in zip(mat_filename_list, data_name):
n = i + "\\" + str(j)[2:-2] # 文件名切片切片,获取可读的文件名
matdata = scio.loadmat(n) # 读取mat文件
if len(n) == 50: # 有时数据名大于三位数,有的小于三位数,例如105和97
data_name = "X" + str(j)[2:5] + name
else:
data_name = "X0" + str(j)[2:4] + name
data = matdata[data_name] # 读取mat文件中的某个端的信号
datalist.append(data)
while True:
if (start + sw_width) > new_rows: # 如果窗口结束索引超出最大索引,结束截取;
return
yield start, start + sw_width
start += sw_steps
def FFT1(x, N, fs):
if N % 2 > 0:
N -= 1
if N > len(x):
xs = np.append(x, np.zeros(N - len(x)))
else:
xs = x[:N]
xf = np.fft.rfft(xs) / N
freq = np.linspace(0, fs / 2, int(N / 2 + 1))
xf = np.abs(xf) * 2
return xf, freq