1. 轴承故障诊断的技术演进
轴承作为旋转机械的核心部件,其健康状态直接影响设备寿命。传统故障诊断方法主要依赖时频域特征提取+分类器的模式,这种技术路线存在两个致命缺陷:一是特征工程高度依赖专家经验,二是局部特征难以捕捉早期微弱故障。这就好比老中医把脉,诊断结果严重依赖医师的个人经验积累。
近年来,基于深度学习的智能诊断方法逐渐成为主流。其中将振动信号转化为二维图像再使用视觉模型处理的思路尤为亮眼——这相当于给机械设备做CT扫描,把故障诊断问题转化为图像分类问题。在众多深度模型中,Transformer凭借其强大的全局关系建模能力,特别适合分析故障特征在时频域中的分布模式。
2. 信号转图像的核心算法
2.1 格拉姆角场(GADF)实现细节
GADF的核心思想是将一维信号映射到极坐标系后构建角度差异矩阵。具体实现时需要注意三个关键点:
- 输入预处理:原始振动信号需先进行带通滤波(通常保留1000-5000Hz频段),然后按4096点分段采样。每段信号必须归一化到[-1,1]区间,否则极坐标映射会失真。
python复制def gadf_transform(segment):
# 极坐标相位计算(输入必须归一化)
phi = np.arccos(np.clip(segment, -1, 1))
# 构建Gram矩阵
gadf = np.cos(phi.reshape(-1,1) - phi.reshape(1,-1))
# 消除对称重复部分
return np.triu(gadf) + np.tril(gadf.T, -1)
注意:arccos函数的输入必须严格限制在[-1,1]区间,否则会产生NaN值。实际部署时要添加np.clip保护。
-
参数选择:对于采样率25.6kHz的轴承信号,推荐使用4096点的窗口长度(约0.16秒时间窗),重叠率建议设置为75%(步长1024点)。这样的配置既能捕捉故障特征又不会产生过多冗余数据。
-
图像特性:正常轴承的GADF图像呈现均匀网格状,而存在故障时会出现对角线方向的条纹畸变。外圈故障通常表现为45度斜纹,内圈故障则呈现周期性点状异常。
2.2 小波变换(DWT)的工程实践
离散小波变换特别适合捕捉信号中的瞬态冲击特征,其实现要点包括:
python复制def generate_dwt_image(segment):
# 5层小波分解
coeffs = pywt.wavedec(segment, 'db4', level=5)
# 构建时频矩阵
dwt_img = np.zeros((256,256))
start_idx = 0
for i in range(1, len(coeffs)):
coeff = coeffs[-i] # 从高频到低频
length = min(len(coeff), 256*(256//(2**i)))
dwt_img[start_idx:start_idx+length//256, :] = coeff[:length].reshape(-1, 256)
start_idx += length//256
return dwt_img
小波基选择经验:
- db4/sym5:适合滚动轴承的高频冲击特征
- bior3.5:适合齿轮箱的调制信号
- morlet:适合早期微弱故障检测
实际应用中发现,对于转速波动的工况,建议采用小波包变换(WPT)代替DWT,可以获得更稳定的时频分辨率。
2.3 短时傅里叶变换(STFT)优化方案
STFT虽然计算简单,但需要特别注意两个问题:
-
窗函数选择:汉宁窗(Hanning)比矩形窗更适合轴承信号分析,能有效抑制频谱泄漏。窗长度建议设置为1024点,重叠率50%。
-
时频分辨率:通过Mel尺度变换可以优化人眼对图像的感知特性。建议将线性频谱转换为40-band的Mel谱,再映射到灰度图像。
python复制def stft_to_melspectrogram(signal, fs=25600):
f, t, Zxx = signal.stft(signal, fs=fs, nperseg=1024)
# 构建Mel滤波器组
mel_banks = librosa.filters.mel(fs, 1024, n_mels=40)
mel_spec = np.dot(mel_banks, np.abs(Zxx))
# 动态范围压缩
return np.log(mel_spec + 1e-6)
3. Transformer模型架构设计
3.1 视觉Transformer的改进方案
标准ViT直接分割图像会破坏局部时频关系,我们做了三点改进:
- 卷积嵌入层:用卷积代替线性投影,保留局部特征连续性
- 位置编码优化:采用可学习的二维位置编码,适应时频坐标特性
- 多尺度注意力:在浅层使用小patch size(16x16),深层合并为32x32
python复制class BearingViT(nn.Module):
def __init__(self, image_size=256, patch_size=16, dim=512):
super().__init__()
self.conv_embed = nn.Sequential(
nn.Conv2d(1, 64, 7, stride=2), # 下采样保留关键特征
nn.BatchNorm2d(64),
nn.GELU(),
nn.Conv2d(64, dim, kernel_size=patch_size, stride=patch_size)
)
# 二维位置编码
self.pos_embed = nn.Parameter(torch.randn(
1, (image_size//patch_size)**2, dim))
# 分层Transformer
self.encoder = nn.TransformerEncoder(
nn.TransformerEncoderLayer(dim, nhead=8),
num_layers=6)
def forward(self, x):
x = self.conv_embed(x) # [bs, dim, h, w]
x = x.flatten(2).permute(2,0,1) # [seq_len, bs, dim]
x = x + self.pos_embed
return self.encoder(x)
3.2 模型训练技巧
-
数据增强策略:
- 时域:随机时移(±5%)、添加高斯噪声(SNR>30dB)
- 频域:随机滤波(0.8-1.2倍中心频率)
- 图像域:随机裁剪(保留90%区域)、灰度抖动(±10%)
-
损失函数设计:
python复制class FocalLoss(nn.Module): def __init__(self, alpha=0.25, gamma=2): super().__init__() self.alpha = alpha self.gamma = gamma def forward(self, inputs, targets): BCE_loss = F.cross_entropy(inputs, targets, reduction='none') pt = torch.exp(-BCE_loss) loss = self.alpha * (1-pt)**self.gamma * BCE_loss return loss.mean()对于类别不平衡的数据集(如正常样本远多于故障样本),Focal Loss比标准交叉熵效果提升约2-3%。
4. 工业部署实践
4.1 实时处理流水线设计
在实际产线部署时,我们采用如下处理流程:
code复制振动信号 → 硬件滤波 → 分段缓存 → 并行转换(GADF/DWT/STFT) →
模型推理 → 决策融合 → 报警触发
关键优化点:
- 使用双缓冲机制:当前段处理时,下一段信号已在采集
- 多方法投票:三种图像化方法的预测结果进行加权投票
- 注意力可视化:将最后一层attention权重叠加回时频图,辅助定位故障源
4.2 典型问题解决方案
问题1:强背景噪声下准确率下降
- 解决方案:添加自适应LMS滤波器
python复制def lms_filter(reference, primary, mu=0.01): wn = np.zeros(len(reference)) for n in range(1, len(primary)): xn = reference[n] yn = np.dot(wn[:n], primary[:n][::-1]) en = primary[n] - yn wn[:n] = wn[:n] + mu * en * primary[:n][::-1] return en
问题2:变转速工况适应差
- 解决方案:采用阶比分析代替固定采样率
python复制def compute_order_analysis(signal, tacho, fs): instantaneous_speed = np.gradient(tacho) angle = 2 * np.pi * np.cumsum(instantaneous_speed) / fs resampled = np.interp(np.linspace(0, angle[-1], len(angle)), angle, signal) return resampled
5. 效果验证与对比
在CWRU数据集上的测试结果:
| 方法 | 准确率 | 早期故障检出率 | 推理时延(ms) |
|---|---|---|---|
| 传统SVM | 82.3% | 65.1% | 2.1 |
| 1D-CNN | 89.7% | 72.4% | 3.8 |
| GADF+ViT(本方案) | 93.5% | 85.2% | 8.2 |
| 多模态融合(投票) | 95.1% | 88.7% | 12.6 |
现场测试发现,对于转速在300-1800rpm范围内的电机轴承,系统平均故障预警时间比传统振动阈值法提前37小时。注意力可视化功能帮助工程师快速定位故障位置,平均排查时间缩短60%。
6. 工程经验总结
-
信号采集要点:
- 采样率至少为轴承特征频率的10倍
- 安装加速度计时避免共振(推荐用磁性座+绝缘垫片)
- 多测点布置:驱动端、非驱动端、径向/轴向组合
-
模型优化方向:
- 知识蒸馏:用大模型指导轻量级模型训练
- 联邦学习:跨工厂数据协作而不共享原始数据
- 在线学习:持续适应设备老化带来的分布偏移
-
常见陷阱:
- 实验室数据过拟合:需添加实际工况噪声增强
- 类别不平衡:采用过采样+欠采样组合策略
- 模型漂移:每月用新数据做增量训练
这套方案目前已在3家大型制造企业落地,平均减少非计划停机时间45%。核心价值在于将深奥的故障诊断技术转化为可视化的"设备体检报告",让现场工程师也能快速理解诊断结果。