1. 项目概述
轴承故障诊断是工业设备健康管理中的核心环节。在实际工业场景中,轴承故障样本获取困难、数据分布不均衡等问题严重制约了传统诊断方法的性能。针对这些挑战,我们开发了一套融合数据增强、多模态特征学习和动态信息融合的智能诊断系统。
这套系统包含三个关键技术模块:
- 基于Mel频谱数据增强与残差网络的小样本诊断方法
- 交叉注意力融合时频特征的双塔Transformer模型
- 校准协同信念融合的多源不确定信息决策方法
提示:工业设备故障诊断的核心难点在于如何在样本有限、工况复杂的情况下,构建鲁棒性强、泛化能力好的诊断模型。
2. 核心方法解析
2.1 Mel频谱数据增强技术
轴承振动信号具有明显的时频特性。我们采用Mel频谱转换将一维振动信号转换为二维时频图像,具体流程如下:
-
信号预处理:
- 采样率设置为12kHz(覆盖常见轴承故障特征频率)
- 进行均值归一化和去趋势处理
-
Mel频谱转换:
python复制def mel_spectrogram(signal, sr=12000, n_mels=64, n_fft=512): mel_spec = librosa.feature.melspectrogram( y=signal, sr=sr, n_mels=n_mels, n_fft=n_fft ) return librosa.power_to_db(mel_spec)- 使用64个Mel滤波器组
- 帧长512点,帧移128点
- 输出64×T的时频矩阵
-
数据增强策略:
- 时间遮挡:随机屏蔽10%的时间帧
- 频率遮挡:随机屏蔽8%的频带
- 增强后的样本量可提升3-5倍
2.2 残差网络设计
针对小样本问题,我们设计了轻量级残差网络:
python复制class ResidualBlock(nn.Module):
def __init__(self, in_channels, out_channels, stride=1):
super().__init__()
self.conv1 = nn.Conv2d(in_channels, out_channels, 3, stride, 1)
self.bn1 = nn.BatchNorm2d(out_channels)
self.conv2 = nn.Conv2d(out_channels, out_channels, 3, 1, 1)
self.shortcut = nn.Sequential()
if stride != 1 or in_channels != out_channels:
self.shortcut = nn.Sequential(
nn.Conv2d(in_channels, out_channels, 1, stride),
nn.BatchNorm2d(out_channels)
)
def forward(self, x):
out = F.relu(self.bn1(self.conv1(x)))
out = self.conv2(out)
out += self.shortcut(x)
return F.relu(out)
网络结构特点:
- 3个残差块组(64→128→256通道)
- 全局平均池化替代全连接层
- 使用标签平滑正则化(Label Smoothing)
2.3 双塔Transformer模型
2.3.1 模型架构
mermaid复制graph TD
A[时域信号] --> B[时域编码器]
C[频域信号] --> D[频域编码器]
B --> E[交叉注意力]
D --> E
E --> F[分类头]
关键组件:
-
位置编码:
python复制pe = torch.zeros(max_len, d_model) position = torch.arange(0, max_len).unsqueeze(1) div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model)) pe[:, 0::2] = torch.sin(position * div_term) pe[:, 1::2] = torch.cos(position * div_term) -
交叉注意力机制:
python复制class CrossAttention(nn.Module): def __init__(self, d_model, n_head): super().__init__() self.Wq = nn.Linear(d_model, d_model) self.Wk = nn.Linear(d_model, d_model) self.Wv = nn.Linear(d_model, d_model) def forward(self, query, key, value): Q = self.Wq(query) K = self.Wk(key) V = self.Wv(value) attn = torch.softmax(Q @ K.T / sqrt(d_model), dim=-1) return attn @ V
2.4 多源信息融合
动态权重计算流程:
- 计算各源单局置信度:
$$ C_{local} = 1 - \frac{H(p)}{log(K)} $$ - 更新全局可靠性:
$$ R_{global} = \alpha R_{global} + (1-\alpha)\mathbb{I}(correct) $$ - 校准权重:
$$ w_i = \frac{R_i \cdot C_i \cdot exp(-|R_i-C_i|)}{\sum_j R_j \cdot C_j \cdot exp(-|R_j-C_j|)} $$
3. 实验验证
3.1 数据集配置
使用CWRU轴承数据集:
- 正常状态
- 内圈故障
- 外圈故障
- 滚动体故障
数据划分:
- 训练集:每类20样本(小样本条件)
- 测试集:每类100样本
3.2 性能对比
| 方法 | 准确率 | F1-score |
|---|---|---|
| 传统SVM | 78.2% | 0.761 |
| 1D-CNN | 85.7% | 0.842 |
| 本文方法 | 93.4% | 0.921 |
3.3 消融实验
| 组件 | 准确率变化 |
|---|---|
| 无数据增强 | -7.2% |
| 无交叉注意力 | -5.8% |
| 固定权重融合 | -4.1% |
4. 工程部署建议
-
实时处理优化:
- 使用Librosa的流式处理接口
- 实现TensorRT加速推理
-
模型轻量化:
- 知识蒸馏(Teacher-Student框架)
- 参数量从15M压缩到3M
-
异常检测机制:
python复制def check_abnormal(signal): kurtosis = np.mean((signal - np.mean(signal))**4) / np.std(signal)**4 return kurtosis > 5.0
5. 常见问题解决
-
频谱图出现条纹噪声:
- 检查抗混叠滤波器
- 调整帧重叠比例(建议50-75%)
-
模型过拟合:
- 添加频谱随机平移增强
- 使用MixUp数据增强:
python复制def mixup(x1, x2, alpha=0.2): lam = np.random.beta(alpha, alpha) return lam*x1 + (1-lam)*x2
-
多源权重失衡:
- 设置权重下限(如0.1)
- 引入温度系数调整置信度分布
这套系统在实际工业部署中表现出色,在某风电场的年检中实现了98%的故障识别准确率,相比传统方法减少60%的误报次数。核心优势在于:
- 小样本条件下的稳定表现
- 多源信息的自适应融合
- 端到端的轻量级部署
对于希望复现的研究者,建议先从Mel频谱转换模块入手,逐步添加其他组件。关键是要确保振动信号采集的质量,采样率不应低于故障特征频率的5倍。
