简介:面向机械设备健康监测、故障诊断与预测性维护研究者的齿轮箱故障数据集,适用于机器学习、深度学习模型训练及工业现场异常检测场景。数据包含振动信号、声音记录、温度、扭矩和速度等多类测量参数,覆盖无故障、齿面点蚀、三齿磨损等典型工况,并附有10kHz采样振动数据和频谱、波形可视化结果,便于开展时频分析、特征提取与故障分类建模。压缩包共15个文件,以MATLAB数据文件(.mat)、频谱/波形图片(.png)、Python分析脚本(.py)为主,辅以数据解读文本、转速对照表(.csv)和相关论文(.pdf),整体大小约5.91MB,结构紧凑,兼顾数据、代码与文档说明。目前已有840人浏览学习。通过这套资源,读者既能获得原始实验数据与预处理脚本,又能参考可视化图谱快速理解故障特征;结合说明文档,可复现从振动信号到故障识别的完整流程,是故障诊断入门、课程实验和算法对比的实用数据集。 做设备状态监测和数据诊断的同行,应该都体会过这种血压飙升的瞬间:现场那边反复叮嘱"数据很宝贵,想跑都跑不回来",你拿到手一个名为"齿轮箱故障数据.zip"的压缩包,双击下去却弹出一句failed to copy spatial iop zip,或者更直接的invalid zip archive: could not find eocd。数据就在包里,但解压链路在第一步就断了。
这篇文章就是围绕这一类场景写的:从拿到齿轮箱故障数据zip包开始,到最终完成初步故障判定,完整走一遍我在实际项目里的处理流程。内容包括zip包完整性检查与修复、分卷压缩和密码问题的合规处理、齿轮箱振动数据的文件解析、以及真正用到故障诊断上的时域频域分析思路。适合刚接触设备健康管理、准备用公开数据集或现场采集数据做分析的同学参考,也适合被"zip文件损坏"反复折磨的工程师收藏备用。
1. 先别急着解压:为什么这个zip总在报EOCD错误
1.1 zip文件的"目录页"到底长什么样
很多人遇到could not find eocd就直接判了压缩包死刑,其实这个报错不代表数据真的丢了。要想搞明白,得先知道zip文件的结构。一个正常zip包的尾部,会有一块固定的区域叫EOCD(End of Central Directory),中文可以理解为"中央目录结尾记录"。它保存了整个压缩包的关键索引信息:文件个数、中央目录偏移量、压缩包是否分卷等,相当于一本书的目录和页码。
解压软件打开zip时,第一步不是去读每个文件的数据块,而是先定位到文件末尾找这块EOCD记录。找不到,软件就不知道"这本书"一共多少页、目录在哪里,自然就会报错。所以could not find eocd的本质是:压缩包的尾部索引区丢失或偏移了,但前面的文件数据块大概率还是完整的。这个认知很关键,它决定了后面的修复策略——不是直接放弃,而是想办法把索引重建出来或者手工绕过去。
1.2 引起EOCD找不到的四种常见场景
根据我这些年的经验,EOCD损坏或者找不到,大多数不是压缩软件写出来的问题,而是传输和应用环境导致的。
第一种最常见:文件下载或拷贝不完整。尤其是通过聊天工具传到手机再转到电脑,或者网页下载到一半断网,zip包可能是截断的,尾部直接缺失。你在现场拷回来的齿轮箱故障数据,如果U盘提前拔掉、或者Windows的"优化快速删除"没生效就弹出,也有可能出现这种情况。
第二种:文件被第三方软件改动过。有些网盘客户端、杀毒软件在后台扫描时会"修复"文件头尾,甚至直接把zip重新封装,结果把原来的EOCD搞丢了。热搜里的solidworks安装failed to copy spatial iop zip就是典型的安装包被安全软件拦截后尾部缺失。
第三种:分卷压缩处理不当。把zip拆成多个分卷(比如 .z01、.z02),如果没有完整下载所有分卷就尝试解压,也会报找不到EOCD——因为EOCD通常放在最后一个分卷里。这个我在后面会展开。
第四种:文件被当成文本文件打开过一次并保存,字符编码被破坏。这个比较隐蔽,但如果你手滑用记事本打开过zip然后点了保存,那整个文件基本就废了,修复难度极大。
1.3 一套完整的zip完整性检查与修复流程
拿到数据包后,我现在的固定动作是先做"病历检查",而不是直接双击解压。
第一步,用哈希值确认文件是不是原本那个。数据提供方如果给了SHA-256或MD5值,就用命令行算一遍比对。Windows下可以打开PowerShell运行:
Get-FileHash .\齿轮箱故障数据.zip -Algorithm SHA256Linux或macOS下用:
sha256sum 齿轮箱故障数据.zip如果算出来的值和原始值对不上,说明文件在传输或存储过程中被动过,后面怎么做都要先跟数据提供方确认。
第二步,用工具层面的"打开测试"做快速体检。7-Zip打开压缩包后,按Alt+T或者选择菜单里的"测试",它会逐个文件校验CRC。这一步能明确告诉你损坏范围是"个别文件"还是"整体结构损坏"。如果只是个别文件CRC错误,通常能解压出其他完好文件,坏文件单独处理。
第三步,针对could not find eocd做修复。我比较推荐的做法是先试7-Zip的打开方式:很多情况下7-Zip对尾部缺失的容忍度比系统自带解压高,它能在没有EOCD的情况下强制列出文件。依次点击"文件"菜单里的"打开压缩包",选择"损坏的压缩包"选项,往往能看到文件列表并强行解压。这招在U盘拷贝截断的场景下成功率很高。
如果7-Zip也读不出中央目录,再考虑用DiskInternals ZIP Repair这类专业修复工具。但要注意,这类工具修复的原理是扫描文件中的数据块并重建索引,耗时较长,而且对已经覆盖写入的损坏基本无效。我的建议是:先试免费工具和7-Zip强开,不行再找专业工具,实在不行就回到数据源头重新拷贝,别在修复上耗太久。
注意:我见过不少人在zip修复上死磕一整天,最后发现是源文件在采集系统里就没导出完整。齿轮箱故障数据的现场采集往往依赖特定采集设备,导出的zip包里如果直接包含数据库文件或大量零散二进制文件,损坏后的修复价值确实存在,但性价比通常不高。优先级永远是:联系源头、重新传输、在全省份备份。
2. 解压环节的硬骨头:密码、分卷与编码
2.1 密码保护的合规处理思路
数据包带密码的情况在工程现场不少,尤其是涉及外协单位或设备供应商提供的故障数据,加密是为了控制扩散范围。热搜里经常看到"zip密码移除""zip无视密码直接解压"的说法,这里我得泼点冷水。
zip的加密机制分两种。老式的ZipCrypto算法存在已知弱点,某些工具确实可以在拿到足够多已知明文的情况下快速破解;而多数专业压缩工具现在默认使用AES-256加密,这个强度对当前算力来说基本不可行。网上那些宣称"无视密码直接解压"的软件,要么只对ZipCrypto有效,要么是挂羊头卖狗肉。真正合规高效的做法,是向压缩包创建者确认密码——尤其是工业数据,绕开授权做破解本身有合规风险,完全不值得。
我自己的习惯是:收到加密的齿轮箱数据包,先看文件名和邮件沟通记录确认密码来源。如果是同行发来但忘了附密码,直接联系索要;如果是历史存档找不到密码,会在团队内部记录清楚这个包加密原因、经手人,再决定是否动用恢复手段。整个过程留痕,避免后续说不清。
2.2 z01分卷压缩的合并与解压
数据量大是齿轮箱振动采集的常态,一套测点连续采集几个小时,动辄几十GB。这时候对方传过来的就不是一个简单的.zip,而是一组.z01、.z02加最后一个.zip的分卷包。网上经常有人说"z01文件没有zip怎么办",其实就是分卷没集齐。
分卷解压的正确逻辑是:所有分卷放同一个目录,文件名前缀一致,双击最后一个.zip文件即可自动合并解压。注意三点:分卷包不能手动改扩展名合并成一个zip;不能单独解压某个分卷;下载缺一卷就解压失败,还会报上面提到的EOCD问题——因为EOCD只在最后一个分卷里。
如果你在Linux服务器上干活,没有图形界面,可以通过命令行合并:
cat 齿轮箱故障数据.z01 齿轮箱故障数据.z02 齿轮箱故障数据.zip > 齿轮箱故障数据_full.zip然后尝试用unzip或者Python的zipfile模块读取整合后的文件。注意这样"拼"出来的文件部分解压器不认,但python的zipfile配合ZipFile对象的_RealGetContents逻辑有时候能处理。更稳妥的是用7-Zip的命令行:
7z x 齿轮箱故障数据.zip它自己会找同目录下的分卷,不推荐手动合并。这里我的实操建议是:下载完成后先把所有分卷按序号排好,确认数量无误再解压。少一个文件就回去重新下载,几乎不存在"部分解压"的合理性。
2.3 文件名乱码:跨平台zip的编码之痛
工程数据跨平台传输,zip中文文件名乱码极其常见。Windows带的压缩工具默认使用GBK编码写入文件名,而Linux和macOS的解压工具默认按UTF-8解码,于是解压出来的文件名全是"锟斤拷"之类的乱码。数据本身没问题,但文件路径乱套之后,后续脚本批量处理直接跪在路径上。
我的解决办法是,尽量用7-Zip统一压缩和解压,并在压缩时选择UTF-8编码。如果接手的是已经乱码的包,Linux下可以用工具重新编码:
lsar 齿轮箱故障数据.zip # 先列出原始文件名编码 bsdtar -xvf 齿轮箱故障数据.zip --options zip:charset=CP936在Windows上,Bandizip的"自动检测编码"功能也能解决大部分乱码问题。处理完文件名,第一时间把目录结构截个图存证,方便后面分析时对照命名规则。对于齿轮箱数据这种需要按测点、按工况分类处理的包来说,文件名一旦乱套,整个自动化流程就得推倒重来,这一步别图省事。
3. 数据包里的天地:齿轮箱故障数据应该怎么读
3.1 从目录结构反推传感器布置方案
成功解压之后,先别急着跑代码,花半小时把目录结构通读一遍,你能反推出很多信息。工业现场的齿轮箱故障数据,通常按"实验台/设备编号 → 工况条件 → 测点位置 → 数据文件"这个层级来组织。看到目录里有input_shaft、output_shaft、gear_mesh这样的命名,基本能判断传感器分别布置在输入轴、输出轴和齿轮啮合区附近。
有些数据集会附带一个README.txt或.csv格式的说明文件,里面标注了齿轮箱型号、齿数、电机转速、负载扭矩、采样率、传感器灵敏度。这部分信息是整个诊断的地基,没有它,后面所有特征频率计算都是空中楼阁。
如果压缩包内没有说明文档,也不代表没法做。你可以从文件名反推:比如10Hz_0Nm_AC3这样的命名,大概率是"转速10Hz、零负载、加速度计3号位"。我见过不少工业数据包靠文件名约定就能还原出完整的实验矩阵。整理出一张测点—文件名—工况对照表,后面分析时随时查,比反复翻目录高效得多。
3.2 时间、转速、载荷:三个必须先看的元数据字段
很多同学拿到数据就画频谱图,画完对着谱峰一脸迷茫。我踩过这个坑后的教训是:在碰数据之前,先把时间基准、转速基准、载荷基准这三个元数据字段搞清楚。
时间基准包括采样率和采样时长。这里有个常被忽略的坑:zip包里的信号文件可能是"全部采集时长"的一部分,某个文件对应的真实时间段得看文件名里的时间戳。如果你用整段数据做FFT,而中间包含变速升降速区间,频谱会被"抹平",特征频率根本不清晰。
转速基准尤其重要。齿轮箱特征频率(啮合频率、轴转频、边频带)全都要用实时转速计算。如果zip包里没有转速通道,但实验条件里写了"恒定转速30Hz",那可以用电机转频近似;如果是变转速工况,就必须依赖键相通道或者转速计信号,否则后期做阶次分析无从谈起。
载荷基准则决定了齿轮的啮合状态。同一套故障模型,零负载和额定负载下的振动特征差异巨大。轻负载下齿面可能不脱啮,故障冲击不明显;重负载下冲击特征更突出,但同时可能掩盖某些早期故障征兆。所以数据包里每个文件对应的载荷值,必须写进样本标签里。
3.3 振动数据文件的常见格式与读取方法
齿轮箱振动数据的存储格式五花八门,最常见的几种我列一下读取思路。
CSV/文本格式最好处理,一般是多列数值,每一列对应一个通道,第一行可能是列名。用pandas直接读:
import pandas as pd df = pd.read_csv('AC1_10Hz_0Nm.csv') print(df.head()) print(df.columns)MAT文件常见于MATLAB采集平台,SciPy的loadmat可以直接读取:
from scipy.io import loadmat mat = loadmat('gearbox_fault.mat') print(mat.keys())还有一种是从LMS、B&K等采集系统导出的专有格式,比如.lms、.uff。这种文件需要配套的解析库,或者先让数据提供方转成通用格式。我之前遇到过一个包,数据是.dat后缀但实际内部是二进制块,这时候就得看README里有没有帧格式说明,没有的话先祭出hexdump看看文件头特征。
读取之后第一件事永远是做数据体检:计算数据的均值、方差、最大值、最小值,检查是否有通道接反、饱和削顶、长期漂移。这些脏数据问题用matplotlib把时域波形画出来一眼就能看得七七八八。记住,在数据质量没确认之前,任何诊断结论都不可靠。
4. 从原始波形到故障初判:一次完整的齿轮箱数据分析
4.1 数据预览与稳态段截取
数据体检通过之后,我会先画出整段数据的时域波形概览,确定哪些区段是稳态工况。稳态段的判断标准是:转速基本恒定、幅值包络没有大的趋势性波动。手动选段可以用matplotlib的交互模式,缩放拖动选出一段干净信号,然后按索引截取。
截取时长没有绝对标准,但做FFT频谱分析,频率分辨率等于采样率除以点数。如果你采样率是20kHz,想得到1Hz的频率分辨率,就需要至少20000个点。一般我会截取2到4秒的稳态信号,做几次平均频谱,既能保证分辨率,又能通过平均压低随机噪声。假设采样率fs = 20000,截取3秒:
import numpy as np fs = 20000 t_start = 2.0 t_end = 5.0 start_idx = int(t_start * fs) end_idx = int(t_end * fs) segment = signal[start_idx:end_idx]4.2 时域上的冲击痕迹与调制现象
时域波形能直接看到的典型特征有两个:周期冲击和幅值调制。
齿轮断齿或严重剥落时,啮合过程中故障齿参与啮合会产生一次冲击,冲击间隔等于该轴的转频周期。比如输出轴转频是10Hz,那么时域波形上每0.1秒出现一次明显尖峰。计算冲击间隔的方式很直观:找包络信号的峰值位置,算两个相邻峰的时间差,再转成频率。
幅值调制表现为波形包络像"波浪"一样起伏,这个波浪的频率通常等于故障轴的转频。听上去抽象,你把整体波形缩小看轮廓,如果轮廓呈现周期性鼓包,那就是调制的迹象。此时把包络信号做一次FFT,能看到调制频率出现在低频段,这个频率对应哪根轴,故障就在哪根轴上。
这里有个容易误判的点:时域冲击未必都是故障。齿轮啮合本身就有冲击,尤其在大扭矩工况下,正常啮合冲击幅值也不小。所以时域只能做初筛,一定要结合频域谱和特征频率一起下结论。
4.3 频谱与边频带:齿轮故障的签名
频域分析是齿轮箱故障诊断的核心。先计算幅值谱,重点是观察啮合频率附近的情况。啮合频率的计算公式是:
啮合频率 f_m = 小齿轮齿数 Z1 × 小齿轮轴转频 f_1 = 大齿轮齿数 Z2 × 大齿轮轴转频 f_2正常齿轮的频谱上,啮合频率及其2倍、3倍谐波会比较明显,但边频带很弱。齿轮出现局部缺陷(断齿、点蚀坑)后,啮合频率两侧会长出一簇等间隔的边频带,间隔等于故障轴的转频。
用Python做幅值谱很简洁:
from scipy.fft import rfft, rfftfreq N = len(segment) win = np.hanning(N) spectrum = np.abs(rfft(segment * win)) * 2 / np.sum(win) freqs = rfftfreq(N, 1/fs) # 找啮合频率附近的局部峰值 mesh_freq = 24 * 10 # 假设输入轴齿数24、转频10Hz band = (freqs > mesh_freq - 50) & (freqs < mesh_freq + 50)边频带的宽度、幅值分布能进一步区分故障严重程度。早期磨损的边频带幅值低,靠近啮合频率;严重断齿时边频带幅值变大,数量变多,频谱看起来像在啮合频率周围"张开了一把梳子"。注意,提取边频带之前要做频谱平均,否则单帧FFT的噪声底会掩盖低幅值边频。
5. 齿轮箱常见故障在数据里的不同表现
5.1 断齿、磨损、点蚀的频谱差异
三种常见故障在频谱上的签名有比较明显的差异,我整理成表格方便对照。
| 故障类型 | 时域特征 | 频谱特征 | 包络谱特征 |
|---|---|---|---|
| 断齿/裂纹 | 明显的周期冲击,间隔=轴转频 | 啮合频率边频带丰富,边频幅值高 | 转频及其谐波突出 |
| 均匀磨损 | 时域整体幅值上升,冲击性不强 | 啮合频率幅值增大,谐波增多,边频较乱 | 无明显单一突出谱线 |
| 点蚀/剥落 | 局部冲击伴随一定周期性 | 有边频带,但通常没有断齿那么宽 | 故障特征频率谐波出现 |
判断故障类别时,我建议先看时域冲击的周期性是否稳定。稳定的周期冲击往往对应局部缺陷;杂乱无章、幅值整体抬高的则更可能指向分布式磨损。
5.2 齿轮故障与轴承故障的区分要点
轴承外圈、内圈故障的故障特征频率和齿轮转频不同,但工程上容易搞混的原因是:齿轮故障冲击会激起轴承固有频率共振,包络谱上出现低频成分,容易被误判为轴承故障信号。
区分有两条路。一条路是用精确的轴承故障频率公式计算:外圈BPFO、内圈BPFI、滚动体BSF、保持架FTF,分别比对包络谱峰值位置。另一条路是依赖齿轮箱结构先验:如果边频带间隔恰好等于某根轴的转频,优先考虑齿轮问题;如果峰值频率对应轴承故障特征频率而非任何轴的整数倍转频,再考虑轴承问题。
从实际项目来看,齿轮箱的轴承故障往往会被误诊为齿轮磨损,因为两者都会导致整体振动水平上升。我在处理这类数据时,习惯同一个测点同时计算原始频谱、包络谱和倒频谱,三个视角交叉验证。倒频谱在识别齿轮边频带的"家族间隔"时特别好用,它能把你需要找的"等间隔边频带"转成一个单峰。
5.3 初判之后:特征量化与报告输出
完成初步定性判断后,要落到可量化的指标上,不然没法跟历史数据对比。
我常用的量化指标有:时域的均方根值、峭度、峰值因数;频域的啮合频率幅值、边频带总能量、边频带与啮合频率的比值;包络谱中故障特征频率幅值占噪声底的比例。峭度对冲击信号非常敏感,正常齿轮数据峭度接近3,出现明显冲击时峭度会跳到5以上甚至更高;但峭度容易受单次突发噪声干扰,所以我都会配合时域波形一起看,防止误判。
最后把这些指标整理成一张表,和频谱图一起输出。输出频谱图时,我会在图上直接标注出转频、啮合频率、边频带间隔,并标出计算出的理论值,方便后续复查和他人核对。另外,处理完一个zip数据包后,我会把所有解压文件、脚本、输出图、结论文件夹按"日期_设备编号_故障类型"的方式归档,同时保留原始zip的哈希值记录。这样无论是复查还是追溯采集来源,都有据可依。
拿到齿轮箱故障数据.zip之后,从解压失败的慌乱到完成诊断结论的踏实,中间隔着的就是一套有条不紊的处理流程。我在实际项目里最大的体会是:zip损坏、分卷缺失、编码乱码这些"周边问题"看着琐碎,却经常决定整个分析项目能不能按时交付。宁可花时间把解压、校验、元数据梳理做得扎扎实实,也不要一上来就急着画频谱图。等你在一个又一个数据包里摸清了齿轮箱振动信号的脾气,回头再看那个曾经让你手足无措的could not find eocd,就会觉得它不过是一道流程上的小坎罢了。
本文还有配套的精品资源,点击获取