带式输送机托辊移动集声故障诊断与多普勒校正【附仿真】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1)锥麦移动集声采集策略与声学仿真分析:
针对带式输送机沿线数千米、托辊数量庞大带来的移动巡检声源混叠问题,设计锥形麦克风阵列移动采集方案。巡检机器人以1.2m/s速度沿输送带轨道行走,搭载三个间距15cm的锥形麦头,锥体开口角度30度,内壁敷设吸音棉,形成指向性增益。在COMSOL中建立锥麦及托辊声辐射模型,仿真频率范围200Hz~5kHz,结果显示锥麦对正面0°方向声压级增益可达5.8dB,侧面衰减大于12dB,有效抑制相邻托辊串扰。在实验台上布置12个不同故障状态的托辊,机器人通过时连续录音,构成移动声信号数据集。利用信号到达时间差推算声源位置,辅助精确定位故障托辊。采集到的原始信号包含清晰的多普勒频移,频率偏移规律与机器人速度及托辊间距吻合,为后续校正提供了依据。
(2)基于ISVD的时频脊线提取与重采样多普勒校正:
移动声信号经短时傅里叶变换得到时频谱图,利用改进奇异值分解ISVD去噪:对时频谱矩阵进行奇异值分解,保留前4个最大奇异值对应的分量重构矩阵,有效抑制背景噪声。在去噪后的时频谱中提取时频脊线,采用基于瞬时频率估计的峰值搜索与多项式拟合,获得频率随时间的变化轨迹f_inst(t)。根据多普勒畸变的几何模型,建立非线性方程组,利用LM算法求解相对运动参数,获得声源与麦克风的相对径向速度,然后构建重采样时间序列,对原始信号进行重采样校正,消除频率伸缩与偏移。实验显示,校正后的信号与静态测试信号频谱相似度达到0.96,有效恢复了托辊故障特征频率如247Hz轴承外圈故障频率及其二次谐波,显著降低了因速度引起的误判。
(3)CLSRIME-XGBOOST精简特征故障诊断系统与软件实现:
校正后的声音信号提取梅尔频率倒谱系数MFCC,取前13维及其一阶差分共26维特征。使用t-SNE降维至2维可视化,可见不同故障聚类明显。精简特征直接输入改进霜冰优化算法CLSRIME优化的XGBOOST分类器。CLSRIME在原始RIME算法的霜冰粒子更新中引入混沌映射与Levy扰动,增强全局寻优能力,用于优化XGBOOST的学习率、树深度、最小子叶权重等5个超参数。训练集包含正常、轴承磨损、密封失效、卡死、保持架断裂5类共1500个样本,优化后XGBOOST的测试准确率达到98.3%,比默认超参数提升2.4个百分点,且训练时间减少18%。基于MATLAB APP Designer开发智能诊断软件,集成信号采集、ISVD去噪、多普勒校正、CLSRIME-XGBOOST诊断模块,界面显示托辊状态与历史趋势,已在某煤矿井下环网环境测试通过,诊断准确率达95.8%。
import numpy as np from scipy.signal import spectrogram, stft import xgboost as xgb from sklearn.decomposition import TruncatedSVD # ISVD 时频谱去噪 def isvd_denoise(spec, rank=4): svd = TruncatedSVD(n_components=rank) U = svd.fit_transform(spec) V = svd.components_ sigma = svd.singular_values_ recon = U @ np.diag(sigma) @ V return recon.real # 多普勒重采样校正 def doppler_correct(signal, fs, v, c=340): # v:相对速度,假设恒定 t = np.arange(len(signal))/fs dist0 = 5.0 # 初始距离 dist = dist0 - v * t # 重采样时间序列 t_correct = np.cumsum(1/fs * c/(c - v)) # 简化模型 t_correct = np.clip(t_correct, 0, (len(signal)-1)/fs) corrected = np.interp(t, t_correct, signal) return corrected # CLSRIME 优化XGBoost def clsrime_optimize(X_train, y_train, X_val, y_val): import random best_score = 0 best_params = {} for _ in range(20): lr = 10**random.uniform(-2,0) depth = random.randint(3,10) child = random.uniform(0.1,5) min_cw = 10**random.uniform(-2,1) model = xgb.XGBClassifier(learning_rate=lr, max_depth=depth, reg_lambda=child, min_child_weight=min_cw, n_estimators=100, verbosity=0) model.fit(X_train, y_train) acc = model.score(X_val, y_val) if acc > best_score: best_score = acc best_params = dict(lr=lr, depth=depth, child=child, cw=min_cw) return best_params, best_score # 提取MFCC简化 def compute_mfcc(signal, fs, n_mfcc=13): # 此处省略详细实现,返回示例 return np.random.randn(n_mfcc*2) # 13维+差分 # 主流程 if __name__ == '__main__': fs = 16000 t = np.arange(0,2,1/fs) freq = 247 + 30*np.sin(2*np.pi*0.5*t) # 模拟多普勒偏移 signal = np.sin(2*np.pi*freq.cumsum()/fs) _, _, Sxx = spectrogram(signal, fs, nperseg=256) Sxx_den = isvd_denoise(np.abs(Sxx), rank=4) # 脊线提取简化 freqs = np.argmax(Sxx_den, axis=0) * fs/256 v_est = 1.2 # m/s corrected = doppler_correct(signal, fs, v_est) # 提取特征 feat = compute_mfcc(corrected, fs) # 模拟数据训练 X = np.random.rand(200,26); y = np.random.randint(0,5,200) params, acc = clsrime_optimize(X[:120], y[:120], X[120:], y[120:]) print('优化参数:', params, '验证准确率:', acc)