当前位置:   article > 正文

基于时域特征和频域特征组合的敏感特征集,再利用CNN进行轴承故障诊断(python编程)_时域频域特征指标作为训练集

时域频域特征指标作为训练集

1.文件夹介绍(使用的是CWRU数据集)

 0HP-3HP四个文件夹装载不同工况下的内圈故障、外圈故障、滚动体故障和正常轴承数据。

 2.模型

按照1024的长度分割样本,构建内圈故障、外圈故障、滚动体故障和正常轴承样本集

2.1.计算11种时域特征值

  1. # 计算时域特征
  2. def calculate_time_domain_features(signal):
  3. features = []
  4. # 均值
  5. features.append(np.mean(signal))
  6. # 标准差
  7. features.append(np.std(signal))
  8. # 方根幅值
  9. features.append(np.sqrt(np.mean(np.square(signal))))
  10. # 均方根值
  11. features.append(np.sqrt(np.mean(np.square(signal))))
  12. # 峰值
  13. features.append(np.max(signal))
  14. # 波形指标
  15. features.append(np.mean(np.abs(signal)) / np.sqrt(np.mean(np.square(signal))))
  16. # 峰值指标
  17. features.append(np.max(np.abs(signal)) / np.mean(np.abs(signal)))
  18. # 脉冲指标
  19. features.append(np.max(np.abs(signal)))
  20. # 裕度指标
  21. features.append(np.max(np.abs(signal)) / np.sqrt(np.mean(np.square(signal))))
  22. # 偏斜度
  23. features.append(skew(signal))
  24. # 峭度
  25. features.append(kurtosis(signal))
  26. return features

2.2.计算12种频域特征值

  1. # 计算频域特征
  2. def calculate_frequency_domain_features(signal, sample_rate):
  3. features = []
  4. # 快速傅里叶变换
  5. spectrum = fft(signal)
  6. spectrum = np.abs(spectrum)[:len(spectrum)//2] # 取一半频谱
  7. #频域指标1
  8. features.append(np.mean(spectrum))
  9. # 频域指标2
  10. features.append(np.var(spectrum))
  11. # 频域指标3
  12. features.append(np.sqrt(np.mean(np.square(spectrum))))
  13. # 频域指标4
  14. features.append(np.max(spectrum) / np.sqrt(np.mean(np.square(spectrum))))
  15. # 频域指标5
  16. features.append(kurtosis(spectrum))
  17. # 频域指标6
  18. features.append(skew(spectrum))
  19. # 频域指标7
  20. features.append(np.max(spectrum))
  21. # 频域指标8
  22. features.append(np.min(spectrum))
  23. # 频域指标9
  24. features.append(np.max(spectrum) - np.min(spectrum))
  25. # 频域指标10
  26. features.append(np.max(np.abs(spectrum)) / np.mean(np.abs(spectrum)))
  27. # 频域指标11
  28. features.append(np.max(np.abs(spectrum)) / np.sqrt(np.mean(np.square(spectrum))))
  29. # 频域指标12
  30. peak_index = np.argmax(spectrum)
  31. peak_frequency = peak_index * sample_rate / len(spectrum)
  32. features.append(peak_frequency)
  33. return features

2.3.构建评价指标,从时域和频域一共23个指标中选出对故障特征最敏感的前4个特征,这里用的是方差评价指标,也可以选用其它的评价指标

  1. # 选择前4个敏感特征
  2. import numpy as np
  3. from sklearn.model_selection import train_test_split
  4. # 将特征集转换为NumPy数组
  5. feature_set = np.array(feature_set)
  6. # 计算评价指标(这里以方差为例)
  7. scores = np.var(feature_set, axis=0)
  8. # 选出最敏感的4个特征
  9. selected_indices = np.argsort(scores)[-4:]
  10. selected_features = feature_set[:, selected_indices]

最后选出 的敏感特征集

2.4.将每个样本的这4个特征输入CNN模型进行分类(也可以输入给SVM或KNN等分类器)

3.效果

0HP数据集

1HP数据集

 

2HP数据集

3HP数据集 

 

 

总的代码和数据集放在了压缩包里

  1. plt.rcParams['font.size'] = 25
  2. # 绘制损失曲线
  3. plt.figure(figsize=(10, 8))
  4. plt.plot(train_loss, label='训练集损失')
  5. plt.plot(test_loss, label='测试集损失')
  6. plt.xlabel('迭代次数')
  7. plt.ylabel('损失')
  8. plt.title('1HP训练集与测试集损失')
  9. plt.legend()
  10. plt.savefig('0.png', dpi=600,bbox_inches = "tight")
  11. plt.show()
  12. # 绘制准确率曲线
  13. plt.figure(figsize=(10, 8))
  14. plt.plot(train_accuracy, label='训练集准确率')
  15. plt.plot(test_accuracy, label='测试集准确率')
  16. plt.xlabel('迭代次数')
  17. plt.ylabel('准确率')
  18. plt.title('1HP训练集与测试集准确率')
  19. plt.legend()
  20. plt.savefig('1.png', dpi=600,bbox_inches = "tight")
  21. plt.show()
  22. #可以关注:https://mbd.pub/o/bread/ZJuXmZtt

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/326595
推荐阅读
相关标签
  

闽ICP备14008679号