1. 项目背景与核心思路
去年在做设备故障诊断时,我发现传统频谱分析方法对瞬态冲击特征的捕捉能力有限。当时尝试了多种时频分析方法,最终发现小波变换在时频分辨率上的平衡性表现最好。这个项目就是基于这个发现,将小波时频图与CNN结合构建的分类方案。
核心思路其实很简单:先用小波变换把振动信号转换为时频图像,这样信号的时间-频率特征就能以二维图像的形式直观呈现。然后利用CNN对图像特征的强大提取能力,直接对这些时频图进行分类。这种方法的优势在于:
- 小波变换可以自适应调整时频窗口
- 时频图保留了信号的全维度信息
- CNN省去了人工设计特征的步骤
2. 关键技术实现细节
2.1 小波时频图生成
我选用的是Morlet小波,它的时频聚焦特性很适合机械振动信号。具体参数设置:
scales = np.arange(1, 128) freq = pywt.scale2frequency('morl', scales) / sampling_interval coef, _ = pywt.cwt(signal, scales, 'morl')这里有几个关键点需要注意:
- scales的范围需要根据信号采样率调整
- 时频图分辨率与scales的步长直接相关
- 建议先做归一化处理,避免幅值影响
2.2 CNN网络设计
基于VGG的简化结构,我调整后的网络配置:
model = Sequential([ Conv2D(32, (3,3), activation='relu', input_shape=(128,128,1)), MaxPooling2D((2,2)), Conv2D(64, (3,3), activation='relu'), MaxPooling2D((2,2)), Flatten(), Dense(64, activation='relu'), Dense(num_classes, activation='softmax') ])特别说明几个设计考虑:
- 第一层卷积核不宜过大,保留时频细节
- 池化层可以逐步压缩时频分辨率
- 最后一层全连接不宜过宽,防止过拟合
3. 实际应用效果
在轴承故障数据集上的测试结果:
| 方法 | 准确率 | 训练时间 |
|---|---|---|
| 传统频谱分析 | 82.3% | 5min |
| 本文方法 | 94.7% | 23min |
虽然训练时间稍长,但准确率提升明显。特别是在早期微弱故障识别上,时频图的优势更为突出。
4. 踩坑经验分享
- 小波基选择很重要,开始用Haar小波效果很差
- 时频图尺寸建议保持2的整数次幂,方便CNN处理
- 数据增强时注意时频特性,简单的翻转会破坏时序关系
- 学习率设置要比普通图像分类更小
特别提醒:如果信号采样率很高,建议先做降采样处理,否则时频图会过大影响训练效率。