1. 项目背景与核心价值
带式输送机作为现代工业生产中的关键设备,其稳定运行直接影响整个生产线的效率。而托辊作为输送机的主要承载部件,长期运行中容易出现轴承损坏、密封失效等故障。传统的人工巡检方式存在效率低、漏检率高的问题,特别是在煤矿、水泥厂等恶劣环境下,人工检测更是难上加难。
这套基于声音信号的故障检测系统,通过采集托辊运行时的声音信号,利用信号处理和机器学习技术实现故障的自动识别。相比振动检测方案,声音信号采集具有非接触式、安装简便的优势,特别适合在现有设备上进行改造升级。
我在某大型煤矿的实际部署中发现,这套系统能在托辊早期故障阶段(通常为故障发生前2-3周)就准确预警,避免了多起因托辊卡死导致的皮带撕裂事故。单条输送线每年可减少约15万元的维护成本和30小时以上的停机损失。
2. 系统架构设计
2.1 整体方案设计
系统采用三级架构:
- 前端采集层:工业麦克风阵列+防爆音频采集箱
- 边缘计算层:嵌入式信号处理单元(基于TI C6000系列DSP)
- 云端分析层:故障诊断算法服务器
关键设计选择:采用20-48kHz采样率,这个频段既能捕捉轴承故障特征频率(通常<20kHz),又避免了过高采样带来的数据冗余。实测表明,超过48kHz的采样对诊断准确率提升不足1%,但会显著增加计算负担。
2.2 硬件选型要点
- 麦克风:选用LDC-1316工业级指向性麦克风,其120dB的动态范围能适应输送机现场的高噪声环境
- 采集卡:NI-9234四通道同步采集卡,支持IEPE供电和抗混叠滤波
- 防护箱体:IP65防护等级,内置防震支架避免机械振动干扰
3. 核心算法实现
3.1 信号预处理流程
matlab复制% 读取原始音频
[raw, fs] = audioread('roller.wav');
% 带通滤波 (重点关注1k-20kHz)
[b,a] = butter(4, [1000 20000]/(fs/2), 'bandpass');
filtered = filtfilt(b,a,raw);
% 分帧处理 (每帧50ms,重叠75%)
frame_len = round(0.05*fs);
overlap = round(0.75*frame_len);
frames = buffer(filtered, frame_len, overlap);
3.2 特征提取方法
我们提取了时域、频域和非线性三类特征:
| 特征类型 | 具体特征 | 物理意义 |
|---|---|---|
| 时域特征 | 峰值因子、脉冲因子 | 反映冲击成分强度 |
| 频域特征 | 1/3倍频程能量、谱峭度 | 表征故障特征频带 |
| 非线性特征 | 样本熵、Lempel-Ziv复杂度 | 检测系统状态变化 |
3.3 故障诊断模型
采用改进的随机森林算法:
matlab复制% 特征矩阵构建
features = [time_features, freq_features, nl_features];
% 随机森林训练
mdl = TreeBagger(100, features, labels, ...
'Method', 'classification', ...
'OOBPrediction', 'on', ...
'MinLeafSize', 5);
模型在测试集上达到97.3%的准确率,比传统SVM方法提升约8%。关键改进在于:
- 引入自适应特征权重机制
- 采用代价敏感学习处理样本不均衡
- 添加了OOB(Out-of-Bag)概率校准
4. 工程部署要点
4.1 现场安装规范
- 麦克风安装角度:与托辊轴线呈45°,距离30-50cm
- 采样间隔设置:
- 正常工况:每2小时采样30秒
- 预警状态:每15分钟采样10秒
- 环境噪声补偿:采集时同步记录背景噪声,用于后续差分处理
4.2 常见问题排查
故障现象1:采集信号信噪比低
- 检查麦克风防尘罩是否堵塞
- 确认采集卡接地良好
- 尝试增加预加重滤波(6dB/oct)
故障现象2:误报率高
- 检查托辊转速测量是否准确(影响特征频率计算)
- 验证训练数据是否包含足够多的工况变体
- 调整决策阈值(默认0.7可降至0.6)
5. Matlab代码解析
5.1 主处理流程
matlab复制function [result] = roller_diagnosis(audio_path, rpm)
% 参数说明:
% audio_path - 音频文件路径
% rpm - 托辊转速(转/分钟)
% 1. 信号预处理
[clean_signal, fs] = pre_process(audio_path);
% 2. 特征提取
features = feature_extraction(clean_signal, fs, rpm);
% 3. 故障诊断
load('trained_model.mat'); % 加载预训练模型
[label, score] = predict(mdl, features);
% 4. 结果输出
result = struct('label', label, 'score', score);
end
5.2 关键函数实现
特征提取函数核心逻辑:
matlab复制function [feat_vec] = feature_extraction(signal, fs, rpm)
% 计算轴承特征频率
bpfi = rpm/60 * 1.2; % 内圈故障频率
bpfo = rpm/60 * 0.8; % 外圈故障频率
% 时域特征
peak_factor = max(signal)/rms(signal);
% 频域特征
[psd, f] = pwelch(signal, [], [], [], fs);
band_energy = bandpower(psd, f, [bpfi-5 bpfi+5], 'psd');
% 非线性特征
sampen = compute_sample_entropy(signal, 2, 0.2*std(signal));
feat_vec = [peak_factor, band_energy, sampen];
end
6. 优化与改进方向
在实际部署中,我们发现几个值得优化的点:
- 自适应采样策略:当检测到异常时,自动增加采样频率和时长,目前需要手动调整
- 多传感器融合:考虑加入红外温度传感器数据,提升对润滑失效故障的检测能力
- 边缘计算优化:将特征提取环节下放到DSP端,减少数据传输量
实测建议:在煤矿等高粉尘环境,每周应清洁麦克风防护罩。某客户点因半年未清洁,导致故障检出率下降40%,清洁后立即恢复正常。