✅博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 如需沟通交流,扫描文章底部二维码。
(1)优化变分互无量纲特征与变分模态分解的联合特征提取:
针对旋转机械故障信号中非线性、非平稳特性导致传统特征提取效果差的问题,提出一种变分模态分解与优化无量纲特征相结合的联合特征提取方法。首先采用变分模态分解将原始振动信号自适应分解为若干本征模态函数分量,每个分量对应不同的中心频率和有限带宽。相比经验模态分解,变分模态分解具有坚实的数学理论基础,能有效避免模态混叠。分解后,对每个本征模态函数分量计算一系列无量纲指标,包括峰值指标、脉冲指标、裕度指标、波形指标和峭度指标等。但指标在不同故障类型下的敏感度存在差异,因此引入互信息熵来评价每个指标与故障类别之间的相关性,选择出最具判别力的互无量纲特征组合。同时,为了消除各特征之间的量纲影响和冗余性,采用主成分分析对选出的特征进行降维融合,最终形成维数低、区分度高的故障特征向量。实验证明,该方法在滚动轴承单一故障识别中准确率达到98%以上。
(2)互协同宽度学习系统与增量式网络构建:
为解决传统深度网络在训练数据有限情况下收敛慢、易过拟合的问题,提出一种互协同宽度学习系统。宽度学习系统由特征映射节点和增强节点组成,通过随机初始化权重和偏差将输入特征映射到高维空间,然后利用岭回归快速求解输出权重。本研究在此基础上引入互协同机制,即构建两个平行的宽度学习分支,在每个分支中分别使用不同的随机映射参数,然后通过互信息正则化项使两个分支的特征表示相互促进、协同学习。同时,设计了一种增量式学习算法,当新数据到达或模型精度不足时,可以动态添加额外的增强节点或特征映射节点,而无需重新训练整个网络。增量学习过程中仅需更新新节点对应的伪逆矩阵,计算效率极高。该方法特别适用于旋转机械在线监测场景,能够在毫秒级时间内完成故障分类,且在小样本条件下的表现显著优于传统深度神经网络。
(3)多尺度模态特征熵与双通道多尺度卷积神经网络的复合故障诊断:
针对复合故障(多种故障同时发生)特征重叠、难以区分的问题,提出一种基于多尺度模态特征熵与双通道网络的方法。首先,对原始信号进行优化集成经验模态分解,提取多个本征模态函数分量,并计算每个分量的样本熵、排列熵和能量熵,形成多尺度模态特征熵向量。该向量能够同时反映信号在不同时间尺度上的复杂性和不规则性,对复合故障中的不同成分敏感。然后,设计一个双通道多尺度卷积神经网络,其中第一通道使用大尺寸卷积核(如64×1)来捕获低频故障冲击成分,第二通道使用小尺寸卷积核(如3×1)捕获高频细节特征。两个通道的输出通过注意力加权融合,再送入全连接层进行分类。网络训练时引入了中心损失函数,使得同类复合故障样本在特征空间中的距离更小,不同类之间距离更大。在齿轮箱复合故障数据集上的验证表明,该方法对于复合故障的识别准确率超过96%,优于单一尺度模型。
import torch import torch.nn as nn import numpy as np from scipy.signal import hilbert from vmdpy import VMD # 假设vmdpy可用 # 变分模态分解与无量纲特征 def extract_vmd_features(signal, alpha=2000, tau=0, K=4): u, u_hat, omega = VMD(signal, alpha, tau, K, 0) features = [] for i in range(K): imf = u[i] peak = np.max(np.abs(imf)) rms = np.sqrt(np.mean(imf**2)) crest = peak / rms if rms != 0 else 0 impulse = peak / np.mean(np.abs(imf)) features.extend([crest, impulse]) return np.array(features) # 互协同宽度学习系统() class MutualBLS: def __init__(self, n_feature=10, n_enhance=20): self.W_f1 = np.random.randn(n_feature, 100) self.W_f2 = np.random.randn(n_feature, 100) self.W_e1 = np.random.randn(100, n_enhance) self.W_e2 = np.random.randn(100, n_enhance) def forward(self, X): Z1 = np.tanh(X @ self.W_f1) Z2 = np.tanh(X @ self.W_f2) H1 = np.tanh(Z1 @ self.W_e1) H2 = np.tanh(Z2 @ self.W_e2) A1 = np.hstack([Z1, H1]) A2 = np.hstack([Z2, H2]) # 互信息正则化(,实际需计算互信息) reg = np.linalg.norm(A1 - A2, 'fro') return A1, A2, reg def incremental_learning(self, new_nodes=5): # 动态增加增强节点 self.W_e1 = np.hstack([self.W_e1, np.random.randn(100, new_nodes)]) self.W_e2 = np.hstack([self.W_e2, np.random.randn(100, new_nodes)]) return self # 双通道多尺度CNN class DualChannelCNN(nn.Module): def __init__(self, num_classes): super().__init__() self.conv_large = nn.Sequential(nn.Conv1d(1,16,64,stride=2), nn.ReLU(), nn.MaxPool1d(2)) self.conv_small = nn.Sequential(nn.Conv1d(1,16,3), nn.ReLU(), nn.MaxPool1d(2)) self.attention = nn.Sequential(nn.Linear(16*2,2), nn.Softmax(dim=1)) self.fc = nn.Linear(16*2, num_classes) def forward(self, x): feat_large = self.conv_large(x).mean(dim=2) feat_small = self.conv_small(x).mean(dim=2) combined = torch.stack([feat_large, feat_small], dim=1) weights = self.attention(combined.view(x.size(0), -1)) out = weights[:,0:1]*feat_large + weights[:,1:2]*feat_small return self.fc(out) # 多尺度模态特征熵计算 def multi_scale_entropy(imfs): entropies = [] for imf in imfs: # 样本熵计算 se = -np.sum(np.diff(imf) * np.log(np.abs(np.diff(imf))+1e-10)) entropies.append(se) return np.array(entropies) ",如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇