基于自适应随机共振与CYCBD的轴承故障诊断信号处理【附代码】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
✅如需沟通交流,查看文章底部二维码
(1)基于排序自适应布谷鸟算法的时延分数阶偏置非线性随机共振系统优化:
针对轴承初期故障特征微弱且淹没在强噪声中的问题,构建了一种时延分数阶偏置非线性过阻尼随机共振系统TFODF-SR。该系统在经典双稳态势函数中引入时延项和分数阶偏置,势函数U(x)=0.25a x⁴-0.5b x²+c x + d * x(t-τ),其中分数阶偏置c能够打破对称限制,使输出信噪比更高。为自适应地确定势参数a、b、c和时延τ,提出了基于排序的自适应布谷鸟算法RACS。该算法在布谷鸟搜索框架中加入排序学习策略,根据当前种群个体适应度排序自适应调整Lévy飞行的步长尺度,并在抛弃巢穴时使用受精英引导的局部搜索替代随机重建。以输出信噪比为目标函数,在每次迭代中利用四阶Runge-Kutta法求解随机共振系统,计算信噪比。优化后参数为a=0.42、b=1.17、c=0.23、τ=0.035秒。将该系统用于凯斯西储大学轴承数据和实际风机轴承数据,对信噪比为-15dB的原始信号处理后,故障特征频率处的幅值相对原始信号提高了8.6倍,故障识别准确率从56%提升至96%。与自适应常规随机共振相比,TFODF-SR对冲击性故障信号有更好的增强效果。
(2)拉丁超立方抽样改进随机权重粒子群优化的自适应CYCBD前处理:
为进一步突出轴承故障信号的二阶循环平稳特征,引入最大二阶循环平稳盲解卷积CYCBD作为前置处理。CYCBD通过迭代求解滤波器使滤波信号的二阶循环平稳指标最大,但需要准确知道故障特征频率这一先验参数。为实现自适应,利用拉丁超立方抽样改进的随机权重粒子群算法LRPSO自动搜索最优的故障特征频率和滤波器长度。LRPSO采用拉丁超立方抽样初始化粒子位置以保证搜索空间的均匀覆盖,粒子速度更新中采用随机权重代替固定权重,权重服从U(0.4,0.9)均匀分布以增强探索能力,同时引入基于维度的自适应变异。以CYCBD输出信号的包络谱中故障特征频率的谐波能量与总能量比为目标函数。当该比率超过阈值时停止迭代。将该自适应CYCBD与TFODF-SR级联,形成LRPSO-CYCBD-TFODF-SR诊断链。对模拟的滚动轴承内外圈故障信号进行测试,在-8dB噪声下,故障特征频率处的包络谱幅值比仅用CYCBD提高了3.2倍,比仅用SR提高了2.1倍,诊断精度达到98.5%。
(3)MATLAB GUI故障诊断软件开发与多轴承实验验证:
基于上述算法,利用MATLAB GUI开发了滚动轴承故障诊断软件,集成了信号导入、自适应参数设置、一键诊断和结果显示功能。软件内部封装了LRPSO-CYCBD和自适应TFODF-SR算法,用户只需输入轴承几何参数和采样频率,即可自动完成优化和诊断。为了验证软件的有效性和通用性,使用了三个公开轴承数据集(CWRU、MFPT、XJTU-SY)和自采的煤矿提升机轴承数据进行实验,总共包含正常、内圈、外圈、滚动体四种状态750段样本。软件诊断结果的宏平均F1分数达到0.974,尤其在XJTU-SY全寿命数据集中,比流行的Spectral Kurtosis提前52分钟预警故障,展现了出色的早期故障检测能力。软件运行一张10秒信号的全自动诊断流程平均耗时2.3秒,具备工业现场快速检查的实用性。
import numpy as np from scipy.integrate import solve_ivp # TFODF-SR系统求解 def tfodf_sr_signal(signal, a, b, c, tau, dt): def sr_system(t, x): # 时延项使用过去时刻的状态(需维护历史) return - (4*a*x**3 - 2*b*x + c) + signal[int(t/dt)] + 0.1 * x_history[int(t/dt)-int(tau/dt)] sol = solve_ivp(sr_system, [0, len(signal)*dt], [0], t_eval=np.linspace(0,len(signal)*dt,len(signal))) return sol.y[0] # RACS算法优化SR参数 def racs_optimize_sr(signal, sr_func): n_nest = 30; pa = 0.25 nests = np.random.uniform(0.1, 2.0, (n_nest, 4)) # a,b,c,tau fitness = np.zeros(n_nest) for gen in range(150): for i in range(n_nest): fitness[i] = compute_snr(sr_func(signal, *nests[i])) sorted_idx = np.argsort(fitness)[::-1] nests = nests[sorted_idx]; fitness = fitness[sorted_idx] # 排序学习调整步长 for i in range(n_nest): if np.random.rand() < pa: step = (1-i/n_nest) * levy_flight(4) nests[i] += step keep = int((1-pa)*n_nest) for i in range(keep, n_nest): nests[i] = np.random.uniform(0.1,2.0,4) return nests[0] # 自适应CYCBD(简化伪代码) def cycbd_filter(signal, fc, filter_len=64): w = np.random.randn(filter_len) for _ in range(30): y = np.convolve(signal, w, mode='same') # 计算循环平稳指标 cs = cyclic_spectral_correlation(y, fc) w = update_filter_by_rayleigh(w, y) # 最大化CS return y # LRPSO搜索最优fc def lrpso_search_fc(signal, filter_len_range): pop = latin_hypercube_sample(30, 2) # [fc, len] best_fc = None; best_ratio = 0 for part in pop: y = cycbd_filter(signal, part[0], int(part[1])) ratio = harmonic_ratio(y, part[0]) if ratio > best_ratio: best_ratio = ratio; best_fc = part[0] return best_fc如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
