针对滚动轴承故障诊断的方法有很多种,例如采用接触式安装传感器的振动信号分析法、接触式的声发射法、红外分析法和油液分析法等。在各种方法中,振动分析有相对简单方便的优点,所以应用最为广泛。但在一些高温、腐蚀、重型机械、有相对运动状态等场合,难以通过安装加速度等振动传感器进行信号采集检测。而通过声学信号进行测量不受此种约束,这些场合都能通过采集声学信号来进行分析诊断,因此研究声信号故障诊断技术很有必要。声学故障诊断技术具有如下特点:能进行非接触采集信号、信号容易采集且采集速度快、能发现早期故障、可对有相对运动的目标进行在线监测等。而且机械振动向外辐射形成声场噪声,两者机理相似,含有相似的机械频谱特性,可用非接触测量采集声场信号,并使用比较完善的信号处理方法对声学信号处理后分析诊断。
鉴于此,提出一种基于麦克风信号与随机森林模型的轴承运行状态识别方法,采用新的轴承故障数据集,运行环境为Python,实验平台如下所示:
设置的故障模式如下:
轴承塑性变形(arching)
轴承外圈粘着磨损(bearing outer)
轴承滚动体磨损(bearing roller)
轴承烧蚀(corona)
轴承过度润滑状态
轴承润滑不足
采用模块如下:
import librosa
import librosa.display
from scipy.io import wavfile as wav
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
部分代码如下:
#对一个样本音频文件进行特征提取(梅尔频率倒谱系数MFCC)
# MFCC一般是用于表示声音信号的特征集
mfccs = librosa.feature.mfcc(y = data, sr = sample_rate, n_mfcc=40)
mfccs.shape
#有2371 组不同的 40 个值的原因是因为音频样本的长度
#查看通过 mfcc 生成的特征
mfccs[0]
#对所有音频文件进行特征提取
# 从音频样本中提取特征的函数
# 该函数将音频文件的路径作为参数
# 这些特征是每个音频样本的 MFCC 的平均值
# 它们被缩放为具有0 平均值和 1的标准偏差
# 然后将它们作为 numpy 数组返回
def feature_extractor(file):
audio, s_r = librosa.load(file)
mfcc_feat = librosa.feature.mfcc(y=audio, sr = s_r, n_mfcc=40)
mfcc_scaled_feat = np.mean(mfcc_feat.T, axis=0)
return mfcc_scaled_feat
#输出标签(本质上是音频样本的名称)
labels = ['arching', 'bearing inner', 'good bearing', 'corona', 'over lubrication', 'under lubrication', 'bearing outer', 'bearing roller']
# 从所有音频样本中提取特征
extracted_feat = []
for i in labels:
file_path = '' + i + ".wav"
data = feature_extractor(file_path)
extracted_feat.append(data)
len(extracted_feat)
#显示提取特征的样本及其相应的标签
print(str(str(labels[0]) + " : " + str(extracted_feat[0])))
# 创建pandas数据框架
# 数据框架的的特征为列,标签为行
data = {'Features':extracted_feat,
'Class':labels}
df = pd.DataFrame(data)
# 显示数据框架
df = df.convert_dtypes()
df
df.info()
# 初始化 RandomForestClassifier或XGBClassifier分类器
rf = RandomForestClassifier()
#xgb = XGBClassifier()
# 创建输入和输出数组
# 输入数组是特征,输出数组是标签
X = df['Features'].tolist()
y = df['Class'].tolist()
#训练模型
rf.fit(X, y)
# 准确率是通过将预测标签与实际标签进行比较来计算的
rf.score(X,y)
#使用训练好的模型进行预测
rf.predict([[-2.7897263e+02, 5.3503460e+01, -9.6424660e+01, 4.0757355e+01,
-9.3860197e+00, -2.6315546e+01, 8.7640753e+00, -1.0260286e+01,
-2.2516959e+00, -3.5593541e+00, -2.6005332e+00, 4.4261584e+00,
-8.3459091e+00, 7.4399757e+00, -5.6521006e+00, -1.1300085e+00,
2.3042479e+00, -2.6922553e+00, 3.4631615e+00, -3.1675118e-01,
-2.9012849e+00, 1.5472490e+00, -4.7382765e+00, 2.7978785e+00,
-1.6362865e+00, 4.0778139e-01, 4.0807822e-01, -1.1660991e+00,
1.2589860e+00, -4.4920674e-01, 3.4972721e-01, 2.8618410e+00,
-2.9334219e+00, 1.2352990e+00, -9.3883562e-01, 1.1288710e+00,
9.5385534e-01, -8.9366227e-01, -4.7920844e-01, -1.4678799e-01]])[0]
# 确认上述单元格中的预测是否正确
print(labels[7])
extracted_feat[7]
完整数据代码可通过知乎学术咨询获取:
Python环境下基于麦克风信号与随机森林的机器轴承运行状态识别
工学博士,担任《Mechanical System and Signal Processing》审稿专家,担任《中国电机工程学报》优秀审稿专家,《控制与决策》,《系统工程与电子技术》,《电力系统保护与控制》,《宇航学报》等EI期刊审稿专家。
擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。