资讯动态

齿轮箱故障数据拆解:从振动信号到诊断模型落地

发布时间:2026/10/2 16:06:27 来源:尧图企业网站定制
简介用于齿轮箱故障诊断的完整数据集「齿轮箱故障数据.zip」主要面向机械故障预测、机器学习和数据建模学习者可用于振动、声音、温度等多类信号分析帮助实现齿轮磨损、断齿等异常状态的早期识别与预防性维护。压缩包共15个文件、约5.91MB涵盖3个mat格式的齿轮箱原始运行数据、1个csv参数记录、2个py数据处理与振动分析脚本并配有多张png频谱/波形图、2个txt数据解读与ReadMe说明以及1份pdf实验数据集论文便于对照理解。已有842人学习下载。数据以10kHz采样振动信号为主包含无故障、单齿磨损、三齿磨损等工况可围绕傅里叶变换、频域特征提取和小波分析开展故障模式识别。csv中标注了主动轮15齿、从动轮110齿及啮合频率与理论值的偏差适合用于特征工程、时间序列预测和模型评估结合支持向量机、随机森林或深度学习还可建立故障预测模型通过交叉验证与混淆矩阵评估效果为搭建实时监测和预警系统提供有力支撑是一份质量较高的工业数据集。1. 齿轮箱故障数据从波形里认出断齿、磨损和缺齿做设备健康管理的人最怕的不是算法不会写而是手里没有带标签的真实故障数据。公开数据集里齿轮箱振动信号这一块能找到的不多能找到带转速、负载、故障类型一一对上的更少。这份齿轮箱故障数据.zip本质上是一组从实验台采集的振动信号覆盖正常、断齿、磨损、缺齿等常见故障模式每一条样本都带着工况参数和故障标签。适合两类人一类是做故障诊断算法验证的研究者想快速跑通特征提取和分类流程另一类是现场工程师想拿真实波形做对比确认自己设备上的异常频率到底对应哪种损伤。数据的价值不在文件本身而在于它把“故障类型”和“信号形态”之间的对应关系直接暴露在你面前省去自己搭实验台、造故障的漫长前置工作。2. 数据集构成与工况设计先搞清楚你手里是什么信号2.1 故障类型与标签体系这套数据的核心设计逻辑是把齿轮箱最常见的失效模式拆成四类正常Normal、断齿Tooth Break、磨损Wear、缺齿Missing Tooth。每一类样本都对应一个标签常见的标注格式是文件夹命名加记录文件比如Normal_1800_0、Break_1500_25这样的结构。其中数字含义通常依次是转速RPM、负载百分比。你需要先确认标签语义再动手建模否则很容易把工况参数当成特征喂进模型造成信息泄露。我拆过的类似数据集里标签体系一般还会带一个辅助文件包含每个样本的详细参数采样频率、转速、扭矩、功率、故障位置。拿到压缩包后优先找readme.txt或meta.csv把它们读一遍再去看波形。2.2 采集参数与通道说明这类实验台数据采集参数通常遵循 ISO 振动测量标准。常见配置如下参数项典型值说明采样频率12.8 kHz 或 20 kHz决定可分析的最高频率奈奎斯特频率采样时长1 ~ 10 秒/样本短样本适合做故障分类长样本适合做趋势分析传感器加速度传感器输出单位为 g 或 m/s²通道数1 ~ 4 通道多通道包含输入端、输出端、径向、轴向测点转速范围600 ~ 3000 RPM低转速信号能量弱需要放大负载范围0% ~ 100%负载影响齿面接触应力对磨损信号敏感2.3 工况矩阵怎么看一个合格的故障诊断数据集必然覆盖不同转速和负载的组合而不是只在额定工况下采集。原因很简单齿轮箱的振动响应是非线性的转速高时不平衡力和啮合冲击都放大负载变化时齿面接触状态不同故障特征频率的能量分布也会变化。我一般先做一个工况分布统计看数据覆盖是否均匀再决定是否需要按工况分组建模型。如果你的目标是用在工业现场模型需要跨工况泛化那么训练集必须包含至少三种转速和两种负载否则测试时换一条产线精度就崩这是这类数据集的经典坑。3. 解压、目录结构与信号读取把 zip 变成可用的 DataFrame3.1 解压与文件校验拿到齿轮箱故障数据.zip第一件事不是急着解压而是先看一眼压缩包完整性。zip 文件在网盘传输过程中经常出现 CRC 校验错误解压到一半报错一查发现某个文件损坏。我常用的做法是用unzip -t做完整测试unzip -t 齿轮箱故障数据.zip正常输出No errors detected in compressed data再解压。如果报错建议换 7-Zip 的“提取并测试”功能它能跳到损坏文件之后继续解压至少能抢救出大部分干净样本。Windows 下如果双击解压遇到中文文件名乱码问题7-Zip 里把“文件名编码”切到 UTF-8 即可。3.2 目录结构分析与读取脚本解压后典型的目录结构长这样gear_fault_dataset/ ├── readme.txt ├── meta.csv ├── Normal/ │ ├── Normal_1800_0.csv │ └── ... ├── Break/ │ ├── Break_1800_0.csv │ └── ... ├── Wear/ │ └── ... └── Missing/ └── ...每个 CSV 文件的列通常包含时间戳或采样序号以及各通道的振动值。我用 Python 读取时不会一次性把所有文件都 load 进内存而是先建立索引再分批读取import pandas as pd import numpy as np from pathlib import Path data_root Path(./gear_fault_dataset) records [] for fault_type in [Normal, Break, Wear, Missing]: fault_dir data_root / fault_type for csv_file in sorted(fault_dir.glob(*.csv)): # 从文件名解析转速和负载 parts csv_file.stem.split(_) rpm int(parts[1]) load int(parts[2]) if len(parts) 2 else 0 records.append({ path: csv_file, fault: fault_type, rpm: rpm, load: load }) meta_df pd.DataFrame(records) print(meta_df.groupby([fault, rpm]).size())这里的关键在于用collections的思路建立样本清单而不是马上读波形。因为有些数据集的单个样本文件就有几十 MB全量读入内存很浪费。建议先打印统计确认每个故障类型下样本数量均衡再看要不要做欠采样或过采样。3.3 检查数据质量看不见的坑数据集文件的完整性没问题不代表信号本身干净。我一般会画几条波形先目检无故障样本的振动幅值应该在 ±几个 g 以内而断齿样本在啮合频率处应有明显周期冲击。如果发现全部波形幅值都是 0 到 0.1大概率是单位标定问题如果波形有突然的直流跳变可能是传感器受到敲击。当一段代码需要你手动指定采样频率时建议直接从 readme.txt 里读不要默认 12.8 kHz 完事。采样频率写错后面所有频率轴都是错的这种低级错误排查起来最耗时间。4. 故障特征提取从转频、啮合频率到边频带4.1 齿轮传动的频率结构齿轮箱振动信号的最大特点是存在一个明确的基频骨架。电机轴转频是fr RPM / 60齿轮啮合频率是fz fr * Z其中Z是该齿轮的齿数。断齿和缺齿故障会使啮合频率及其谐波两侧出现以转频为间隔的边频带边频带的疏密和幅值直接反映损伤程度。磨损故障则通常表现为啮合频率谐波能量整体升高特别是高频谐波变化明显。先算好理论频率再去看频谱是诊断流程的第一步。以某组参数为例电机转速 1500 RPM齿数 Z120、Z240则rpm 1500 z1, z2 20, 40 fr rpm / 60 # 转频25 Hz fz1 fr * z1 # 主动轮啮合频率500 Hz fz2 fr * z2 # 从动轮啮合频率1000 Hz实际啮合频率是同一个 print(f轴转频: {fr:.2f} Hz) print(f啮合频率: {fz1:.2f} Hz, 二倍频: {2*fz1:.2f} Hz)注意一对啮合的齿轮啮合频率是相同的不要机械地把两个齿轮分别算出两个啮合频率。啮合频率等于转频乘以齿数只算一次而各轴的转频是不同的。4.2 频谱分析与边频带识别理论频率计算完成后进入实际信号处理。对每段样本做 FFT 之前必须做加窗和去趋势否则频谱泄露会掩盖真实的边频带。我常用汉宁窗FFT 点数选 4096 或 8192频率分辨率约 3 Hz足以分辨 25 Hz 间隔的边频带。import scipy.signal as signal import matplotlib.pyplot as plt def compute_spectrum(data, fs): # 去直流分量 data data - np.mean(data) # 加汉宁窗减少频谱泄漏 window np.hanning(len(data)) data_w data * window # 做 FFT取单边幅值谱 fft_vals np.fft.rfft(data_w, n8192) fft_freqs np.fft.rfftfreq(8192, d1/fs) fft_mag np.abs(fft_vals) * 2.0 / np.sum(window) return fft_freqs, fft_mag # 假设读取了一段断齿故障样本 ch1 通道 fs 12800 fft_freqs, fft_mag compute_spectrum(signal_data, fs) # 定位 500 Hz 附近的峰值及边频带 peak_band (fft_freqs 450) (fft_freqs 550) band_freqs fft_freqs[peak_band] band_mag fft_mag[peak_band]加窗和平均是两件事。加窗解决泄漏平均解决噪声。同一个工况的样本可能有多段记录建议把多段频谱做线性平均边频带的形态会清晰得多。如果只拿单一帧做 FFT噪声峰值可能被误判成边频。4.3 时域指标补充峰值、峭度与 RMS频域特征能告诉你故障类型时域指标则能快速判断严重程度。工程实践中我最常看的三个指标指标公式物理含义峰值max(|x|)反映瞬时冲击强度断齿特征明显RMSsqrt(mean(x²))反映振动能量整体水平磨损更敏感峭度mean((x-μ)⁴)/σ⁴反映冲击性正常齿轮约 3故障时显著升高单独用某个指标都容易误判比如轴承故障也会让峭度升高。常规做法是把时域指标和频域边频带做交叉验证两者同时指向同一故障类型才可信。在你动手做特征矩阵之前建议把所有特征落成一行一行的数值表每行对齐一个样本的标签、转速、负载。这样后面无论喂给 SVM、随机森林还是简单的一维 CNN输入都干净。5. 模型搭建前的数据预处理与避坑清单5.1 训练集与测试集的划分策略划分数据集时最忌讳随机打乱。原因在于同一个实验条件下采集的多个样本时序上高度相关随机划分会让模型在训练时已经偷看过测试数据的信息。正确做法是按工况划分比如# 按转速分组划分避免数据泄露 from sklearn.model_selection import GroupShuffleSplit X feature_matrix y labels groups meta_df[rpm].values gss GroupShuffleSplit(n_splits1, test_size0.25, random_state42) train_idx, test_idx next(gss.split(X, y, groups))这样训练集中出现的转速和测试集中的转速不重叠模型在跨转速场景下的真实泛化能力才能被验证。很多公开数据集论文里精度高靠的就是没有严格按工况分组模型实际是“记住”了转速条件。应用在生产线上转速一变就失效这就是数篇论文复现之后最容易翻车的点。5.2 样本不均衡与标准化四类故障样本数量不一定相等尤其是缺齿这类需要拆装齿轮才能制造的故障样本量通常偏少。处理策略是先统计每类样本数如果最大类与最小类比例大于 5 比 1再做加权或者 SMOTE。标准化采用 StandardScaler拟合时只使用训练集统计量测试集用同一套参数做变换避免整体归一化造成的分布泄漏。from sklearn.preprocessing import StandardScaler scaler StandardScaler() X_train_scaled scaler.fit_transform(X[train_idx]) X_test_scaled scaler.transform(X[test_idx])注意fit_transform和transform分开写这是教科书和现场代码里最容易踩线的区别。5.3 避坑清单五条血泪经验做这类数据集的诊断建模我反复踩过几个坑写在这里省得你再走一遍。坑一解压后中文路径导致读取失败。现象Pythonglob能列出文件但pd.read_csv报 FileNotFoundError。 原因Windows 默认编码表对中文路径的处理和 UTF-8 不一致。 解决在read_csv里传入enginepython并给路径加Path对象或者解压之后把所有中文目录名改成拼音/英文一劳永逸。坑二同一个标签下混入不同工况信号。现象训练时验证精度 98%测试时只剩 60%。 原因同一个故障类型下存在多种转速和负载的数据模型实际在学转速而不是故障。 解决按 5.1 的 GroupShuffleSplit 划分或者训练前先做工况均衡采样。坑三采样频率和理论不符。现象频谱图上转频 30 Hz但设定的是 25 Hz 转速。 原因读文件时用了默认 fs没看 readme设备实际采样率被人为重采样过。 解决用一段已知转速的信号做转频标定从频谱峰值反推真实采样率。若反推值和标注差异超 1%说明数据集附带的参数存在误差。坑四首尾端点的冲击干扰。现象每段波形的开头几十个点幅值异常大后面恢复正常。 原因实验台启动瞬间或采集板卡的瞬态响应。 解决处理时丢弃前 5% 和尾部 5% 数据再做去趋势。坑五zip 伪加密迷惑解压软件。现象双击解压要求密码但 readme 里没有密码说明。 原因压缩包可能被“伪加密”处理过加密标志位被置位数据本体未加密。 解决用 7-Zip 打开压缩包如果能看到文件名列表说明只是伪加密。尝试点击“测试”按钮如果直接通过测试可以使用 7-Zip 的命令行工具或专业 zip 修复工具去掉加密标志位数据和文件列表都能正常提取。6. 验证与改进从分类精度到故障程度量化拿到诊断模型以后不能只满足于四分类精度。工程上有用的输出是故障程度或者置信度趋势这样才能安排检修计划。一个做法是对每个样本预测置信度做滑动平均当置信度从正常类摆动到断齿类时给出预警。这个思路相当于把静态数据集动态化在滚动轴承和齿轮箱监测里已有不少应用。具体验证流程我一般这样走先建立五折交叉验证记录每折的混淆矩阵看哪两类最容易被混淆。常见混淆出现在磨损和正常之间因为早期磨损信号幅值变化很小时域指标和健康状态重叠。此时可以通过小波包分解提取特定频带能量把高频段能量占比作为附加特征多数情况能拉开两类差距。特征改进不是越复杂越好。把原始特征维度提升到 200 维后随机森林的分类精度反而下降原因是很多特征存在高度相关性噪声被放大了。我后面加入一个简单的方差阈值筛选删掉方差过低的特征精度回升了大约 3 个百分点。维度构造技巧不难但需要遵循“先验证、再扩展”的顺序。整个数据集的价值不只是做一次离线分类实验它同时承载了诊断逻辑的验证环境。从那以后我每次拿到新的故障数据集都强制走一遍整个流程先校验压缩包完整性再读配置、核对工况矩阵然后做理论频率计算最后才是建模型验证。这套流程里每一步都做过反复翻车与修正最深的体会是数据质量决定模型上限模型结构只是逼近那个上限的手段。希望这份拆解对你有用能把这套齿轮箱故障数据从压缩包变成可落地的诊断逻辑。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑