✅博主简介擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导毕业论文、期刊论文经验交流。✅ 如需沟通交流扫描文章底部二维码。1基于CEEMD-KPCA的声发射信号特征提取与支持向量机状态分类为了准确识别直升机发动机浮环密封在不同膜厚状态下的声发射信号提出一种完备集合经验模态分解与核主成分分析相结合的特征提取方法。首先对采集的声发射信号进行中心化预处理然后采用互补集合经验模态分解将信号分解为多个本征模态函数分量该方法通过添加正负白噪声对来消除模态混叠比传统经验模态分解更稳定。计算每个本征模态函数分量的能量、峭度、裕度因子和样本熵形成高维初始特征集。由于特征之间存在冗余和噪声进一步采用核主成分分析进行非线性降维将特征映射到高维核空间后提取主成分。核主成分分析相比线性主成分分析能够更好地捕获数据中的非线性关系。最终得到低维特征向量输入支持向量机分类器实现将膜厚分为零、薄、中、厚四种状态。实验表明该方法分类准确率达到87%为密封状态监测提供了可靠依据。2VGG19-SK动态注意力网络用于启停阶段密封开启识别针对浮环密封在启停阶段声发射信号具有强瞬变性和非平稳性提出一种改进的VGG19-SK网络。首先将声发射信号转换为Mel频谱图频谱表示更符合人耳听觉感知特性能够突出密封摩擦的特征频率。Mel频谱图作为2D图像输入网络。在VGG19的基础上引入SK卷积模块选择性核网络替代部分常规卷积层。SK模块通过多分支不同尺寸卷积核如3×3和5×5提取多尺度特征然后利用注意力机制自动融合两个分支动态选择最佳感受野。网络中还集成了全局平均池化层替代全连接层以减少参数量以及批量归一化层加速训练。改进后的VGG19-SK相比原VGG19准确率提升2.19%参数量减少83.74%显著降低了硬件资源需求。该模型成功部署在嵌入式设备上实现了密封开启状态的实时识别。3随机森林与小波包时频域特征的碰磨故障诊断针对长时间运转中密封碰磨故障的诊断问题提出基于随机森林的方法。首先通过实验台模拟浮环密封正常和碰磨两种工况采集声发射信号。对原始信号进行小波阈值去噪处理采用软阈值函数去除高频噪声成分而不破坏突变点。然后对小波包分解提取时频域特征选择db4小波基分解层数为3层得到8个频带子信号计算每个子信号的能量占比和能量熵构成特征向量。由于决策树容易过拟合采用随机森林集成算法通过Bootstrap采样生成多个决策树投票决定最终分类结果。随机森林对噪声和异常值不敏感在小样本下表现良好。实验结果显示随机森林模型在测试集上的分类准确率达到94%优于极限梯度提升算法能够准确判别碰磨状态为浮环密封的长期健康监测提供了有效手段。import numpy as np import pywt from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier from PyEMD import CEEMDAN import torch import torch.nn as nn # CEEMD分解与KPCA特征提取sklearn风格 def ceemd_kpca_features(signal): ceemdan CEEMDAN() imfs ceemdan.ceemdan(signal, max_imf8) features [] for imf in imfs: energy np.sum(imf**2) kurtosis (np.mean((imf-np.mean(imf))**4) / (np.std(imf)**41e-8))-3 features.extend([energy, kurtosis]) # 使用KPCA需要安装scikit-learn from sklearn.decomposition import KernelPCA kpca KernelPCA(n_components6, kernelrbf) reduced kpca.fit_transform(np.array(features).reshape(1,-1)) return reduced.flatten() # VGG19-SK模块选择性核卷积 class SKConv(nn.Module): def __init__(self, in_channels, out_channels, stride1, M2, r16): super().__init__() self.M M self.convs nn.ModuleList([nn.Conv2d(in_channels, out_channels, 3, stride, 1, dilation1), nn.Conv2d(in_channels, out_channels, 5, stride, 2, dilation2)]) self.fc nn.Linear(out_channels, out_channels//r) self.fc2 nn.Linear(out_channels//r, out_channels*M) self.softmax nn.Softmax(dim1) def forward(self, x): feats [conv(x) for conv in self.convs] U sum(feats) S torch.mean(U, dim[2,3]) Z self.fc(S) weights self.fc2(Z).view(x.size(0), self.M, -1, 1, 1) weights self.softmax(weights) out sum([feats[i] * weights[:,i] for i in range(self.M)]) return out class VGG19_SK(nn.Module): def __init__(self, num_classes4): super().__init__() self.features nn.Sequential( nn.Conv2d(3,64,3,padding1), nn.ReLU(), nn.Conv2d(64,64,3,padding1), nn.ReLU(), nn.MaxPool2d(2), SKConv(64,128), nn.ReLU(), SKConv(128,128), nn.ReLU(), nn.MaxPool2d(2), # ... 省略 ) self.gap nn.AdaptiveAvgPool2d(1) self.fc nn.Linear(128, num_classes) def forward(self, x): x self.features(x) x self.gap(x).squeeze(-1).squeeze(-1) return self.fc(x) # 小波包分解与随机森林 def wavelet_packet_features(signal, waveletdb4, level3): wp pywt.WaveletPacket(signal, wavelet, maxlevellevel) features [] for node in wp.get_level(level): coeffs node.data energy np.sum(coeffs**2) features.append(energy) total sum(features)1e-8 energy_ratio [f/total for f in features] entropy -sum([r*np.log(r1e-8) for r in energy_ratio]) return np.array(energy_ratio [entropy]) # 随机森林训练 def train_rf(train_signals, train_labels): feat_list [wavelet_packet_features(sig) for sig in train_signals] X np.array(feat_list) rf RandomForestClassifier(n_estimators100, max_depth10, random_state42) rf.fit(X, train_labels) return rf ,如有问题可以直接沟通