齿轮箱故障数据zip解压与预处理:从乱码伪加密到振动特征提取
简介压缩包面向机械故障诊断与机器学习初学者提供齿轮箱运行状态的多维实测数据可用于振动信号分析、故障模式识别与预测性维护建模。包内共15个文件以mat数据、png频谱/时域图、py分析脚本为主另含csv参数记录、txt数据解读与pdf实验说明总大小约5.91MB结构清晰便于对照学习。数据覆盖正常、齿面点蚀、三齿磨损等典型工况记录了10kHz采样下的振动、声音等信号可基于Python脚本开展特征提取、时频变换与模型训练。配套的解读文档和ReadMe能帮助快速理解字段含义与实验背景已有842人学习下载适合作为故障诊断入门或课程实验的数据支撑。1. 齿轮箱故障数据.zip 里到底装了什么从压缩包到模型输入的全链路拿到「齿轮箱故障数据.zip」这类包第一反应往往是解压、读文件、直接扔进模型。但真正在产线或实验室里做过一次故障诊断的人会告诉你解压只是热身数据能不能用取决于压缩包里的目录结构、传感器通道顺序、转速记录方式和标签是否对齐。这个 zip 里通常装着加速度计的三轴振动信号、对应转速、工况描述和故障类型标注用来支撑齿轮断齿、齿面磨损、轴承点蚀等典型故障的判别与剩余寿命预测。适合做设备健康管理、PHM 和工业 AI 建模的工程师目标是把它变成一份干净、可复现、能进训练管线的数据集。2. 解压先过三关完整性校验、目录规划与伪加密识别2.1 先校验再解压zip 包不是拷下来就能用的齿轮箱故障数据这种多文件打包的压缩包最常见的翻车点不是算法而是压缩包本身不完整。有人把数据包从网盘拖下来或者由现场工程师从采集工作站上压缩后通过即时通讯工具传输中途断点续传失败导致文件缺块解压时却只报一个“CRC 失败”。如果直接忽略告警继续解压后期训练时你会拿到一段中间缺失的振动信号频谱上凭空多出几根假峰还以为是齿轮故障白费好几天排查。我一般会做两道校验。第一道是对整个 zip 包做哈希校验确认文件在传输过程中没有被改动sha256sum gearbox_fault_data.zip拿到哈希值后去和发布方给的校验值比对。如果对方只给了一个 zip 包没有附带哈希就先跳过这步转而用 zip 自带的测试模式逐个文件检查 CRCunzip -t gearbox_fault_data.zip-t会对压缩包内每个文件做一次完整的解压演练并把 CRC 与原始记录比对输出里有OK的条目才是完整文件。这个操作比直接解压快得多因为它只校验不落盘。测试过程中如果出现mismatch或CRC error别急着换解压工具先重新下载或让对方重传这是最省时间的处理方式。2.2 解压目录与命名规范给后续建模留一条回头路数据包一旦解压开文件数量少则几十、多则上千。如果全部堆在一个目录里后面做预处理时文件名、通道、工况全靠肉眼看非常容易抓错。我一般会建一套固定的目录结构把原始数据、中间产物和元信息分开mkdir -p gearbox/{raw,processed,meta} unzip gearbox_fault_data.zip -d gearbox/raw-d参数指定解压目标目录避免 zip 内部自带的目录结构把文件散得到处都是。解压完成后先把所有说明文档、数据表结构描述、标签定义之类的文件放进meta/后续写代码时优先读这里的描述文件不要凭文件名猜通道含义。processed/留给你预处理后的窗口样本和特征文件保证任何时候想重跑特征提取原始数据都还在raw/里没有被破坏。这里有一个容易被问到的点中文文件名解压出来乱码怎么办。很多现场的采集软件是 Windows 环境打包时用的不是 UTF-8 编码。在 Linux 下直接unzip文件名会变成锟斤拷或绠嚎。常见的做法是用-O指定原始编码unzip -O gbk gearbox_fault_data.zip -d gearbox/raw如果你的系统 unzip 版本不支持-O就用 7-Zip 处理7z x gearbox_fault_data.zip -d gearbox/raw -ocp936cp936是 GBK 的代码页编号。文件名乱码的问题在国产采集系统打包的 zip 里很常见属于做完这步就能彻底解决的“环境问题”不值得写绕弯的脚本去硬替换文件名。2.3 zip 伪加密的识别看着有密码实际是虚惊伪加密是这类数据包里一个很微妙的存在。某些打包工具在生成 zip 时把文件头里的加密标志位置成了1但文件数据本身并没有被真正加密或者全局口令为空。打开时软件会提示需要密码尝试常规密码表又解不开于是很多人卡在解压这一步误以为数据被加密保护了。判断方法是先查加密标志再尝试无密码解压。用 zipinfo 看加密位zipinfo -v gearbox_fault_data.zip | grep -i encryption输出中如果显示file is encrypted就说明头部加密标志被置位。接着用 7-Zip 直接尝试解压不输入任何口令7z x gearbox_fault_data.zip -d gearbox/raw -y伪加密包在这条命令下通常能直接解出来因为实际数据流没有加密。真正的加密包会在这里停下来弹出口令错误那就需要向数据提供方索要密码不要尝试暴力破解工业数据的时间成本远比跑破解工具的成本高。提示解压前先看一眼 zip 里每个文件的大小。振动数据动辄几百 MB如果单个文件压缩后比原始波形还大说明打包时可能用了不当的存储模式先确认磁盘空间再解压。3. 读懂振动文件的信息结构通道、转速与标签映射3.1 数据文件的一般格式与读取方式齿轮箱振动数据最常见的存储格式是 CSV 和 MAT 两种。CSV 适合快速预览MAT 适合保留采样率、触发模式等元信息。无论哪种先读文件头几行确认列名和单位不要直接全量读入。如果是 CSV典型结构是时间戳、三轴加速度和转速import pandas as pd df pd.read_csv( gearbox/raw/ch01_broken_tooth_acc.csv, skiprows2, # 跳过前两行说明 names[t_ms, acc_x, acc_y, acc_z, rpm], ) print(df.head())这里的skiprows参数是为了跳过采集软件自动生成的文件头。实际文件头行数不固定先打开文件看一眼再决定skiprows值一上来就read_csv翻车的原因多半是表头里混入了设备编号、采样率说明等非数据文本。names参数用于显式指定列名防止文件里的通道名称带斜杠或中文导致后续引用麻烦。如果是 MAT 文件用scipy.io读取from scipy.io import loadmat mat loadmat( gearbox/raw/ch02_bearing_pitting.mat, squeeze_meTrue, # 去掉单元素维度让数组维度更直观 ) data mat[vibration] # 具体键名以文件说明为准 fs mat[fs] # 采样率单位 Hz rpm mat[rpm] # 当前工况转速squeeze_meTrue会把(1, N)变成(N,)处理单通道数据时能省去不少reshape的麻烦。需要注意MAT 文件里不同采集模块对振动数组的存放方向不一样有的按行存、有的按列存。读取后先看一眼data.shape再决定后续要不要转置这一步错了后面所有窗口切分和频谱计算都会跟着翻车。3.2 工况与故障标签的映射规则标签是这类数据里最容易出问题的地方。常规做法是每个文件对应一种工况文件名里带故障缩写例如health、broken_tooth、wear、bearing_pitting。但部分数据的采集周期较长一个文件里会连续跑多种负载需要靠内部的分段标记来切标签。我拿到数据后第一件事是把所有文件名和对应工况整理成一张表文件名片段齿轮/轴承状态载荷区间备注health_1800正常磨合满载用于基线数据broken_tooth_1200单齿断裂半载断齿特征集中在啮合频率边带wear_2400齿面均匀磨损满载早期磨损特征弱注意信噪比bearing_pitting_1800轴承外圈点蚀半载特征频率与转频无关需包络谱整理这张表的目的是建立编码到物理状态的映射。许多数据包的标签缩写并不统一比如PT可能是 pitting点蚀也可能是 partial tooth部分断齿不查元数据就开跑等模型训练完才发现标签装反了时间就全浪费了。3.3 采样率与转频对齐决定窗口怎么切齿轮故障诊断里采样率不是越大越好而是要和转频对齐。常见采集系统的采样率在 20 kHz 到 51.2 kHz齿轮啮合频率一般在几百赫兹到几千赫兹奈奎斯特约束只是底线。真正影响特征提取的是每转采样点数采样率 25.6 kHz 下转速 1200 r/min 对应转频 20 Hz每转约 1280 点转速 2400 r/min 时每转只有 640 点。窗口长度如果固定看采样率而不看转速不同工况下同一窗口覆盖的转数不同频谱特征就不具备可比性。先做一次全数据集的采样率一致性检查for f in raw_files: tmp pd.read_csv(f, nrows1000) ts tmp[t_ms].to_numpy() fs 1000 / np.mean(np.diff(ts)) print(f.split(/)[-1], f{fs:.1f} Hz)np.diff(ts)算相邻时间戳差均值倒数乘 1000 就是实际采样率的粗略估计。出现不同文件的采样率差异超过 1% 时要先按实际采样率重采样或者干脆按每转采样数统一截取别指望模型自己学会这个偏移它在频率轴上会造成谱峰位置的系统性漂移。4. 预处理流水线把原始振动切成模型能吃的固定长度样本4.1 去均值、去趋势别把直流分量当故障特征齿轮箱原始振动信号中加速度计的偏置、安装预紧力带来的直流分量都会叠加在信号上。直接对这样的信号做 FFT零频附近会出现一个很高的直流峰还会压低其他频率分量的相对幅度不利于后续特征提取。第一步是逐段去均值和去趋势import numpy as np from scipy import signal x df[acc_x].to_numpy().astype(np.float64) x x - np.mean(x) # 去直流 x signal.detrend(x, typelinear) # 去掉线性趋势项detrend的typelinear对线性漂移做最小二乘拟合后减去比只去均值更稳。处理完这步信号的均值应该接近 0从时域波形上看基线不再上下倾斜。如果还看到明显的台阶状跳变那多半是采集过程里发生了量程切换这种段落在切窗前应该直接丢弃。4.2 用包络谱定位轴承故障特征频率轴承类故障的冲击成分在时域上表现为周期性窄脉冲直接做 FFT 会被齿轮啮合成分和背景噪声盖住。常规做法是先做 Hilbert 变换提取包络再对包络做 FFT得到包络谱这样能把冲击特征从调制边带中翻出来from scipy.signal import hilbert analytic hilbert(x[:8192]) env np.abs(analytic) # 包络信号 freqs, spec signal.welch( env, fs25600, nperseg4096, noverlap2048, )hilbert返回解析信号取模得到包络。welch用 Welch 平均周期图法做包络谱比直接np.fft.rfft方差更小。nperseg设成 4096 时频率分辨率约 6.25 Hz足以分辨转频相近的轴承故障特征频率noverlap取一半保证加窗后信息不丢失。对应轴承包络谱上的特征频率例如外圈故障频率通常是转频的若干倍具体倍数取决于滚珠数和接触角由数据包说明文件给定。4.3 滑动窗口切分与标签生成按文件划分而不是按窗口乱切监督训练需要把长序列切成样本。窗口长度取多少取决于你要识别什么故障。断齿故障的特征在啮合频率及其边带窗口至少要覆盖 3 到 5 个齿轮轴转周期轴承故障的周期冲击间隔跟转频弱相关但窗口太长会把非平稳段卷进来。通用做法是取固定点数加滑动步长def make_windows(sig, win4096, stride2048): n len(sig) parts [] for i in range(0, n - win, stride): parts.append(sig[i : i win]) return np.stack(parts) xw make_windows(x, win4096, stride2048) label 1 # 1 表示断齿故障0 表示健康 y np.full(len(xw), label)代码里的win是窗口点数stride是步长两者共同决定样本数和信息冗余量。win4096在 25.6 kHz 采样率下约 0.16 秒覆盖多转信号stride2048是 50% 重叠常用在故障分类任务中样本量足够的同时不算过度冗余。步长大于窗口会漏掉故障瞬态步长过小会让相邻样本高度相关成为隐性数据泄漏。注意切窗口时一定要先按原始文件分组再做窗口划分。同一个文件的相邻窗口来自同一段连续振动如果同时落在训练集和测试集验证分数会虚高到失真这类数据泄漏是工业诊断建模里最隐蔽的一个坑。窗口切完后按 z-score 做标准化mu xw.mean(axis1, keepdimsTrue) std xw.std(axis1, keepdimsTrue) 1e-8 xw_norm (xw - mu) / std标准化按窗口独立计算而不是按整个文件计算。齿轮箱运行过程中载荷波动会让不同窗口的均方根值差好几倍按整个文件归一化会让大振幅样本主导训练按窗口归一化则保留形态特征、去掉幅值差异。1e-8是防止静音段标准差为零出现除零错误。5. 数据使用避坑记录编码乱码、伪加密与标签错位的排查5.1 文件名乱码导致预处理脚本直接报 FileNotFoundError现象解压后代码里写好的文件名对不上目录列表里全是乱码字符脚本报找不到文件。原因zip 打包在 Windows 下用的是本地编码 GBK解压环境是 UTF-8。Python 的zipfile模块在旧版本里不支持 GBK 文件名解码解压后文件名变成非法字符串。解决在解压阶段处理不要事后重命名。命令行用unzip -O gbk或7z x -ocp936如果已经解压出乱码文件用 Python 读原始压缩包重新解压一遍并指定编码解码with zipfile.ZipFile(gearbox_fault_data.zip) as zf: for info in zf.infolist(): name info.filename.encode(cp437).decode(gbk) zf.extract(info, gearbox/raw)cp437是 zip 归档内部使用的默认文件名编码先还原成原始字节再按 GBK 解码成正确中文。5.2 伪加密包耗尽耐心解锁工具反复提示密码错误现象unzip每次都要密码试遍常见口令都不对数据包躺在目录里用不了。原因zip 头部的加密标志位被置位但实际数据段没有加密属于打包工具生成的伪加密标记。部分软件的“压缩并加密”流程里文件属性写入失败就会留下这种半加密状态。解决绕开unzip改用 7-Zip 无口令解压去掉-p参数直接执行7z x。它遇到伪加密文件时往往能直接解出原始数据。确认是伪加密后可以顺手zip -d删除加密标志位或者重新打一个无加密包避免团队里其他人再踩同一个坑。5.3 通道顺序与标签错位模型训练完了才发现装反现象多通道数据读取后把第二列当 x 向振动、第一列当 y 向振动模型在测试集上表现不错但解释特征时发现故障频率对不上。原因不同采集设备的通道排列并不统一有的按 x、y、z 排列有的按振动、转速、键相排列文件名里又没有明确标注。解决习惯性先读元数据文件。解压后把meta/里的通道定义拿出来和真实数据做一次相关性检查x 向与 y 向的振动相关性通常不高转速通道有稳定的锯齿形周期。用代码确认后再定列名映射比肉眼看文件头可靠得多。5.4 重采样还是原始采样采样率不一致导致频谱翻车现象多个工况文件拼在一起训练频谱上的啮合频率峰值位置忽左忽右特征提取结果不稳定。原因现场采集时连续记录和数据触发记录混用部分文件的采样率是 25.6 kHz部分被系统自动降到了 12.8 kHz按同一个fs算频率轴谱峰位置自然偏移。解决在前面做采样率一致性检查时发现fs不一致就统一重采样到目标采样率再切窗不要靠模型自适应from scipy.signal import resample_poly fs_target 25600 rat fs_target / fs_actual xr resample_poly(x, uprat.numerator, downrat.denominator)resample_poly用有理数比率重采样避免浮点倍率造成的微小偏差。重采样后同步更新fs_target供后续频谱计算用。5.5 时间戳不连续别把丢段当静态数据现象绘制时域波形时发现中间有整段缺失或者时间戳间隔突然增大到正常值的几倍但信号幅值没有异常。原因采集软件在磁盘写入繁忙时丢包或者上位机触发记录时丢段文件里保存的是拼接时间戳。解决按时间戳连续性检查数据把间隔大于正常值 1.5 倍的段切成独立样本不要在丢段处跨着切窗口。如果数据包里带键相信号优先用键相做角域重采样把时域信号从等时间间隔变成等角度间隔这样更贴合齿轮箱的旋转周期特性。6. 上线前先用 20 分钟验证数据可用性一段基线诊断脚本与其等整个预处理管线跑完再看效果我习惯先抽一段数据用最小脚本验证故障特征是否存在于信号中。齿轮断齿最典型的特征是啮合频率两侧出现边带间隔等于所在轴的转频。用一段短脚本就能把这个特征翻出来import numpy as np from scipy.signal import welch def check_sideband(x, fs, f_mesh, f_rpm): f, P welch(x, fsfs, nperseg8192, noverlap4096) tol f_rpm * 1.5 idx np.where(np.abs(f - f_mesh) tol)[0] if len(idx) 2: print(啮合频率附近点数不足请核对参数) return center idx[np.argmax(P[idx])] side_l np.argmax(P[max(0, center - 6):center]) max(0, center - 6) side_r center np.argmax(P[center 1 : center 7]) 1 if P[side_l] P[center] * 0.15 or P[side_r] P[center] * 0.15: print(发现边带特征存在轴频调制迹象) else: print(边带能量低需结合包络谱进一步判断) check_sideband(x, fs25600, f_mesh3400, f_rpm25)f_mesh是预期齿轮啮合频率等于齿数乘转频f_rpm是轴转频。边带幅值达到中心峰 15% 以上时说明调制明显数据值得继续投入做全套特征工程。如果这步跑出来边带全是平的先别急着改模型回头检查标签映射和通道选择很可能是拿错了文件或把正常齿轮的数据当成了故障样本。我自己第一次跑这类数据时直接全量切窗训练验证集准确率好到不敢信后来逐文件核对才发现相邻窗口重叠太多同一段振动既进了训练集也进了测试集典型的泄漏问题。从那以后我所有的处理步骤都坚持按文件分组、按文件切窗并保留原始压缩包做对照。这批数据值不值得投入20 分钟的特征探针比跑完整个深度学习模型再后悔要划算得多。希望帮到你。本文还有配套的精品资源点击获取
上一篇/下一篇内容由系统自动关联
返回资讯列表 →