Python环境下基于麦克风信号与随机森林的机器轴承运行状态识别

本文介绍了一种利用麦克风信号和随机森林模型对滚动轴承运行状态进行识别的方法,通过非接触声学信号采集,克服了高温、腐蚀等复杂环境下的振动传感器限制。作者使用Python实现,以MFCC特征提取为基础,对轴承的多种故障模式进行分类,包括塑性变形、磨损、烧蚀等。
摘要由CSDN通过智能技术生成

针对滚动轴承故障诊断的方法有很多种,例如采用接触式安装传感器的振动信号分析法、接触式的声发射法、红外分析法和油液分析法等。在各种方法中,振动分析有相对简单方便的优点,所以应用最为广泛。但在一些高温、腐蚀、重型机械、有相对运动状态等场合,难以通过安装加速度等振动传感器进行信号采集检测。而通过声学信号进行测量不受此种约束,这些场合都能通过采集声学信号来进行分析诊断,因此研究声信号故障诊断技术很有必要。声学故障诊断技术具有如下特点:能进行非接触采集信号、信号容易采集且采集速度快、能发现早期故障、可对有相对运动的目标进行在线监测等。而且机械振动向外辐射形成声场噪声,两者机理相似,含有相似的机械频谱特性,可用非接触测量采集声场信号,并使用比较完善的信号处理方法对声学信号处理后分析诊断。

鉴于此,提出一种基于麦克风信号与随机森林模型的轴承运行状态识别方法,采用新的轴承故障数据集,运行环境为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等。

  • 38
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哥廷根数学学派

码字不易,且行且珍惜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值