✅博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 如需沟通交流,扫描文章底部二维码。
(1)多通道辛几何模态分解与多尺度信号重构:
针对离心泵振动信号非线性非平稳且多通道信息易丢失的问题,引入辛几何模态分解方法。该方法基于辛几何变换,能够保持原始相空间的几何结构,避免模态混叠。对三个通道(轴承座、泵壳、出口法兰)的振动信号分别进行SGMD分解,得到一系列辛几何模态分量。将每个通道的模态分量按照能量贡献排序,选择前3个分量进行多尺度重构。通过多通道信息的融合,保留了不同测点下的互补故障特征,增强了故障信息的完整性。
(2)混合特征降维与麻雀搜索算法优化SVM:
从重构后的多尺度信号中提取12个特征指标(均方根、重心频率、近似熵、样本熵、波形因子、峰值因子等),形成高维混合特征集。为了消除冗余、提高计算效率,采用核主成分分析进行降维,筛选出累积贡献率超过90%的主成分。然后将降维后的特征输入到支持向量机进行分类。为了提高SVM分类精度,利用麻雀搜索算法优化惩罚因子C和核函数参数g,通过交叉验证选择最优组合。在悬臂转子-滚动轴承实验装置上设置的九种工况(正常、不平衡、不对中、轴承内圈故障等)下,所提方法的平均识别率达到99.79%,较单通道方法提高5.14%。
(3)离心泵故障诊断系统实现与验证:
在IH-50-32-150型悬臂式化工离心泵上搭建了实验平台,设置三种典型故障(转子不平衡、轴承故障、机械密封磨损)及不同严重程度共五种工况。使用LabVIEW和NI采集卡同步采集三通道振动数据,离线分析采用Python开发故障诊断软件。软件集成了SGMD分解、KPCA降维、SSA-SVM分类等模块,并提供可视化界面显示故障类型和置信度。验证结果表明,系统对五种工况的识别准确率达98.89%,证明了辛几何模态分解在离心泵故障诊断中的有效性。"
import numpy as np import pywt from sklearn.svm import SVC from sklearn.decomposition import KernelPCA # 辛几何模态分解(SGMD)简化实现 def sgmd(signal, threshold=0.1): # 1. 构造轨迹矩阵 N = len(signal) L = N // 2 X = np.zeros((L, N-L+1)) for i in range(L): X[i,:] = signal[i:i+N-L+1] # 2. 辛几何变换(QR分解等) Q, R = np.linalg.qr(X.T) # 3. 根据特征值分组得到模态分量 eigvals = np.linalg.eigvals(R) groups = [] # 简化:按特征值大小分组 idx = np.argsort(eigvals)[::-1] components = [] for i in idx: if eigvals[i] > threshold: components.append(Q[:,i]) # 4. 重构 sg_modes = [] for comp in components: mode = np.zeros(N) for j in range(L): mode += comp[j] * np.roll(signal, -j) # 近似 sg_modes.append(mode) return np.array(sg_modes) # 麻雀搜索算法优化SVM def ssa_svm(X_train, y_train, X_test, y_test, pop=20, iter=30): def fitness(params): c, g = params svm = SVC(C=c, gamma=g) svm.fit(X_train, y_train) acc = svm.score(X_test, y_test) return -acc # 麻雀位置更新(略) best_c, best_g = 10, 0.1 final_svm = SVC(C=best_c, gamma=best_g) final_svm.fit(X_train, y_train) return final_svm # 诊断系统主流程 def centrifugal_pump_diagnosis(signals_ch1, signals_ch2, signals_ch3, labels): # 1. 多通道SGMD modes = [sgmd(signals_ch1[i]) for i in range(len(signals_ch1))] # 2. 特征提取(12个指标) features = [] for mode_set in modes: feats = [] for mode in mode_set[:3]: # 取前3个模态分量 feats.extend([np.std(mode), np.mean(np.abs(mode)), np.max(mode), np.sum(mode**2)/len(mode), mode.ptp()]) features.append(feats) X = np.array(features) # 3. KPCA降维 kpca = KernelPCA(n_components=10, kernel='rbf') X_kpca = kpca.fit_transform(X) # 4. SSA-SVM训练 svm = ssa_svm(X_kpca, labels, X_kpca, labels) # 实际需划分测试集 return svm "如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇