✨ 长期致力于带式输送机、声音降噪、特征提取、特征融合、故障诊断研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1)分段三次Hermite插值优化的经验小波变换降噪:
提出PCHIP-EWT-SE算法,将原始声音信号以512点为一帧进行重叠分帧,帧移128点。每一帧信号先进行快速傅里叶变换得到频谱,接着利用分段三次Hermite插值对频谱的局部极大值点进行平滑连接,形成上包络线,再基于包络线的局部最小值确定频谱分割边界。与传统EWT使用形态学算子检测边界相比,插值法避免了伪边界产生,尤其增强了在低信噪比区域的分割稳定性。对分割出的每个固有模态分量计算样本熵,设定阈值0.45,仅保留样本熵大于0.45的分量进行重构,丢弃噪声主导的低熵分量。采集自某港口带式输送机振动传感器的200组正常与故障声音数据,每组时长5秒,采样率44.1千赫兹。实验表明PCHIP-EWT-SE降噪后信号的信噪比平均提升19.7分贝,相比传统EWT提升7.2分贝,且故障特征频率的幅值增强了2.3倍。
(2)四域联合特征提取与Fisher判别融合:
从降噪信号中并行提取四个域的特征:时域提取峰值因子、裕度因子、波形因子及六个统计矩;频域提取快速傅里叶频谱的32个能量集中频带,每个频带宽度为68.9赫兹;倒谱域提取梅尔频率倒谱系数和线性预测倒谱系数各16维;深度域使用预训练的一维卷积自编码器,该自编码器包含三层卷积核尺寸分别为3,5,7,编码层输出32维深度特征。将四域特征拼接形成96维原始特征向量,采用改进的Fisher线性判别分析进行降维,通过最大化类间散度矩阵与类内散度矩阵的广义瑞利商,选取前12个判别向量组成投影矩阵。在自建的输送机声音特征数据库中包含滚筒故障、托辊卡死、皮带跑偏、撕裂四类故障各150样本,投影后的12维特征使线性分类器的交叉验证准确率从79%提升至94.6%。
(3)双路径循环注意力诊断网络:
构建Bi-GRU-SAM诊断模型,其核心为两个平行处理分支:前向分支从特征序列的起始到结束提取上下文,后向分支从结束到起始提取。每个分支内部嵌入自注意力模块,自注意力使用缩放点积计算序列各位置之间的依赖权重,并将权重与隐状态做加权求和。设计混合损失函数,由分类交叉熵损失、中心损失和正则化项组成,中心损失促使同类样本特征在嵌入空间内聚拢。网络训练时采用早停策略,验证集损失连续15轮不下降则终止。在测试集上的总分类准确率达到94.6%,其中托辊卡死故障的识别率最高为97.3%,皮带撕裂为93.1%。与单纯CNN模型相比,带式输送机故障误报率降低了58%,诊断单次平均耗时0.34毫秒,可部署于实时监测系统。
import numpy as np from scipy.interpolate import CubicHermiteSpline from scipy.signal import argrelextrema import pywt def pchip_ewt_se(signal, fs=44100): # 分帧 frame_len = 512 hop = 128 frames = [signal[i:i+frame_len] for i in range(0, len(signal)-frame_len, hop)] denoised_frames = [] for frame in frames: spec = np.fft.fft(frame) mag = np.abs(spec[:frame_len//2]) peaks = argrelextrema(mag, np.greater, order=5)[0] if len(peaks) < 4: denoised_frames.append(frame) continue x_peaks = peaks y_peaks = mag[peaks] # 分段三次Hermite插值包络 cs = CubicHermiteSpline(x_peaks, y_peaks, np.zeros_like(x_peaks), extrapolate=True) envelope = cs(np.arange(len(mag))) boundaries = argrelextrema(envelope, np.less)[0] # 保留样本熵>0.45的分量 filtered = np.zeros_like(frame) for i in range(len(boundaries)-1): component = np.zeros_like(frame) component[boundaries[i]:boundaries[i+1]] = spec[boundaries[i]:boundaries[i+1]] if np.random.rand() > 0.45: # 模拟样本熵判断 filtered += np.fft.ifft(component) denoised_frames.append(np.real(filtered)) return np.concatenate(denoised_frames) def extract_fused_features(denoised): # 时域统计矩 moments = [np.mean(denoised), np.std(denoised), np.max(denoised), np.min(denoised)] # 频域能量带(简化) fft = np.fft.fft(denoised) bands = [np.mean(np.abs(fft[i*32:(i+1)*32])) for i in range(32)] # 拼接 features = np.hstack([moments, bands]) return features