一、技术原理与数学公式
1.1 时域特征分析
核心公式:
均方根值(RMS)
:
x
rms
=
1
N
∑
i
=
1
N
x
i
2
峭度系数
:
K
=
1
N
∑
i
=
1
N
(
x
i
−
x
ˉ
)
4
σ
4
波形因子
:
SF
=
x
rms
1
N
∑
i
=
1
N
∣
x
i
∣
\begin{aligned} &\text{均方根值(RMS)}: & x_{\text{rms}} &= \sqrt{\frac{1}{N}\sum_{i=1}^{N}x_i^2} \\ &\text{峭度系数}: & K &= \frac{\frac{1}{N}\sum_{i=1}^{N}(x_i-\bar{x})^4}{\sigma^4} \\ &\text{波形因子}: & \text{SF} &= \frac{x_{\text{rms}}}{\frac{1}{N}\sum_{i=1}^{N}|x_i|} \end{aligned}
均方根值(RMS):峭度系数:波形因子:xrmsKSF=N1i=1∑Nxi2=σ4N1∑i=1N(xi−xˉ)4=N1∑i=1N∣xi∣xrms
案例:某数控机床主轴轴承故障检测中,峭度系数从正常状态的3.2突增至7.8,准确预警了滚道剥落故障。
1.2 频域特征分析
傅里叶变换公式:
X
(
f
)
=
∫
−
∞
∞
x
(
t
)
e
−
j
2
π
f
t
d
t
X(f) = \int_{-\infty}^{\infty}x(t)e^{-j2\pi ft}dt
X(f)=∫−∞∞x(t)e−j2πftdt
特征频率带能量比:
E
ratio
=
∑
f
=
f
l
f
h
∣
X
(
f
)
∣
2
∑
f
=
0
f
s
/
2
∣
X
(
f
)
∣
2
E_{\text{ratio}} = \frac{\sum_{f=f_l}^{f_h}|X(f)|^2}{\sum_{f=0}^{f_s/2}|X(f)|^2}
Eratio=∑f=0fs/2∣X(f)∣2∑f=flfh∣X(f)∣2
案例:风力发电机齿轮箱故障诊断中,啮合频率带(500-800Hz)能量占比提升12%预示齿面磨损。
1.3 时频联合分析
短时傅里叶变换(STFT):
STFT
(
t
,
f
)
=
∫
−
∞
∞
x
(
τ
)
w
(
τ
−
t
)
e
−
j
2
π
f
τ
d
τ
\text{STFT}(t,f) = \int_{-\infty}^{\infty}x(\tau)w(\tau-t)e^{-j2\pi f\tau}d\tau
STFT(t,f)=∫−∞∞x(τ)w(τ−t)e−j2πfτdτ
案例:某注塑机螺杆异常检测中,通过STFT时频图发现3.5kHz分量持续时间从0.1s延长到0.8s,成功识别材料降解故障。
二、PyTorch实现方法
2.1 数据预处理
class VibrationDataset(Dataset):
def __init__(self, signals, labels):
self.signals = torch.tensor(signals, dtype=torch.float32)
self.labels = torch.tensor(labels, dtype=torch.long)
def __getitem__(self, idx):
# 时频特征联合提取
signal = self.signals[idx]
stft = torch.stft(signal, n_fft=256, return_complex=True)
mag = torch.abs(stft) # 幅度谱
return mag.unsqueeze(0), self.labels[idx] # 添加通道维度
2.2 深度残差网络
class ResBlock(nn.Module):
def __init__(self, in_ch):
super().__init__()
self.conv = nn.Sequential(
nn.Conv2d(in_ch, in_ch, 3, padding=1),
nn.BatchNorm2d(in_ch),
nn.ReLU(),
nn.Conv2d(in_ch, in_ch, 3, padding=1),
nn.BatchNorm2d(in_ch)
)
def forward(self, x):
return F.relu(x + self.conv(x))
class FaultDetector(nn.Module):
def __init__(self):
super().__init__()
self.features = nn.Sequential(
nn.Conv2d(1, 64, 7, stride=2),
ResBlock(64),
nn.MaxPool2d(3),
ResBlock(64),
nn.AdaptiveAvgPool2d(1)
)
self.classifier = nn.Linear(64, 5) # 5类故障
def forward(self, x):
x = self.features(x)
return self.classifier(x.flatten(1))
三、工业应用案例
3.1 风电行业解决方案
背景:某2MW风力发电机齿轮箱批量故障预警
方案:
- 采样频率:12.8kHz
- 部署边缘计算节点进行实时FFT分析
- 云端训练1D-CNN故障分类模型
效果指标:
指标 | 提升前 | 提升后 |
---|---|---|
故障检测准确率 | 82% | 96% |
误报率 | 15% | 3.2% |
平均预警时间 | 48h | 216h |
3.2 数控机床案例
某汽车零部件厂使用LSTM网络分析主轴振动信号,实现刀具磨损状态预测:
class ToolWearLSTM(nn.Module):
def __init__(self):
super().__init__()
self.lstm = nn.LSTM(input_size=8, # 8个时域特征
hidden_size=64,
num_layers=2,
bidirectional=True)
self.reg = nn.Linear(128, 1) # 预测剩余寿命
def forward(self, x):
out, _ = self.lstm(x) # (seq_len, batch, features)
return self.reg(out[-1])
四、工程优化技巧
4.1 超参数调优
贝叶斯优化示例(使用Optuna):
def objective(trial):
params = {
'lr': trial.suggest_float('lr', 1e-5, 1e-3, log=True),
'batch_size': trial.suggest_categorical('batch_size', [32, 64, 128]),
'dropout': trial.suggest_float('dropout', 0.1, 0.5)
}
model = build_model(params)
return train_model(model)
4.2 数据增强策略
def augment_signal(signal):
if random.random() > 0.5:
signal += np.random.normal(0, 0.005, len(signal)) # 添加噪声
if random.random() > 0.5:
signal = np.roll(signal, random.randint(-50,50)) # 时移
return signal
五、前沿技术进展
5.1 最新论文成果
- ICASSP 2023最佳论文:《VibFormer: 基于Transformer的振动信号表征学习》
创新点:
- 提出多尺度时频注意力机制
- 采用对比学习预训练策略
- 在MAE指标上提升17.6%
5.2 开源项目推荐
-
VibraNet(GitHub 3.2k⭐)
- 提供端到端的振动信号处理Pipeline
- 包含20+预训练模型
- 支持边缘设备部署
-
Industrial Keras(GitHub 1.8k⭐)
- 专门针对工业振动分析的Keras扩展库
- 内置时频分析工具包
- 包含PHM08等基准数据集预处理工具
最佳实践建议:
- 采样率选择应满足Nyquist定理(≥2倍最高关注频率)
- 时频分析窗口长度需权衡频率分辨率和时间分辨率
- 部署时考虑量化技术(如TensorRT),模型大小可压缩至原始30%
- 建立故障模式库,持续更新样本数据