轨道交通列车轮对轴承自供电感知与微弱故障诊断方法【附程序】

轨道交通列车轮对轴承自供电感知与微弱故障诊断方法【附程序】 ✨ 长期致力于轮对轴承、摩擦纳米发电机、微弱故障、冲击噪声、欠定盲源提取、循环相关熵、窄带滤波、原型系统研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1摩擦纳米发电的转向架振动能量俘获与间歇供电管理设计一种多层叠堆式摩擦纳米发电机采用PTFE和铝电极内部弹簧预紧。将发电机安装于列车转向架垂向减振器旁实测振动加速度幅值0.5-2g时开路电压可达150V短路电流20μA。能量管理电路包括全桥整流、电容储能和电压监控芯片当电容电压升至5V时导通为无线传感节点供电降至3V时断开。在实验台模拟25km/h运行每90秒可采集一次振动数据持续2秒完全自供电无需电池。该模块已集成到原型系统中。2基于信号分解与核相关熵的欠定盲源提取针对单通道轴承信号首先使用变分模态分解将信号分解为K个本征模态函数K由中心频率观察法确定为5。然后构造每个模态与原始信号的核相关熵高斯核函数核宽0.3选择相关熵最大的两个模态作为源估计。再通过负熵最大化的FastICA提取故障脉冲成分。与传统基于二阶相关的盲提取相比本方法在信噪比-5dB冲击噪声环境下故障特征频率识别准确率从54%提高到89%。3循环相关熵谱密度与窄带滤波级联诊断计算信号的循环相关熵谱密度在循环频率轴上搜索故障特征频率候选。对于滚动轴承外圈故障理论特征频率为107Hz实测谱中峰值出现在105-109Hz范围。然后设计窄带带通滤波器中心频率108Hz带宽10Hz对原始信号滤波再对滤波后信号包络解调。使用最小二乘支持向量机以包络谱峰值比、峰度作为特征分类三种故障类型内圈、外圈、滚子。在轮对轴承试验台该方法对微弱故障裂纹宽度0.2mm的识别率95.6%相比谱峭度方法提高22%。import numpy as np from scipy.signal import butter, filtfilt from vmdpy import VMD from sklearn.svm import SVC class BearingDiagnosis: def __init__(self, alpha2000, tau0, K5, DC0, init1, tol1e-7): self.vmd_params (alpha, tau, K, DC, init, tol) def vmd_bss(self, signal): u, u_hat, omega VMD(signal, **dict(zip([alpha,tau,K,DC,init,tol], self.vmd_params))) # compute correntropy between each mode and original kernel_width 0.3 corr [] for mode in u: diff signal - mode ker np.exp(-diff**2/(2*kernel_width**2)) corr.append(np.mean(ker)) best_modes np.argsort(corr)[-2:] # FastICA on these two modes as sources from sklearn.decomposition import FastICA ica FastICA(n_components2) sources ica.fit_transform(np.column_stack([u[best_modes[0]], u[best_modes[1]]])) return sources[:,0] # extract fault impulsive component def cyclic_correntropy_spectrum(self, signal, fs, fcandidate107): # simplified: compute cyclic correntropy at candidate frequency T len(signal)/fs t np.linspace(0, T, len(signal)) kernel_sigma 0.2 corr np.exp(- (signal[:,None] - signal[None,:])**2 / (2*kernel_sigma**2)) # cyclic frequency scanning alpha fcandidate cc_est np.abs(np.sum(corr * np.exp(-1j*2*np.pi*alpha*t[:,None] - 1j*2*np.pi*alpha*t[None,:]))/corr.size) return cc_est def narrowband_envelope(self, signal, fs, center_freq108, bw10): nyq fs/2 b, a butter(4, [(center_freq-bw/2)/nyq, (center_freqbw/2)/nyq], btypeband) filtered filtfilt(b, a, signal) envelope np.abs(filtered 1j*np.hilbert(filtered)) # compute spectrum spec np.abs(np.fft.fft(envelope))[:len(envelope)//2] freqs np.fft.fftfreq(len(envelope), 1/fs)[:len(envelope)//2] peak_ratio np.max(spec[10:]) / np.mean(spec[10:]) kurt np.mean((envelope - np.mean(envelope))**4) / (np.std(envelope)**4) return peak_ratio, kurt