CWRU轴承数据预处理实战:1000采样长度构建4分类任务的3个关键步骤
CWRU轴承数据预处理实战1000采样长度构建4分类任务的3个关键步骤工业设备故障诊断领域中滚动轴承的健康状态监测一直是工程师们关注的焦点。凯斯西储大学CWRU轴承数据集作为该领域的基准数据为研究者提供了丰富的振动信号样本。本文将深入探讨如何通过三个关键步骤将原始振动信号转化为适合深度学习模型处理的标准化输入。1. 数据加载与初步探索任何数据分析项目的第一步都是理解数据本身。CWRU数据集采用Matlab格式存储包含驱动端DE、风扇端FE和基础BA三个位置的加速度计数据。让我们先看看如何正确加载这些数据import scipy.io as sio import numpy as np def load_matfile(filepath): 加载CWRU的.mat格式数据文件 mat_data sio.loadmat(filepath) de_data mat_data[DE].flatten() # 驱动端振动信号 fe_data mat_data[FE].flatten() # 风扇端振动信号 time_series mat_data[time].flatten() # 时间序列 rpm mat_data[RPM][0][0] # 转速信息 return de_data, fe_data, time_series, rpm数据加载后我们需要进行初步的可视化分析。振动信号通常表现出周期性特征通过观察波形可以初步判断轴承状态import matplotlib.pyplot as plt def plot_vibration_signal(signal, title): plt.figure(figsize(12, 4)) plt.plot(signal[:2000]) # 展示前2000个采样点 plt.title(title) plt.xlabel(采样点) plt.ylabel(振幅) plt.grid() plt.show() # 示例绘制正常状态和内圈故障信号的对比 normal_signal load_matfile(normal.mat)[0] fault_signal load_matfile(inner_race_fault.mat)[0] plot_vibration_signal(normal_signal, 正常轴承振动信号) plot_vibration_signal(fault_signal, 内圈故障振动信号)通过对比不同状态的信号波形我们可以观察到故障信号通常具有更明显的冲击特征。下表展示了CWRU数据集中四种典型状态的波形特征状态类型波形特征典型周期幅值范围正常平稳随机振动无固定周期±0.5g内圈故障周期性冲击100-150采样点±2.0g外圈故障周期性冲击80-120采样点±1.8g滚动体故障非严格周期冲击150-200采样点±1.5g提示在实际工程中建议先对数据进行标准化处理如Z-score标准化以避免不同传感器量纲带来的影响。2. 采样窗口选择与特征提取采样窗口长度的选择是数据预处理中最关键的决策之一。CWRU数据集中振动信号的典型周期约为100-200个采样点。选择1000作为窗口长度主要基于以下考虑覆盖完整故障周期确保窗口能包含至少5-10个完整的故障冲击周期计算效率平衡过长的窗口会增加计算负担过短则可能丢失关键特征模型输入要求适合大多数CNN网络的输入尺寸实现固定长度采样的Python代码如下def segment_signal(signal, window_size1000, step500): 将长信号分割为固定长度的样本段 segments [] for start in range(0, len(signal)-window_size, step): segment signal[start:startwindow_size] segments.append(segment) return np.array(segments) # 对四类信号进行采样 normal_segments segment_signal(normal_signal) inner_segments segment_signal(load_matfile(inner_race_fault.mat)[0]) outer_segments segment_signal(load_matfile(outer_race_fault.mat)[0]) ball_segments segment_signal(load_matfile(ball_fault.mat)[0])特征提取是提升模型性能的关键。除了原始振动信号外我们可以计算时域和频域特征from scipy import stats from scipy.fft import fft def extract_features(segment): 提取时域和频域特征 features {} # 时域特征 features[mean] np.mean(segment) features[std] np.std(segment) features[skewness] stats.skew(segment) features[kurtosis] stats.kurtosis(segment) # 频域特征 fft_vals np.abs(fft(segment))[:500] # 取前500个频点 features[freq_mean] np.mean(fft_vals) features[freq_std] np.std(fft_vals) features[dominant_freq] np.argmax(fft_vals) return features下表对比了不同故障类型的典型特征值范围特征指标正常范围内圈故障范围外圈故障范围滚动体故障范围峰度3-515-3010-208-15标准差0.1-0.30.5-1.20.4-1.00.3-0.8主频成分随机分布转速相关频率固定频率点多个谐波频率3. 标签构建与数据平衡四分类任务的标签构建需要考虑类别平衡问题。CWRU数据集中各类样本数量不均直接使用可能导致模型偏差。以下是处理方案def create_balanced_dataset(segments_list, labels_list, samples_per_class1400): 创建平衡的数据集 balanced_data [] balanced_labels [] for segments, label in zip(segments_list, labels_list): # 随机选择指定数量的样本 indices np.random.choice(len(segments), samples_per_class, replacelen(segments)samples_per_class) balanced_data.extend(segments[indices]) balanced_labels.extend([label]*samples_per_class) # 打乱顺序 shuffle_idx np.random.permutation(len(balanced_data)) return np.array(balanced_data)[shuffle_idx], np.array(balanced_labels)[shuffle_idx] # 定义标签 labels [0, 1, 2, 3] # 0:正常, 1:内圈故障, 2:外圈故障, 3:滚动体故障 segments_list [normal_segments, inner_segments, outer_segments, ball_segments] # 创建平衡数据集 X, y create_balanced_dataset(segments_list, labels)数据增强是解决样本不足的有效手段。对于振动信号我们可以采用以下增强方法def augment_signal(segment, noise_level0.05): 通过添加噪声和时移进行数据增强 # 添加高斯噪声 noise np.random.normal(0, noise_level*np.std(segment), len(segment)) augmented segment noise # 随机时移 shift np.random.randint(-50, 50) augmented np.roll(augmented, shift) return augmented # 示例对单个样本进行增强 original X[0] augmented augment_signal(original)注意增强后的数据应保持原始信号的物理特性避免过度扭曲导致模型学习到虚假特征。4. 数据保存与模型输入准备完成上述步骤后我们需要将处理好的数据保存为模型可直接读取的格式def save_processed_data(X, y, save_dirprocessed_data): 保存处理后的数据和标签 import os if not os.path.exists(save_dir): os.makedirs(save_dir) np.save(os.path.join(save_dir, X.npy), X) np.save(os.path.join(save_dir, y.npy), y) print(f数据已保存至{save_dir}目录) # 保存数据 save_processed_data(X, y)对于深度学习模型我们通常需要将数据分为训练集和测试集from sklearn.model_selection import train_test_split def create_train_test_split(X, y, test_size0.3): 创建训练集和测试集 X_train, X_test, y_train, y_test train_test_split( X, y, test_sizetest_size, stratifyy, random_state42) # 为CNN模型添加通道维度 X_train X_train[..., np.newaxis] X_test X_test[..., np.newaxis] return X_train, X_test, y_train, y_test # 创建数据集 X_train, X_test, y_train, y_test create_train_test_split(X, y)最终得到的数据规格应满足以下要求输入形状(样本数, 1000, 1)输出形状(样本数,)类别分布每个类别在训练集和测试集中比例相同通过这三个关键步骤我们成功将原始的振动信号转化为适合深度学习模型处理的结构化数据。在实际项目中这种标准化的预处理流程可以显著提高模型的训练效率和最终性能。

相关新闻

STM32F732IE与13DOF传感器融合定位导航实战

STM32F732IE与13DOF传感器融合定位导航实战

1. 项目背景与核心需求在移动机器人、无人机和各类智能穿戴设备中,精确的定位导航能力始终是系统设计的核心挑战。传统方案往往面临两个关键瓶颈:一方面,单一传感器(如GPS或IMU)在复杂环境中可靠性不足;另一…

2026/7/6 12:31:20阅读更多 →
深度学习项目复现指南:从环境配置到结果验证的系统心法

深度学习项目复现指南:从环境配置到结果验证的系统心法

你花了一个周末,终于找到了一个看起来特别适合练手的深度学习项目。它解决了一个你感兴趣的问题,论文写得清晰,代码也开源在 GitHub 上,Star 数不少,README 看起来也挺详细。你满怀信心地 git clone ,准备…

2026/7/6 12:31:20阅读更多 →
Hessian反序列化漏洞深度解析:从异常处理到代码执行

Hessian反序列化漏洞深度解析:从异常处理到代码执行

1. 项目概述:从一次异常处理到Hessian反序列化漏洞的深度探索最近在排查一个线上服务的问题时,遇到了一个非常典型的场景:一个Dubbo服务在反序列化Hessian协议数据时,抛出了一个看似普通的异常,但异常堆栈里却出现了to…

2026/7/6 12:31:20阅读更多 →
3分钟解决Navicat试用期到期:Mac用户的无限重置指南

3分钟解决Navicat试用期到期:Mac用户的无限重置指南

3分钟解决Navicat试用期到期:Mac用户的无限重置指南 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 当你正在处理…

2026/7/6 13:46:28阅读更多 →
EldenRingSaveCopier:三步完成艾尔登法环存档迁移的终极解决方案

EldenRingSaveCopier:三步完成艾尔登法环存档迁移的终极解决方案

EldenRingSaveCopier:三步完成艾尔登法环存档迁移的终极解决方案 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 在艾尔登法环的世界中,数百小时的游戏进度是每个褪色者最宝贵的财富。…

2026/7/6 13:46:28阅读更多 →
Kimi    LeetCode 3485. 删除元素后 K 个字符串的最长公共前缀 Java实现

Kimi LeetCode 3485. 删除元素后 K 个字符串的最长公共前缀 Java实现

以下是 LeetCode 3485 删除元素后 K 个字符串的最长公共前缀 的 Java 实现。思路核心思路是 Trie 线段树:1. 构建 Trie:将所有字符串插入字典树,每个节点记录 count(经过该节点的字符串数)和 depth(前缀长…

2026/7/6 13:46:28阅读更多 →
Kimi    LeetCode 3480. 删除一个冲突对后最大子数组数目 C语言实现

Kimi LeetCode 3480. 删除一个冲突对后最大子数组数目 C语言实现

以下是 LeetCode 3480 删除一个冲突对后最大子数组数目 的 C 语言实现。思路核心思路是枚举子数组右端点,维护当前最严格和次严格的冲突限制:1. 预处理:将每个冲突对 (a, b) 按较大值(即右端点)分组。对于子数组右端点…

2026/7/6 13:46:28阅读更多 →
agno-6-rag

agno-6-rag

什么是 RAG RAG(Retrieval Augmented Generation,检索增强生成) 是一种结合了信息检索和文本生成的技术,它通过在生成回答之前先从外部知识源检索相关信息,来增强大型语言模型(LLM)的能力。 RAG…

2026/7/6 13:46:28阅读更多 →
耐火 + 高防护母线槽结构解析:加厚绝缘、厚铝合金外壳、密封散热设计要点

耐火 + 高防护母线槽结构解析:加厚绝缘、厚铝合金外壳、密封散热设计要点

耐火 高防护母线槽结构解析:加厚绝缘、厚铝合金外壳、密封散热设计要点一、前言化工厂区、地下车库、高层建筑消防配电,对母线槽耐火性能、防尘防水防护等级要求严苛。母线槽外壳、绝缘层、散热密封结构是防火防水能力的核心载体。本文结合扬中金展电气…

2026/7/6 13:41:27阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →