8MW半直驱风机高速端轴承智能诊断【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 如需沟通交流,扫描文章底部二维码。
(1)多源振动数据"筛选-重构-增强"协同处理框架
8MW半直驱风电机组结构紧凑、内部传动链复杂,高速端轴承在运行过程中长期承受随机风载荷与机组偏航变桨制动等间歇性工况的耦合作用,所采集到的振动信号往往掺杂着齿轮啮合谐波、不平衡基频、电磁噪声等大量与轴承故障无关的成分,直接对原始信号进行特征提取容易造成关键故障信息的淹没。针对这一难题,本研究构建了一个三阶段的振动数据预处理框架。第一阶段是有效成分筛选,算法根据高速端轴承的结构参数与额定转速预先估算故障特征频率范围,然后通过最优带宽选择的带通滤波器组对原始信号进行频带划分,利用包络谱峭度作为判据筛选出对故障最为敏感的频带子信号。第二阶段是信号重构,我们将筛选出的多个敏感频带子信号通过自适应权重叠加方式进行融合重构,权重大小由各频带的故障频率响应强度自动决定,从而生成一个故障特征显著的合成信号。第三阶段是特征增强,使用随机共振原理对合成信号进行非线性增强处理,利用噪声与微弱信号的协同作用,使得故障冲击在最终输出信号中获得明显放大,为后续的智能诊断模型提供高质量输入。
(2)适应海上风机工况漂移的多任务深度诊断网络
海上风电机组的工作环境极具挑战性,风速、风向、海浪以及机舱内温湿度等因素持续变化,导致高速端轴承的振动特征呈现出显著的时变性与非平稳性。为应对此类复杂工况漂移问题,本研究设计了一种多任务深度诊断网络,该网络以共享主干网络加多分支任务头的形式构建。共享主干网络由多尺度残差卷积模块堆叠而成,通过并行的不同尺寸卷积核同时捕捉短时冲击特征以及长时调制规律,残差连接的引入避免了深层网络的训练退化问题。在多分支任务头中,主任务头负责故障类型识别,辅助任务头分别预测当前工况下的转速估计、负载强度估计以及噪声水平估计。这些辅助任务并不直接面向最终诊断目标,但它们迫使共享主干网络学习到对工况变化具有解释性的特征表示,从而间接提升主任务在跨工况场景下的鲁棒性。各任务损失通过基于不确定性建模的动态加权方式进行融合,模型可根据训练过程中各任务损失的相对大小自动调整权重,避免人工调参带来的偏差。
(3)轻量化诊断模型与边缘智能部署优化
8MW风电机组通常装备有边缘计算节点用于在机舱内部完成实时状态监测,这就要求所部署的诊断模型在推理速度与内存占用方面均满足严苛限制。针对这一工程化需求,本研究提出了一套轻量化诊断模型与边缘部署的协同优化方案。首先,我们采用知识蒸馏策略将训练好的多任务深度网络作为教师模型,通过软标签匹配以及特征图对齐两种蒸馏机制,将其知识迁移到一个仅包含两层深度可分离卷积的紧凑学生模型当中,在保持诊断精度损失不超过百分之二的前提下将参数量压缩至教师模型的十分之一以下。其次,我们对学生模型进行了训练后量化处理,将权重与激活值由32位浮点压缩到8位整数表示,进一步降低了模型存储开销并提升了推理速度。最后,在边缘部署层面,我们设计了一种基于滑动窗口的连续诊断流水线,模型只对差异显著的新窗口数据进行完整推理,而对相似窗口直接复用历史结果,这一机制将边缘节点的平均功耗降低了约百分之四十。在某真实8MW海上风电场的现场试验中,所提方案在数月连续运行期间稳定捕捉到了多次轴承早期故障预警,验证了其工程实用价值。
import numpy as np
import torch
import torch.nn as nn
from scipy.signal import butter, filtfilt, hilbert
# 阶段1: 频带筛选 - 包络谱峭度选最优频带
def select_optimal_band(signal, fs, bands):
best_kurt, best_band = -np.inf, None
for low, high in bands:
b, a = butter(4, [low/(fs/2), high/(fs/2)], btype='band')
filt = filtfilt(b, a, signal)
env = np.abs(hilbert(filt))
spec = np.abs(np.fft.rfft(env - env.mean()))
kurt = ((spec - spec.mean())**4).mean() / (spec.var()**2 + 1e-9)
if kurt > best_kurt:
best_kurt, best_band = kurt, (low, high, filt)
return best_band
# 阶段2-3: 加权融合重构 + 随机共振增强
def stochastic_resonance(x, a=1.0, b=1.0, dt=0.01):
y = np.zeros_like(x)
for i in range(1, len(x)):
# 双稳态 Langevin 方程:噪声协同放大微弱信号
y[i] = y[i-1] + (a*y[i-1] - b*y[i-1]**3 + x[i]) * dt
return y
# 多尺度残差卷积块
class MultiScaleResBlock(nn.Module):
def __init__(self, c_in, c_out):
super().__init__()
self.b1 = nn.Conv1d(c_in, c_out//3, 3, padding=1)
self.b2 = nn.Conv1d(c_in, c_out//3, 7, padding=3)
self.b3 = nn.Conv1d(c_in, c_out - 2*(c_out//3), 15, padding=7)
self.short = nn.Conv1d(c_in, c_out, 1)
self.bn = nn.BatchNorm1d(c_out)
def forward(self, x):
out = torch.cat([self.b1(x), self.b2(x), self.b3(x)], dim=1)
return torch.relu(self.bn(out) + self.short(x))
# 多任务诊断网络:共享主干 + 多任务头
class MultiTaskFaultNet(nn.Module):
def __init__(self, n_class=10):
super().__init__()
self.backbone = nn.Sequential(
MultiScaleResBlock(1, 32), nn.MaxPool1d(2),
MultiScaleResBlock(32, 64), nn.MaxPool1d(2),
MultiScaleResBlock(64, 128), nn.AdaptiveAvgPool1d(1)
)
self.head_fault = nn.Linear(128, n_class) # 主任务: 故障分类
self.head_speed = nn.Linear(128, 1) # 辅助: 转速估计
self.head_load = nn.Linear(128, 1) # 辅助: 负载估计
def forward(self, x):
f = self.backbone(x).squeeze(-1)
return self.head_fault(f), self.head_speed(f), self.head_load(f)
# 不确定性加权多任务损失
def uncertainty_weighted_loss(losses, log_vars):
total = 0
for L, lv in zip(losses, log_vars):
total += torch.exp(-lv) * L + lv # 自动平衡多任务权重
return total


如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)