1. 项目概述
轴承作为机械设备中的关键部件,其健康状况直接影响着整个系统的运行安全。传统的轴承故障诊断方法主要依赖人工特征提取和浅层机器学习模型,这种方法在复杂工况下往往表现不佳。近年来,深度学习技术在故障诊断领域展现出巨大潜力,特别是卷积神经网络(CNN)在图像识别中的成功应用,为振动信号分析提供了新思路。
本项目创新性地将音频处理领域的梅尔频谱分析技术与三维卷积神经网络(3DCNN)相结合,提出了一种全新的轴承故障诊断方法。通过多分辨率Mel分析将一维振动信号转换为三维特征表示,再利用3DCNN强大的空间特征提取能力,实现了对轴承故障的高精度分类。实验结果表明,该方法在西储大学轴承数据集和东南大学齿轮箱数据集上都取得了100%的准确率。
提示:3DCNN相比传统2DCNN的优势在于能够同时捕捉时域、频域和空间域的特征,这对于振动信号分析尤为重要,因为故障特征往往在这三个维度上都有体现。
2. 数据处理与准备
2.1 数据集介绍与获取
本实验使用了两个业界公认的标准数据集:
-
西储大学轴承数据集:
- 包含正常状态和多种故障类型(内圈、外圈、滚动体故障)
- 每种故障类型有不同尺寸的缺陷(0.007英寸到0.021英寸)
- 采样频率为12kHz,包含驱动端和风扇端的振动数据
-
东南大学齿轮箱数据集:
- 包含齿轮箱在不同负载和转速条件下的振动信号
- 故障类型包括齿轮断齿、磨损等多种模式
- 采样频率为20kHz,工况更加复杂多样
数据集获取方式:
matlab复制% 西储大学数据下载示例
url = 'https://csegroups.case.edu/bearingdatacenter/pages/download-data-file';
% 东南大学数据需要通过邮件申请
2.2 数据预处理流程
完整的数据预处理流程包括以下关键步骤:
-
信号分段:
- 将长时程振动信号分割为固定长度的样本
- 典型设置:每个样本包含8192个数据点(约0.68秒@12kHz)
- 重叠率设置为50%以增加样本数量
-
数据标准化:
matlab复制% MATLAB数据标准化示例 function [normalized_data] = normalize_signal(raw_data) signal_mean = mean(raw_data); signal_std = std(raw_data); normalized_data = (raw_data - signal_mean) / signal_std; end -
数据增强技术:
- 添加高斯噪声(SNR=20dB)
- 时间拉伸(±10%)
- 幅度缩放(±5%)
-
标签编码:
- 使用one-hot编码表示不同故障类型
- 例如:[1,0,0,0]表示正常,[0,1,0,0]表示内圈故障等
注意:齿轮箱数据由于样本较少,需要更激进的数据增强策略。建议采用SMOTE算法生成合成样本,避免类别不平衡问题。
3. 特征提取方法
3.1 多分辨率Mel频谱分析
Mel频谱分析的核心思想是模拟人耳对频率的非线性感知特性。与传统FFT相比,Mel频谱在低频区域有更高的分辨率,这恰好符合轴承故障特征多集中在低频段的特点。
实现步骤:
-
短时傅里叶变换(STFT):
- 窗函数:汉明窗
- 窗长:256个采样点
- 重叠:50%
-
Mel滤波器组设计:
matlab复制% MATLAB Mel滤波器组实现 [melFilterBank, freq] = designAuditoryFilterBank(fs, 'NumBands', 40, 'FFTLength', 256); -
多分辨率处理:
- 设计三组不同参数的Mel滤波器:
- 粗分辨率:20个Mel带
- 中分辨率:40个Mel带
- 细分辨率:80个Mel带
- 将三个不同分辨率的Mel频谱堆叠形成三维特征图
- 设计三组不同参数的Mel滤波器:
3.2 与传统方法的对比
我们对比了三种特征提取方法:
| 方法 | 维度 | 计算复杂度 | 准确率(%) |
|---|---|---|---|
| 原始波形 | 1D | 低 | 82.3 |
| STFT频谱 | 2D | 中 | 89.7 |
| 多分辨率Mel | 3D | 高 | 100 |
实操心得:Mel滤波器数量的选择很关键。经过实验,我们发现40个Mel带在准确率和计算成本之间取得了最佳平衡。滤波器数量过少会丢失细节特征,过多则会导致计算量剧增而收益递减。
4. 3DCNN模型架构与实现
4.1 网络结构设计
我们设计的3DCNN模型包含以下层次:
- 输入层:接收80×40×3的特征图(时间×频率×通道)
- 卷积块1:
- 3D卷积层:32个5×5×3滤波器
- 批归一化层
- ReLU激活
- 3D最大池化:2×2×1
- 卷积块2:
- 3D卷积层:64个3×3×3滤波器
- 批归一化层
- ReLU激活
- 3D最大池化:2×2×1
- 全连接层:
- 展平层
- 128个神经元,Dropout=0.5
- 输出层:Softmax激活
matlab复制% MATLAB 3DCNN模型定义
layers = [
image3dInputLayer([80 40 3 1], 'Name', 'input')
convolution3dLayer([5 5 3], 32, 'Padding', 'same', 'Name', 'conv1')
batchNormalizationLayer('Name', 'bn1')
reluLayer('Name', 'relu1')
maxPooling3dLayer([2 2 1], 'Stride', [2 2 1], 'Name', 'pool1')
convolution3dLayer([3 3 3], 64, 'Padding', 'same', 'Name', 'conv2')
batchNormalizationLayer('Name', 'bn2')
reluLayer('Name', 'relu2')
maxPooling3dLayer([2 2 1], 'Stride', [2 2 1], 'Name', 'pool2')
fullyConnectedLayer(128, 'Name', 'fc1')
dropoutLayer(0.5, 'Name', 'dropout')
fullyConnectedLayer(numClasses, 'Name', 'fc2')
softmaxLayer('Name', 'softmax')
classificationLayer('Name', 'output')
];
4.2 模型训练技巧
-
优化器配置:
- 使用Adam优化器,初始学习率0.001
- 每10个epoch学习率衰减为原来的0.9
-
早停策略:
- 监控验证集准确率
- 连续5个epoch没有提升则停止训练
-
正则化方法:
- L2正则化(λ=0.001)
- Dropout率=0.5
- 批归一化层
注意事项:3DCNN的训练显存消耗很大。在NVIDIA RTX 3080上,batch_size设置为32时显存占用约8GB。如果显存不足,可以减小batch_size但相应地需要调整学习率。
5. 3DCNN-SVM混合模型
5.1 模型融合策略
我们发现3DCNN提取的高层特征具有很好的可分性,因此尝试用SVM替代最后的全连接层:
-
特征提取阶段:
- 使用训练好的3DCNN(去掉最后的softmax层)
- 提取倒数第二层(128维)的特征向量
-
SVM训练:
- 核函数:RBF核
- 参数优化:网格搜索C和γ
- 多分类策略:一对多(OvR)
matlab复制% MATLAB SVM训练示例
features = activations(net, testImages, 'fc1', 'OutputAs', 'rows');
SVMModel = fitcecoc(featuresTrain, trainLabels, 'Learners', 'svm', 'Coding', 'onevsall');
5.2 性能对比
| 模型 | 准确率(%) | 训练时间(min) | 推理速度(ms/样本) |
|---|---|---|---|
| 纯3DCNN | 100 | 45 | 8.2 |
| 3DCNN-SVM | 99.8 | 38 | 6.7 |
| 传统SVM | 89.7 | 5 | 1.2 |
虽然纯3DCNN准确率略高,但3DCNN-SVM混合模型在保持相近精度的同时,推理速度提升了18%。这在实时监测场景中很有价值。
6. 实验结果与分析
6.1 分类性能评估
在西储大学数据集上的详细结果:
| 故障类型 | 精确率 | 召回率 | F1分数 |
|---|---|---|---|
| 正常 | 1.00 | 1.00 | 1.00 |
| 内圈故障 | 1.00 | 1.00 | 1.00 |
| 外圈故障 | 1.00 | 1.00 | 1.00 |
| 滚动体故障 | 1.00 | 1.00 | 1.00 |
混淆矩阵显示所有样本都被正确分类,没有出现任何误判。
6.2 特征可视化
使用t-SNE将128维特征降至2维后的可视化结果:

从图中可以清晰看到不同故障类型的特征形成了明显的聚类,且类间距离较大,这解释了模型高准确率的原因。
7. 工程实践建议
在实际工业部署中,我们总结了以下经验:
-
实时实现优化:
- 将Mel特征提取和3DCNN推理移植到C++实现
- 使用Intel MKL加速矩阵运算
- 在4核CPU上单次推理时间可压缩到15ms以内
-
模型轻量化方向:
- 知识蒸馏:用大模型训练小模型
- 量化:将FP32转为INT8
- 剪枝:移除不重要的卷积核
-
故障预警策略:
- 连续N次预测为故障才触发报警(N=3)
- 结合时域指标(RMS、峭度等)进行综合判断
- 设置置信度阈值(如<0.9时标记为"不确定")
踩坑记录:初期直接部署原始模型时遇到内存泄漏问题,后发现是MATLAB引擎没有正确释放。改用MATLAB Compiler SDK生成DLL后问题解决。建议生产环境一定要进行充分的压力测试。
8. 扩展应用与未来方向
本方法不仅适用于轴承故障诊断,还可推广到:
-
其他旋转机械:
- 齿轮箱故障诊断
- 电机转子不平衡检测
- 涡轮机叶片损伤识别
-
多传感器融合:
- 结合振动信号与声发射信号
- 融合温度、电流等多模态数据
- 使用注意力机制动态加权不同信号源
-
自监督学习:
- 利用大量无标签数据预训练
- 对比学习构建信号表示
- 少量标注数据微调
未来我们将重点研究如何在边缘设备(如STM32H7)上部署这类复杂模型,实现真正的实时在线监测。同时探索小样本学习策略,解决工业场景中故障样本稀缺的问题。