RECORD1:CMAPSS 数据集处理和可视化(附代码)

C-MAPSS数据集探索性分析 实验数据为商用模块化航空推进系统仿真C-MAPSS数据集,该数据集为NASA格林中心为2008年第一届预测与健康管理国际会议(PHM08)竞赛提供的引擎性能退化模拟数据集,数据集整体信息如下所示. 阅读详情
AI摘要

本文围绕CMAPSS数据集展开,介绍其来源、结构、特点和应用场景。阐述航空发动机RUL预测思路,包括数据预处理、特征工程、预测模型架构和高级建模策略。给出代码实现和结果可视化,设计的系统能实现健康状态分类、故障特征识别等,可用于航空发动机预测性维护。

一、CMAPSS数据集简介

CMAPSS(Commercial Modular Aero-Propulsion System Simulation)是NASA为航空发动机健康监测和预测性维护研究开发的一个重要数据集。这个数据集已成为故障预测和剩余使用寿命(RUL)估计领域的标准基准。

(一)数据集来源与背景

CMAPSS数据集由NASA的进步航空技术项目(Progressive Aeronautics Technology Project)创建,用于模拟大型商业涡扇发动机在各种运行条件和退化场景下的性能。这些数据通过NASA开发的高保真度发动机模拟器生成,模拟器能够准确反映真实航空发动机的物理特性和退化过程。

(二)数据集结构

CMAPSS数据集通常包含四个子数据集(FD001-FD004),每个子数据集包含训练和测试数据:

  1. 训练数据:包含多台发动机从正常运行到故障的完整退化过程数据
  2. 测试数据:包含发动机运行到某个时间点(故障前)的数据
  3. 真实RUL值:测试集中每台发动机的真实剩余使用寿命

每个数据点包含以下信息:

  • 发动机ID
  • 运行周期(cycle)
  • 运行设置参数(如高度、马赫数、节流阀设置等)
  • 传感器测量值(如温度、压力、转速等21个传感器读数)

(三)数据集特点

  1. 多种运行条件:数据集模拟了不同飞行条件(高度、马赫数等)下的发动机性能
  2. 多种故障模式:不同子数据集模拟了不同类型的故障(如高压压缩机退化、风扇退化等)
  3. 进行性退化:数据记录了发动机从健康状态到故障的渐进退化过程
  4. 噪声与不确定性:包含现实世界中常见的传感器噪声和测量不确定性
  5. 不同复杂度:四个子数据集具有不同的复杂度,其中FD001最简单(单一运行条件和故障模式),FD004最复杂(多运行条件和多故障模式)

(四)主要应用场景

CMAPSS数据集广泛应用于以下研究领域:

  1. 剩余使用寿命预测:预测设备还能安全运行多长时间
  2. 故障预测与健康监测:开发算法检测潜在故障并监控系统健康状态
  3. 状态感知维护:基于设备实际状态进行维护决策,而非固定时间表
  4. 特征提取与选择:研究如何从多源传感器数据中提取有用信息
  5. 机器学习算法验证:作为测试各种预测算法性能的基准数据集

研究人员通常使用均方根误差(RMSE)、平均绝对误差(MAE)以及评分函数(Scoring Function)来评估其预测算法在CMAPSS数据集上的性能。

二、航空发动机RUL预测思路

(一)RUL预测问题定义

剩余使用寿命(RUL)预测是预测性维护的核心,旨在估计设备从当前时刻到故障发生的剩余运行时间。对于CMAPSS数据集,RUL预测可以表述为:给定一台发动机的历史运行数据,预测该发动机距离故障还有多少个运行周期。

(二)数据预处理关键步骤

2.1 数据清洗与标准化

  • 异常值处理:识别并处理极端值和异常读数
  • 数据标准化:通常采用Z-score或Min-Max标准化,使不同量纲的传感器数据可比
  • 传感器选择:剔除常量或低信息量传感器(如FD001中的传感器1, 5, 6, 10, 16, 18, 19通常被过滤)

2.2 RUL标签生成

  • 训练集标签:从最后一个周期(故障点)逆向计算每个时间点的RUL值
  • 真实退化模式考虑:设备退化通常不是线性的,引入"分段线性"标签,设定最大RUL值(如125或150),体现设备在早期运行阶段性能相对稳定

(三)特征工程方法

3.1 统计特征提取

  • 时间窗口特征:计算滑动窗口内的统计量(均值、方差、偏度、峰度等)
  • 趋势特征:线性回归斜率、指数平滑等表征传感器读数变化趋势
  • 频域特征:通过FFT(快速傅里叶变换)提取频域特征

3.2 降维与特征选择

  • 主成分分析(PCA):减少数据维度和噪声
  • 相关性分析:筛选与退化过程高相关的传感器
  • 包装式/过滤式特征选择:基于预测性能或统计指标选择最佳特征子集

(四)预测模型架构

4.1 传统机器学习方法

  • 回归模型:
    • 支持向量回归(SVR):处理非线性关系,但在大数据集上计算成本高
    • 随机森林/梯度提升树(XGBoost, LightGBM):表现稳健,可处理特征间复杂交互
  • 相似度模型:
    • 基于实例的相似性匹配,如利用动态时间规整(DTW)评估时间序列相似性
    • K最近邻(KNN)回归,寻找历史中最相似的运行情况

4.2 深度学习方法

  • 循环神经网络(RNN)架构:
    • LSTM(长短期记忆网络):捕捉长期依赖关系
    • GRU(门控循环单元):LSTM的简化版,计算效率更高
  • 卷积神经网络(CNN):
    • 1D-CNN:提取时间序列局部特征
    • CNN+LSTM混合模型:CNN提取空间特征,LSTM捕捉时序依赖
  • 注意力机制:
    • Transformer架构:通过自注意力机制学习序列内部关系
    • 注意力增强的RNN:识别预测中的重要时间步和传感器
  • 生成模型:
    • 变分自编码器(VAE):学习潜在空间表示
    • 生成对抗网络(GAN):可用于数据增强和不确定性量化

(五)高级建模策略

5.1 多任务学习

  • 同时预测多个相关指标(RUL、健康指数、故障类型等)
  • 利用任务间关系提升主任务性能

5.2 迁移学习

  • 从FD001等简单场景学习的模型迁移到FD004等复杂场景
  • 跨设备/跨条件知识迁移,减少所需训练数据

5.3 集成方法

  • 不同模型预测结果的加权融合(如LSTM+XGBoost)
  • 多种时间尺度预测的集成(短期、中期、长期预测器)

5.4 不确定性量化

  • 蒙特卡洛dropout:量化预测不确定性
  • 贝叶斯神经网络:输出概率分布而非点估计
  • 分位数回归:生成预测区间而非单点预测

(六)评估指标与模型选择

6.1 常用评估指标

  • RMSE(均方根误差):评估预测精度
  • NASA评分函数:对过早预测(安全风险)和过晚预测(经济损失)分别惩罚
  • 平均相对误差(MAE/MAPE):测量整体误差水平

6.2 实际部署考虑

  • 模型解释性:基于梯度或SHAP值分析传感器贡献度
  • 计算效率:满足实时监测需要的推理速度
  • 鲁棒性:对新数据和噪声的稳定性

三、代码实现和结果可视化

下面代码实现了一个完整的航空发动机健康监测和故障诊断系统,基于NASA的CMAPSS数据集(特别是FD002子数据集)。主要使用自编码器进行特征学习,并结合t-SNE可视化、重构误差分析和特征重要性评估,实现对发动机剩余使用寿命(RUL)的预测和健康状态分类。


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.font_manager as fm
!wget -O TaipeiSansTCBeta-Regular.ttf https://drive.google.com/uc?id=1eGAsTN1HBpJAkeVM57_C7ccp7hbgSz3_&export=download
fm.fontManager.addfont('TaipeiSansTCBeta-Regular.ttf')
mpl.rc('font', family='Taipei Sans TC Beta')

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.manifold import TSNE
from sklearn.metrics import confusion_matrix, classification_report
import tensorflow as tf
from tensorflow.keras.layers import Input, Dense, Dropout
from tensorflow.keras.models import Model, Sequential
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras import regularizers
import warnings
warnings.filterwarnings('ignore')


# 设置随机种子以确保可复现性
np.random.seed(42)
tf.random.set_seed(42)

# 1. 数据加载和预处理
def load_data(train_file, test_file, rul_file=None):
    """

    参数:
    train_file: 训练数据文件路径
    test_file: 测试数据文件路径
    rul_file: 剩余使用寿命文件路径

    返回:
    训练数据, 测试数据, RUL数据
    """
    # 列名定义
    columns = ['unit', 'cycle', 'op1', 'op2', 'op3'] + \
              [f'sensor{i}' for i in range(1, 22)]

    # 加载数据
    train_df = pd.read_csv(train_file, sep=' ', header=None, names=columns)
    test_df = pd.read_csv(test_file, sep=' ', header=None, names=columns)

    # 删除包含NaN的列(在CMAPSS数据中,最后几列通常为空)
    train_df = train_df.dropna(axis=1)
    test_df = test_df.dropna(axis=1)

    # 打印可用列以进行调试
    print("删除NaN后的可用列:", train_df.columns.tolist())

    if rul_file:
        rul_df = pd.read_csv(rul_file, sep=' ', header=None)
        rul_df = rul_df.dropna(axis=1)
        rul_df.columns = ['RUL']
        return train_df, test_df, rul_df

    return train_df, test_df

def preprocess_data(df, is_training=True):
    """
    预处理数据,包括RUL计算、特征选择、标准化等

    参数:
    df: 输入数据框
    is_training: 是否为训练数据

    返回:
    预处理后的数据框
    """
    # 为每个发动机单元计算RUL
    if is_training:
        # 对于训练数据,我们知道每个单元的最后一个周期代表故障状态
        max_cycles = df.groupby('unit')['cycle'].max().reset_index()
        max_cycles.columns = ['unit', 'max_cycle']
        df = df.merge(max_cycles, on='unit', how='left')
        df['RUL'] = df['max_cycle'] - df['cycle']
        df = df.drop('max_cycle', axis=1)


    # 获取数据框中存在的实际传感器列
    available_sensors = [col for col in df.columns if col.startswith('sensor')]

    # 根据可用传感器定义相关传感器
    # 这是针对KeyError的修复
    relevant_sensors = [s for s in ['sensor2', 'sensor3', 'sensor4', 'sensor7', 'sensor8',
                      'sensor9', 'sensor11', 'sensor12', 'sensor13', 'sensor14',
                      'sensor15', 'sensor17', 'sensor20', 'sensor21'] if s in available_sensors]

    print("使用这些相关传感器:", relevant_sensors)


    relevant_features = ['op1', 'op2', 'op3'] + relevant_sensors

    # 标准化操作条件和传感器读数
    scaler = StandardScaler()
    df[relevant_features] = scaler.fit_transform(df[relevant_features])

    return df, relevant_features

def create_sequences(df, sequence_length, step=1):
    """
    创建用于训练自编码器的时间序列数据

    参数:
    df: 输入数据框
    sequence_length: 序列长度
    step: 滑动窗口步长

    返回:
    X: 序列数据
    y: 对应的RUL值
    """
    X = []
    y = []
    units = df['unit'].unique()

    for unit in units:
        unit_data = df[df['unit'] == unit]
        for i in range(0, len(unit_data) - sequence_length + 1, step):
            X.append(unit_data.iloc[i:i+sequence_length].drop(['unit', 'cycle', 'RUL'], axis=1).values)
            # 使用序列中最后一个时间点的RUL作为标签
            y.append(unit_data.iloc[i+sequence_length-1]['RUL'])

    return np.array(X), np.array(y)

def categorize_rul(rul_values, thresholds=[50, 125]):
    """
    将RUL值分类为不同的健康状态类别

    参数:
    rul_values: RUL值数组
    thresholds: 分类阈值

    返回:
    分类标签
    """
    categories = np.zeros_like(rul_values, dtype=int)

    # 0: 临界故障状态, 1: 警告状态, 2: 健康状态
    categories[rul_values <= thresholds[0]] = 0  # 临界
    categories[(rul_values > thresholds[0]) & (rul_values <= thresholds[1])] = 1  # 警告
    categories[rul_values > thresholds[1]] = 2  # 健康

    return categories

# 2. 自编码器模型构建
def build_autoencoder(input_shape, encoding_dim=10, regularization=0.001):
    """
    构建自编码器模型

    参数:
    input_shape: 输入数据形状
    encoding_dim: 编码维度
    regularization: L2正则化参数

    返回:
    autoencoder: 完整的自编码器模型
    encoder: 编码器部分
    """
    # 计算输入中的总特征数
    total_features = np.prod(input_shape)

    # 编码器
    input_layer = Input(shape=input_shape)
    # 首先将3D输入展平为1D
    flatten = tf.keras.layers.Flatten()(input_layer)

    # 使用多层感知器作为编码器
    encoded = Dense(128, activation='relu', kernel_regularizer=regularizers.l2(regularization))(flatten)
    encoded = Dropout(0.2)(encoded)
    encoded = Dense(64, activation='relu', kernel_regularizer=regularizers.l2(regularization))(encoded)
    encoded = Dropout(0.2)(encoded)
    encoded = Dense(encoding_dim, activation='relu', name='encoder_output')(encoded)

    # 解码器
    decoded = Dense(64, activation='relu', kernel_regularizer=regularizers.l2(regularization))(encoded)
    decoded = Dropout(0.2)(decoded)
    decoded = Dense(128, activation='relu', kernel_regularizer=regularizers.l2(regularization))(decoded)
    decoded = Dropout(0.2)(decoded)
    decoded = Dense(total_features, activation='linear')(decoded)

    # 将输出重塑为原始输入形状
    output_layer = tf.keras.layers.Reshape(input_shape)(decoded)

    # 构建模型
    autoencoder = Model(inputs=input_layer, outputs=output_layer)
    encoder = Model(inputs=input_layer, outputs=encoded)

    # 编译模型
    autoencoder.compile(optimizer='adam', loss='mse')

    return autoencoder, encoder

def calculate_reconstruction_error(model, data):
    """
    计算重构误差

    参数:
    model: 自编码器模型
    data: 输入数据

    返回:
    重构误差
    """
    reconstructions = model.predict(data)
    # 计算均方误差
    mse = np.mean(np.square(data - reconstructions), axis=(1, 2))
    return mse

# 3. t-SNE可视化
def visualize_tsne(features, labels, title='t-SNE特征可视化'):
    """
    使用t-SNE可视化编码后的特征

    参数:
    features: 编码后的特征
    labels: 对应的类别标签
    title: 图表标题
    """
    # 应用t-SNE进行降维
    tsne = TSNE(n_components=2, random_state=42)
    tsne_results = tsne.fit_transform(features)

    # 创建可视化
    plt.figure(figsize=(12, 10))
    scatter = plt.scatter(tsne_results[:, 0], tsne_results[:, 1], c=labels,
                          cmap='viridis', alpha=0.8, s=50)

    # 添加图例
    legend_labels = ['临界状态 (RUL≤50)', '警告状态 (50<RUL≤125)', '健康状态 (RUL>125)']
    handles = [plt.Line2D([0], [0], marker='o', color='w',
                          markerfacecolor=plt.cm.viridis(i/2), markersize=10)
               for i in range(3)]
    plt.legend(handles, legend_labels, loc='best', fontsize=12)

    plt.title(title, fontsize=16)
    plt.xlabel('t-SNE特征1', fontsize=14)
    plt.ylabel('t-SNE特征2', fontsize=14)
    plt.grid(True, linestyle='--', alpha=0.7)
    plt.colorbar(scatter, label='健康状态类别')
    plt.tight_layout()
    plt.show()

# 4. 故障诊断和分析
def analyze_feature_importance(model, feature_names):
    """
    通过自编码器权重分析特征重要性

    参数:
    model: 训练好的编码器模型
    feature_names: 特征名称列表

    返回:
    特征重要性排名
    """
    # 获取编码器第一层的权重
    weights = model.layers[2].get_weights()[0]  # 假设第一个Dense层是第2层(索引从0开始)

    # 计算每个特征权重绝对值的总和作为重要性度量
    importance = np.sum(np.abs(weights), axis=1)

    # 重塑以匹配特征数量
    importance = importance.reshape(len(feature_names), -1).sum(axis=1)

    return importance_df

def plot_feature_importance(importance_df, top_n=10):
    """
    可视化特征重要性

    参数:
    importance_df: 特征重要性数据框
    top_n: 要显示的顶部特征数量
    """
    plt.figure(figsize=(12, 8))
    top_features = importance_df.head(top_n)

    sns.barplot(x='Importance', y='Feature', data=top_features)
    plt.title('前{}个最重要特征'.format(top_n), fontsize=16)
    plt.xlabel('相对重要性', fontsize=14)
    plt.ylabel('特征', fontsize=14)
    plt.grid(True, linestyle='--', axis='x', alpha=0.7)
    plt.tight_layout()
    plt.show()

def analyze_failure_patterns(train_df, relevant_features, category_labels):
    """
    分析不同故障类别的特征模式

    参数:
    train_df: 训练数据
    relevant_features: 相关特征列表
    category_labels: 故障类别标签
    """
    # 首先检查长度兼容性
    print(f"训练数据长度: {len(train_df)}, 类别标签长度: {len(category_labels)}")

    # 创建副本以避免修改原始数据框
    analysis_df = train_df.copy()

    # 只使用与类别标签长度匹配的数据子集
    if len(analysis_df) != len(category_labels):
        print("警告: 长度不匹配。仅使用与类别标签长度匹配的数据前部分。")
        analysis_df = analysis_df.head(len(category_labels))

    # 将类别标签添加到数据框
    analysis_df['Category'] = category_labels

    # 计算每个类别的平均特征值
    category_means = analysis_df.groupby('Category')[relevant_features].mean()

    # 绘制热图
    plt.figure(figsize=(14, 10))
    sns.heatmap(category_means, annot=True, cmap='coolwarm', fmt='.2f', linewidths=.5)
    plt.title('不同健康状态下的平均特征值', fontsize=16)
    plt.xticks(rotation=45, ha='right', fontsize=12)
    plt.yticks([0, 1, 2], ['临界状态', '警告状态', '健康状态'], fontsize=12)
    plt.tight_layout()
    plt.show()

    # 绘制每个类别的特征分布
    for feature in relevant_features[:5]:  # 仅显示前5个特征以避免过多图表
        plt.figure(figsize=(12, 8))
        for category in range(3):
            cat_data = analysis_df[analysis_df['Category'] == category][feature]
            sns.kdeplot(cat_data, label=f'类别 {category}')

        plt.title(f'特征分布: {feature}', fontsize=16)
        plt.xlabel('标准化值', fontsize=14)
        plt.ylabel('密度', fontsize=14)
        plt.legend(['临界状态', '警告状态', '健康状态'])
        plt.grid(True, linestyle='--', alpha=0.7)
        plt.tight_layout()
        plt.show()

# 5. 主函数
def main():

    # 加载数据
    train_df, test_df, rul_df = load_data(train_file, test_file, rul_file)

    # 预处理数据
    train_df, relevant_features = preprocess_data(train_df, is_training=True)
    test_df, _ = preprocess_data(test_df, is_training=False)

    # 保存原始train_df以供后续使用
    original_train_df = train_df.copy()

    # 创建序列数据
    sequence_length = 30 
    X_train, y_train = create_sequences(train_df, sequence_length)

    # 构建自编码器模型
    input_shape = X_train.shape[1:]  # 序列长度 x 特征数量
    autoencoder, encoder = build_autoencoder(input_shape, encoding_dim=16)

    # 模型训练
    early_stopping = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)
    history = autoencoder.fit(
        X_train, X_train,
        epochs=100,
        batch_size=64,
        validation_split=0.2,
        callbacks=[early_stopping],
        verbose=1
    )

    # 提取编码特征
    encoded_features = encoder.predict(X_train)

    # 根据RUL值对样本进行分类
    category_labels = categorize_rul(y_train)

    # t-SNE可视化
    visualize_tsne(encoded_features, category_labels, 't-SNE编码特征可视化')

    # 计算重构误差
    reconstruction_errors = calculate_reconstruction_error(autoencoder, X_train)

    # 可视化重构误差与RUL的关系
    plt.figure(figsize=(12, 8))
    plt.scatter(y_train, reconstruction_errors, c=category_labels, cmap='viridis', alpha=0.6)
    plt.title('重构误差与剩余使用寿命(RUL)的关系', fontsize=16)
    plt.xlabel('剩余使用寿命(RUL)', fontsize=14)
    plt.ylabel('重构误差', fontsize=14)
    plt.colorbar(label='健康状态类别')
    plt.grid(True, linestyle='--', alpha=0.7)
    plt.tight_layout()
    plt.show()

    # 分析特征重要性
    # 首先需要提取特征名称(删除unit、cycle、RUL列)
    feature_names = train_df.drop(['unit', 'cycle', 'RUL'], axis=1).columns
    importance_df = analyze_feature_importance(encoder, feature_names)
    plot_feature_importance(importance_df)

    print("\n正在准备故障模式分析数据...")
    original_rul = original_train_df['RUL'].values
    original_categories = categorize_rul(original_rul)


    min_length = min(len(original_categories), len(category_labels))
    print(f"使用 {min_length} 个样本进行故障模式分析")

    # 现在使用匹配的长度进行分析
    analyze_failure_patterns(original_train_df.head(min_length), relevant_features, category_labels[:min_length])

    # 输出结果摘要
    print("分析完成!根据自编码器和t-SNE可视化结果,我们可以得出以下结论:")
    print("1. 涡扇发动机故障模式特征:")
    print("   - 从t-SNE可视化中可以观察到不同健康状态的聚类")
    print("   - 重构误差与RUL之间存在明显相关性")
    print("\n2. 最重要的故障指示特征:")
    for i, (feature, importance) in enumerate(zip(importance_df['Feature'].head(5),
                                                 importance_df['Importance'].head(5))):
        print(f"   {i+1}. {feature}: {importance:.4f}")

    print("\n3. 建议的维护措施:")
    print("   - 当重构误差超过阈值时应进行预防性维护")
    print("   - 对于存在异常传感器读数的发动机,应优先检查与上述关键传感器对应的组件")
    print("   - 根据RUL预测建立维护计划,在达到临界故障状态之前进行检查")

if __name__ == "__main__":
    main()

四、小结

设计一个完整的航空发动机健康监测与故障诊断系统,通过自编码器进行特征学习,实现了:

  1. 健康状态分类:将发动机运行状态分为临界、警告和健康三类
  2. 故障特征识别:识别出对故障预测最重要的传感器指标
  3. 异常检测能力:通过重构误差检测异常运行状态
  4. 维护决策支持:为预防性维护提供数据驱动的决策依据

该系统可以应用于航空发动机的预测性维护,通过及时发现潜在故障模式,有效减少非计划停机时间,提高安全性并降低维护成本。该方法也可扩展到其他工业设备的健康监测与故障诊断领域。

RECORD2:CMAPSS 数据驱动的航空发动机RUL预测实战(附完整代码) 本文以NASA的CMAPSS数据集为核心,提供了一套完整的航空发动机剩余使用寿命(RUL)预测实战指南。内容涵盖数据加载与深度解析、特征工程、XGBoost与LSTM模型构建、模型融合策略,并重点介绍了工业界评估标准的NASA评分函数及结果可视化方法,旨在交付一个具备工业级潜力的端到端解决方案。 阅读详情

相关推荐

基于NASA C-MAPSS数据的介绍

C-MAPSS数据集介绍,分析工况的变化对于性能参数的影响。

houxuxu001的博客 1万+

C-MAPSS数据集详细介绍

第一列同样是样本序号,从1-100,也是100个样本,第二列是采集数据的时序,上述样本1含有从1到31次时序采集的状态数据,预测未来发生故障前剩余的时序次数,及剩余的url,真实的url标签存放在RUL_FD001中。当前基于机器学习的剩余寿命预测方法的研究异常火爆,其中C-MAPSS数据集在该领域的使用非常广泛,为了方便各位同仁的学习和理解,借此文章向大家简单介绍一下。第一列表示样本序号,样本序号从1-100即共100个样本,第二列表示采集数据的时序,直到发生故障:即样本1发生故障前的192个时序数据。

weixin_46275898的博客 6335

小白初识N-CMAPSS数据集

N-CMAPSS数据集介绍及读取

weixin_45386417的博客 4902

基于深度学习的航空发动机剩余寿命预测

近年来,随着微电子技术的进步与发展,传感器愈加智能化、微型化且价格低廉,相关产品在国防军工、机械装备、医疗电子以及环境治理等领域具有广泛的应用。传感器工作过程中能够产生大量的监测数据,工程师如何从数据中提取有用信息来辅助管理人员制定决策信息显得尤为关键。

联远智维官方账号 6258

Python环境下基于机器学习的NASA涡轮风扇发动机剩余使用寿命RUL预测

Python环境下基于机器学习的NASA涡轮风扇发动机剩余使用寿命RUL预测

weixin_39402231的博客 2785

更多 LSTM 变种——应用于 CMAPSS 数据集

本文并模型介绍,只是把一些比较火的技术,像双向注意力机制,自注意力机制这样的比较火的内容,简单的和LSTM堆叠,结果发现效果都不如最基础的,这里作者将本人代码及实现结果,进行展示,给各位想更改LSTM的朋友一些。

2301_77491330的博客 1765

CMAPSS的个人理解和CMAPSS、PHM08、09、12下载地址

CMAPSS的个人理解和CMAPSS、PHM08、09、12下载地址 –个人理解–仅做为学习中的记录 网络使用CMAPSS数据集,首先这周对数据集进行理解:CMAPSS数据集中有四个子集分别是FD001、FD002、FD003、FD004,数据是以文本形式给出,每个子数据集中的大概内容如下: 在实验过程中,往往认为FD004数据是最难进行RUL预测的,chanllege,因为里面有六种工作状...

qq_37117980的博客 2万+

C-MAPSS大型涡轮风扇发动机数据集

涡轮风扇发动机从正常运行至失效的全寿命采集的实验数据,对于研究涡轮风扇发动机的故障的预测及性能评估想必有用。-Turbofan engine failure from normal operation to the whole life of the experimental data collected for the study of turbofan engine failure prediction and performance evaluation must be useful.

CMPSS 涡扇发动机模型

CMPASS Model CMAPSS动力学模型是一种高灵敏度的计算机模型,用于模拟现实的大型商业涡轮风扇发动机。它包含一些可编辑的输入参数,允许用户自行选择关于运行曲线、闭环(具有发动机及其控制系统)控制器、环境条件等的具体数值。CMAPSS模拟的是90000磅推力级别的发动机模型,能够在(i)从海平面到40000英尺的高度,(ii)从0到0.90的马赫数,(iii)从-60到103°F的海平面温度下飞行。它包括了一个瞬态的航空热力学模型和一个发动机控制器,允许发动机在整个飞行条件范围内的各种推力水平上运

嗨 3747

CMAPSS 涡扇发动机数据集

CMAPSS 涡扇发动机数据集,亲测可用,用于寿命预测入门

设备剩余寿命预测学习,CMAPSS发动机数据集

设备剩余寿命预测学习,CMAPSS发动机数据集

CMAPSS数据集

C - MAPSS模拟了一个90,000 lb推力等级的发动机模型,该软件包包括一个大气模型,可以模拟( i )从海平面到40,000 ft的高度,( ii )马赫数从0到0.90,( iii )海平面温度从- 60到103 ° F。图1中的发动机示意图显示了发动机模型的主要元素和图2中的流程图.这些传感器数据包括了发动机的操作参数、振动和温度等信息供24个传感器信息,如表3所示,可以用于训练和测试故障诊断和剩余寿命预测模型。包含了四个不同类型的航空发动机的传感器数据,以及相应的故障模式和剩余寿命数据。

weixin_45970295的博客 1255

CMAPSSdataset.xlsx

C-MAPSS数据集是涡轮风扇发动机退化的模拟数据。这些数据是由美国宇航局使用商用模块化航空推进系统模拟(C-MAPSS)生成的。数据集包含21个传感器的多变量时间数据。有4个数据子集,FD00l、FD002、FD003和FD004,每个子集都有特定的运行条件和故障形式。每个数据子集都有一个训练集和一个测试集,训练集中记录的测量值是一直记录到发动机发生故障为止(run-tofailure实例)。而在测试集中,传感器记录值在故障前的某时刻终止,这样做的目的是为了预测该时刻的RUL。另外,还提供了测试数据集的真实剩余使用寿命(RUL)值。

【文献笔记】《使用深度卷积神经网络预估剩余有用寿命》

基本信息 《Remaining useful life estimation in prognostics using deep convolution neural networks》;期刊:Reliability Engineering and System Safety;IF: 4.788 Q1;作者:Xiang Li 摘要 本文提出了一种基于深度卷积神经网络(DCNN)的新的数据驱动预测方法。为了使DCNN能够更好地提取特征,采用时间窗口方法进行样品制备。标准化的原始数据直接用作该网络的输入,不需要

typefree的博客 7458

cmapss_RUL_复现 (2)

cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_RUL_复现 (2)cmapss_

CCF CSP历年题解(python)

菜鸡一枚,没参加过算法竞赛,单纯为了抵研究生考试复试才刷题,通过写博客记录下来,希望能和大家互相交流,代码质量不高,大家见谅。 因为考研等原因,题目不定期更新… 第一题 201312-1出现最多次数的数 ...

weixin_44690402的博客 5005

C-MAPSS涡扇发动机仿真数据(PHM2008)

本次介绍的数据为航空发动机的仿真数据,由美国NASA提供,曾作为PHM2008竞赛数据,一般用于设备的剩余寿命预测领域

ynn4818172的博客 6942

Qt实战:用QTreeView+QStandardItemModel实现多级多列文件浏览器(附完整代码)

本文深入探讨了使用Qt的QTreeView与QStandardItemModel构建多级多列文件浏览器的完整实践。通过分析模型/视图框架的优势,详细演示了从基础框架搭建、模拟数据填充,到对接真实文件系统实现懒加载的全过程。文章还涵盖了自定义委托、多列排序、右键菜单等高级定制技巧,并提供了性能优化建议和完整的代码示例,帮助开发者打造功能强大且高效的工业级文件管理界面。

weixin_29021291的博客 424

使用CNN实现C-MAPSS数据集里面的剩余寿命预测(Pytorch)

1.背景 在工程领域,了解不同的工程系统和组件非常重要,不仅要了解它们当前的性能,还要了解它们的性能如何随着时间的推移而降低。这扩展到了预测领域,它试图根据系统或组件的过去和现在的状态来预测其未来。这个领域中的一个常见问题是估计剩余使用寿命,或者系统或组件功能将持续多长时间。这个问题的著名数据集是PHM和C-MAPSS数据集。这些数据集包含不同涡扇发动机随时间产生的模拟传感器数据,并已用于研究剩余使用寿命的估计。 2.C-MAPSS数据集 数据集:FD001 训练轨迹:100 测试轨迹:100 条件:一个(

comli_cn的博客 3万+

STM32F407 FSMC并口读取AD7606

先贴一下最终效果图.这个是AD7606并口读取数据一个周期后的数据结果. 原始波形用示波器看是很平滑的. AD7606不知为何就会出现干扰, 我猜测可能是数字信号干扰导致的. 因为干扰的波形很有规律. 这种现象基本上可以排除是程序问题. 应该是干扰或者数字信号干扰,或者是数字和模拟共地导致的.是一个宏,实际上是指向的一个内存地址, 这个内存地址是FSMC指定的地址. 使用FSMC接口, 可免于控制引脚, 直接读取某个地址即可, FSMC会自动产生操作时序. 具体请见FSMC相关知识.

走错路的程序员 5499

Power Automate实战:用SharePoint REST API批量处理列表数据(附JSON解析技巧)

本文深入探讨了如何利用Power Automate调用SharePoint REST API实现列表数据的批量自动化处理。文章详细解析了API的协同工作原理、高效的数据获取与筛选技巧,并重点分享了JSON数据解析的核心难点与实战解决方案,旨在帮助企业用户构建稳定可靠的数据处理流程,提升运营效率。

coffee的博客 771
下一篇: grab-cut 算法(附代码可复现)
Codinggggg
博客等级 码龄5年 44粉丝 3原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值