轴承故障诊断识别

背景介绍

        电机轴承是一个用于支撑电机轴的零件,电机的轴从轴承的内圈穿过,外圈固定在电机壳上。滚珠轴承在内外圈之间有一圈滚珠,当电机旋转时带动内圈旋转,滚珠随之运动。轴承的使用可以避免电机轴与电机外壳产生的较大摩擦。轴承的使用寿命以及可靠性对主机的使用寿命有决定性作用。在机械设备上,有旋转的地方就有轴承。

                                                

轴承故障诊断识别_第1张图片

        轴承属于精密零件,轴承内外圈以及轴承滚珠出现的压痕裂纹都会对轴承的的工作性能产生不良影响,进而导致设备使用寿命受到影响。

        在机械故障诊断任务上之前只能依靠大量的人工经验,分析故障原因。所以可以考虑用机器学习的方法进行故障诊断。

数据来源

        美国凯斯西储大学通过实验收集了一组在轴承受到不同损伤情形下的振动频率数据。当电机运转时在轴承座上方的放置一个加速度传感器收集轴承的振动信息。对于不同的轴承损伤我们预期希望它的振动频率应该也是不同的。

                                             轴承故障诊断识别_第2张图片

        上图左端为1.5KW(2马力)待测电机,中间部分为扭矩传感器以及译码器,左端为功率测试计。实验收集了在0,1,2,3马力下的振动信号,其中包含正常样本,轴承内圈,外圈以及滚珠损伤样本,因为轴承外圈位置是较为固定的,因此其损伤位置还分为3点,9点,12点三种情形。

       其收集到的一维振动信号,形状大致如下:轴承故障诊断识别_第3张图片

         Bearing fault diagnosis based on vibro-acoustic data fusion and 1D-CNN network

 数据预处理

   1.数据整合并打乱顺序

        实验台电机转速理论值约为1797转/圈,采用频率为12KHZ,可以近似四百个样本点为电机旋转一圈的数据。数据类型包含正常样本,滚珠损伤样本,轴承内圈损伤样本,以及外圈3点,6点,12点位置损伤样本,共六个类别。

        上述每种类别数据选取120000个采样点,每400个采样点作为一个样本,300个样本数据。划分200个样本作为训练集,100个样本作为测试集。训练集中共1200个样本,测试集共600个样本。并对上述六个类别工况按照进行0~5编号。

                     轴承故障诊断识别_第4张图片

Bearing fault diagnosis based on vibro-acoustic data fusion and 1D-CNN network

        将训练集数据打乱,测试集保持不动,并打印前200个训练集标签。

轴承故障诊断识别_第5张图片

 2.一维数据转换成维数数据

        本文通过卷积神经网络对振动数据进行识别分类,目前的数据是由一维数据采样而来。首先将一维数据重构成为二维数据。上述采样过程将400个采样点作为一个样本,将每个一维样本reshape成为(20,20)的二维图像。

轴承故障诊断识别_第6张图片轴承故障诊断识别_第7张图片轴承故障诊断识别_第8张图片

 轴承故障诊断识别_第9张图片轴承故障诊断识别_第10张图片轴承故障诊断识别_第11张图片

         数据样本如上图所示,用人眼似乎很难区分它们之间的差异。接下来用卷积神经网络对这些数据进行分类。

卷积神经网络

        卷积网络的输入为上述的二维图片,中间包含卷积层,池化层以及激活函数。其主要思想是通过一个个filter去遍历图像(卷积过程)以此学习到一些特征,激活函数可以让网络学习到一些非线性特征,池化层可以降低网络的参数规模,最后将学习到特征图像经过全连接层做分类(这一部分与softmax手写数字识别类似)。

轴承故障诊断识别_第12张图片

  Bearing fault diagnosis based on vibro-acoustic data fusion and 1D-CNN network

class Net(nn.Module):
  def __init__(self):
      super().__init__()
      self.cnn = nn.Sequential(
      nn.Conv2d(1, 16, 3),#input(20,20,1) output kenel
      nn.BatchNorm2d(16),       #归一化
      nn.ReLU(),            #激活单元
      nn.MaxPool2d(2, 2, 0),

      nn.Conv2d(16, 32, 3),
      nn.BatchNorm2d(32),
      nn.ReLU(),
      nn.MaxPool2d(2, 2, 0),
      )
      self.fc = nn.Sequential(
            nn.Linear(288, 128),
            nn.ReLU(),
            nn.Linear(128, 64),
            nn.ReLU(),
            nn.Linear(64, 6),
            
        )
  def forward(self, x):
    out = self.cnn(x)
    out = out.view(out.size()[0],-1)
    out = self.fc(out)
    return F.log_softmax(out, dim=1)

          之后将训练数据按一个bach128个样本丢到网络中进行训练,训练15个回合。

                                          

轴承故障诊断识别_第13张图片

最后测试集进行测试:

        为了看到里面具体学习的结果,可以将网络模型的输出结果用t-SNE降维的方法,映射到二维的平面上进行可视化。

轴承故障诊断识别_第14张图片

   训练集特征降维         

轴承故障诊断识别_第15张图片

                                                             测试集特征降维

你可能感兴趣的:(python,机器学习)