当前位置: 首页 > news >正文

船舶柴油机活塞-缸套磨损故障诊断【附代码】

博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 如需沟通交流,扫描文章底部二维码。


(1)缸盖振动与瞬时转速多元特征融合:

活塞-缸套磨损会引起缸内燃烧压力变化,进而影响缸盖振动和曲轴瞬时转速。设计了一种基于双谱分析和时域同步平均的特征提取策略。首先采集缸盖振动信号(采样率50kHz)和飞轮齿圈瞬时转速信号(每转200个脉冲)。对振动信号进行双谱分析,提取双谱切片在f1=1~3kHz, f2=0.5~2kHz区域的积分幅值作为非线性耦合特征。对瞬时转速信号进行时域同步平均,消除随机噪声后提取每个气缸工作对应的转速波动峰值和谷值。将双谱特征与转速波动特征组合成10维向量。在某型船用中速柴油机(缸径210mm)磨损试验台上模拟了正常、轻微拉缸、严重拉缸三种状态,各采集200组数据。该特征组合在不同转速和负载下对严重拉缸的识别准确率为95.6%,单一振动特征为83.2%。

(2)图卷积网络表征气缸间相互作用:

柴油机多个气缸的磨损状态相互影响(如窜气导致相邻缸工作异常),将各气缸视为图节点,以气缸之间在曲轴转角上的工作顺序为邻接边构造有向图。提出了一种有向图注意力网络DGANet,节点特征为每个气缸对应的振动双谱积分、转速波动峰值等6个指标。图注意力层计算邻居节点对中心节点的贡献权重,并且区分不同方向(进气侧和排气侧邻居采用不同的参数矩阵)。经过三层图传播后,将所有节点特征聚合,再通过全连接分类。在四缸柴油机数据上,该方法对单个气缸磨损的定位准确率达到93.2%,比不考虑气缸间关系的模型高出12.5个百分点。

(3)基于生成对抗网络的磨损加速退化数据增强:

磨损试验周期长,获取全寿命数据成本高。构建了一个时序生成对抗网络Time-GAN,生成合成的磨损退化序列。生成器由门控循环单元和上采样层组成,输入随机噪声输出长度为500步的模拟磨损时序数据(特征包括振动均方根、转速波动等)。判别器采用卷积网络区分真实退化序列和生成序列。同时引入条件机制,将磨损速率标签(慢速、中速、快速)作为条件输入,使生成数据具有可控的退化趋势。训练使用少量真实全寿命数据(仅2个工况共8000个时间步),生成100条合成序列。使用增强后的数据集训练诊断模型,在测试集上准确率从88.1%提升到94.4%。,"import torch

import torch.nn as nn

import torch.nn.functional as F

import numpy as np

from scipy.signal import hilbert, welch

def bispectrum_analysis(x, fs=50000, nfft=512):

# 简化双谱计算:直接使用复数解调后的三阶累积量

analytic = hilbert(x)

window = np.hanning(nfft)

_, Pxx = welch(x, fs, nperseg=nfft, return_onesided=False)

# 提取1-3kHz区域积分

freq = np.fft.fftfreq(nfft, d=1/fs)

mask = (freq>=1000) & (freq<=3000)

bispectral_integral = np.sum(Pxx[mask]) # 真实双谱需三维积分,这里简化

return bispectral_integral

class DirectedGraphAttention(nn.Module):

def __init__(self, in_dim=6, out_dim=32):

super().__init__()

self.W_in = nn.Linear(in_dim, out_dim)

self.W_out = nn.Linear(in_dim, out_dim)

self.attn = nn.Linear(out_dim*2, 1, bias=False)

def forward(self, H, adj_in, adj_out):

# H: (B, N, D), adj: (N, N) 有向邻接矩阵

H = self.W_in(H)

N = H.shape[1]

neighbor_in = torch.matmul(adj_in, H) # 入边邻居聚合

neighbor_out = torch.matmul(adj_out, H) # 出边邻居聚合

combined = torch.cat([neighbor_in, neighbor_out], dim=-1)

attn_weights = torch.softmax(self.attn(combined), dim=1)

out = attn_weights * H + (1-attn_weights) * (neighbor_in + neighbor_out)/2

return out

class TimeGenerator(nn.Module):

def __init__(self, latent_dim=32, condition_dim=1, seq_len=500, feat_dim=6):

super().__init__()

self.gru = nn.GRU(latent_dim+condition_dim, 128, batch_first=True)

self.up = nn.Upsample(scale_factor=2, mode='linear') # 简化上采样

self.fc = nn.Linear(128, feat_dim)

def forward(self, z, c):

# z: (B, latent_dim), c: (B, condition_dim)

c = c.unsqueeze(1).repeat(1, 100, 1) # 扩展时间维度

z_exp = z.unsqueeze(1).repeat(1, 100, 1)

inp = torch.cat([z_exp, c], dim=-1)

out, _ = self.gru(inp) # (B, 100, 128)

out = out.permute(0,2,1)

out = self.up(out).permute(0,2,1) # (B, 200, 128)

out = self.fc(out) # (B, 200, feat_dim)

# 再重复一次到500长度

out = out.repeat(1, 500//200, 1)

return out[:, :500, :]

class TimeDiscriminator(nn.Module):

def __init__(self, feat_dim=6):

super().__init__()

self.conv1 = nn.Conv1d(feat_dim, 32, 15, stride=2, padding=7)

self.conv2 = nn.Conv1d(32, 64, 5, stride=2, padding=2)

self.conv3 = nn.Conv1d(64, 128, 3, stride=2, padding=1)

self.fc = nn.Linear(128, 1)

def forward(self, x):

# x: (B, feat, T)

x = F.leaky_relu(self.conv1(x))

x = F.leaky_relu(self.conv2(x))

x = F.leaky_relu(self.conv3(x))

x = x.mean(dim=-1)

return torch.sigmoid(self.fc(x))

def train_time_gan(generator, discriminator, real_seq, conditions, epochs=500):

opt_g = torch.optim.Adam(generator.parameters(), lr=1e-4)

opt_d = torch.optim.Adam(discriminator.parameters(), lr=1e-4)

for epoch in range(epochs):

z = torch.randn(len(real_seq), 32)

fake = generator(z, conditions)

d_real = discriminator(real_seq)

d_fake = discriminator(fake.detach())

loss_d = -torch.mean(torch.log(d_real+1e-8) + torch.log(1-d_fake+1e-8))

opt_d.zero_grad(); loss_d.backward(); opt_d.step()

d_fake = discriminator(fake)

loss_g = -torch.mean(torch.log(d_fake+1e-8))

opt_g.zero_grad(); loss_g.backward(); opt_g.step()


如有问题,可以直接沟通

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

http://www.jsqmd.com/news/729723/

相关文章:

  • 视觉语言模型在多模态AI中的技术突破与应用实践
  • 项目经理避坑指南:用WBS的‘可追溯性’和CoCode需求分析工具,从源头杜绝需求遗漏与变更失控
  • IOMM框架:图像自监督预训练在UMM视觉生成中的应用
  • 多模态AI安全:提示注入攻击检测技术解析
  • 对APP商家拼多多图片的要求+详情页要求
  • Arduino串口控制DFPlayer Mini播放指定歌曲的三种实用方法(含常见“不响”问题排查)
  • 别再让H5长列表卡成PPT!Vue3 + vue-virtual-scroller 保姆级避坑实战
  • Dify细粒度权限治理(企业生产环境已验证的7大避坑清单)
  • Intel NUC 13 Rugged无风扇工业迷你电脑解析与应用
  • Navicat Mac版无限试用重置指南:3种方法破解14天限制
  • 别再让TypeError打断你的思路!Python字符串拼接的3种‘优雅’写法(附f-string实战)
  • AI编程智能体框架:从任务编排到自动化开发的工程实践
  • 在QNX上玩转多路摄像头:手把手教你用AIS Client API构建一个实时视频流Demo
  • 2026年符合标准的Nitronic 50不锈钢厂商推荐 - 品牌2026
  • 保姆级教程:在Node.js中复现抖音直播WSS链接的signature生成(含Webpack逆向与VMP调用)
  • 回归语言模型在代码性能预测中的应用与优化
  • 别再自己画登录页了!手把手教你用uniCloud.getPhoneNumber()配置DCloud一键登录弹窗
  • 电容传感技术低能耗优化方案与实践
  • 别再为时间同步发愁了!我用这个‘笨办法’搞定激光雷达与USB相机联合标定(附Python脚本)
  • 开源电台接口DIY:从原理到实战,打造专属业余无线电数字模式连接方案
  • AC101音频芯片调试避坑指南:从寄存器配置到I2S时钟信号排查
  • Alloy 718高温合金厂商联系方式:高温合金厂商精选名单 - 品牌2026
  • 2026多功能吸塑机选型白皮书橡塑行业指南:全自动挤压成型机/全自动非标定制塑料成型机/医疗外壳厚片吸塑加工/单螺杆挤压成型机/选择指南 - 优质品牌商家
  • 自费上班时代,我是如何把AI工具成本砍掉60%的
  • 开源日记应用Lumi-Diary:自部署、隐私优先的现代化Web应用实践
  • 2026年符合国标的17-4Ph不锈钢厂商推荐名单 - 品牌2026
  • NanoPi NEO3 Plus开发板评测与优化指南
  • 2026年Y9:8-09离心风机/9-12离心风机/9-19离心风机/9-26离心风机/PP塑料风机/SDF隧道风机/选择指南 - 优质品牌商家
  • AMD锐龙平台Win11下,用VMware 17 Pro搞定macOS Monterey(保姆级避坑指南)
  • 算法训练营第21天|227. 基本计算器 II