1. 项目背景与问题定位
上周实验室新来的师弟找我帮忙复现西储大学轴承故障诊断的迁移学习代码,本以为是个简单的指导工作,没想到从数据预处理到模型训练踩了整整两天的坑。这个案例特别适合刚接触机械故障诊断和迁移学习的新手,我把整个复现过程梳理成以下技术要点。
西储大学轴承数据集是故障诊断领域的经典benchmark,包含正常状态、内圈故障、外圈故障、滚动体故障四种典型工况。原始数据采样频率12kHz,每个样本长度1024点,但直接拿公开代码跑会发现准确率比论文低20%以上——问题就出在数据标准化和网络微调的细节处理上。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据预处理关键步骤
2.1 原始信号处理避坑指南
第一个大坑出现在数据读取阶段。多数公开代码使用scipy.io.loadmat直接读取.mat文件,但西储数据在保存时做了嵌套结构处理。正确的加载方式应该是:
python复制import scipy.io as sio
data = sio.loadmat('97.mat')['X097_DE_time'].flatten() # 注意提取实际信号数组
更关键的是采样点对齐问题。原始数据每段采样长度不统一,需要强制统一到1024点:
python复制segment_length = 1024
segments = [data[i:i+segment_length] for i in range(0, len(data)-segment_length, segment_length//2)]
2.2 时频域特征工程
单纯使用原始振动信号训练效果有限,需要构造时频域联合特征:
- 时域特征:峰值、峰峰值、峭度、脉冲因子等12个指标
- 频域特征:通过FFT计算频谱重心、均方频率等8个指标
- 小波包分解:db4小波3层分解获取8个子频带能量
python复制from scipy.signal import welch
f, Pxx = welch(segment, fs=12000, nperseg=256)
spectral_centroid = np.sum(f * Pxx) / np.sum(Pxx)
特别注意:不同故障类型的敏感特征维度不同,外圈故障对高频分量更敏感,需要保留更多小波分解的高频子带
