ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

齿轮磨损诊断:振动信号边频带与包络解调实战解析

齿轮磨损诊断:振动信号边频带与包络解调实战解析 简介这是一份针对机械传动系统齿轮磨损故障诊断的完整研究资料适合机械工程、故障诊断与状态监测领域的研究人员和技术人员。内容以论文复现为核心系统阐述了齿轮磨损机理及动态响应特征涵盖Archard磨损模型计算齿面磨损深度、势能法求解时变啮合刚度、磨损等效为齿廓偏差并建立齿轮传动动力学模型等关键步骤并通过振动信号提取啮合频率边带特征构造了四个磨损诊断指标。压缩包内共有1个docx文件大小约60KB文件里附有完整的Python仿真代码及逐段解释可帮助读者理解从理论建模到数据分析的全流程并直接应用于齿轮箱状态监测系统的设计与故障诊断。目前已有75人学习该资源对于想深入掌握基于振动信号的齿轮磨损诊断方法并落实到工程实践的人员具有较高的参考价值。1. 齿轮磨损为什么非盯振动信号不可动态响应特征藏在频谱细节里齿轮磨损故障的振动响应最反常的一点是齿面坏到什么程度并不直接画在频谱上而是通过调制和边频带结构体现出来的。同一个齿轮箱健康状态和磨损状态在时域波形上可能只差一点点RMS但啮合频率两侧的边频带能量早就悄悄翻倍了。研究齿轮磨损的动态响应特征、再把特征转成可计算的诊断指标就是这套状态监测系统的核心逻辑。本文面向做设备健康管理和预测性维护的工程师从频域特征、指标设计、Python代码到现场踩坑把这条链路完整讲清楚。2. 齿轮磨损的动态响应特征频域边频带与共振冲击怎么读2.1 啮合频率与谐波均匀磨损最先改变的频域地标齿轮副运转时齿面周期性啮合产生一个稳定的频率分量叫啮合频率数值等于齿数乘以转频f_z z · f_r。比如齿数30、转频20Hz啮合频率就是600Hz它的2倍频、3倍频也会以一定幅值出现在频谱里。做齿轮诊断的第一步永远是先按公式把啮合频率算出来然后在这个位置建立观察窗口。齿面均匀磨损时接触刚度下降、啮合冲击变大直接表现就是啮合频率及其二三次谐波的幅值上升而且谱峰底部会明显变宽——这是能量向邻近频率扩散的迹象。我一般习惯同时看前3阶谐波的幅值和比单看基频稳定因为不同负载下基频幅值波动很大而谐波能量和的趋势性更好。这里有个关键参数要提前定频率分辨率df fs / NN是FFT点数。想看清啮合频率旁边的边频带必须保证频率分辨率能分辨转频间隔。比如转频20Hz采样时长至少要0.5秒分辨率才能到2Hz我一般取1秒以上让df小于1Hz。这是后面所有频域指标的地基。2.2 边频带调制点蚀与断齿在频谱里的签名不同齿面出现局部缺陷后这个缺陷每转一圈进入啮合一次相当于对啮合振动做了一次周期性幅度和相位调制频谱上就会出现以啮合频率为中心、以故障轴转频为间隔的一簇边频带。点蚀早期边频带比较矮但分布对称到剥落和断齿阶段边频带数量变多、幅值抬高甚至出现多阶间隔谐波。均匀磨损和局部缺陷的边频带长相不一样这是个重要判断点。均匀磨损的齿面压力波动宽而浅边频带家族整体抬高但不一定有清晰的等间隔谱线点蚀和断齿则是典型的等间隔谱线族间隔就是所在轴的转频。我实际处理数据时会先测出转频、画出边频带间隔直方图确认间隔是否等于某根轴的转频再判断故障在哪根轴上。从诊断指标设计的角度看边频带能量比SBER是比单看啮合频率幅值更早报警的指标原因后面第三章会展开。现场做趋势监测时建议把啮合频率中心频率设成可跟随转速浮动而不是固定在某条谱线上否则转速稍有变化指标就跑偏。2.3 高频共振区与时域冲击早期故障的最后一道防线齿轮故障产生的冲击力会激起齿轮副和箱体的高频固有频率时域波形里表现为短促的衰减振铃持续几毫秒到十几毫秒。这个振铃的频段通常远高于啮合频率可能落在2kHz到10kHz需要用带通滤波把这段共振频带单独切出来再观察能量变化。处理这类信号最常用的手法是包络解调先对带通滤波后的信号做Hilbert变换取包络再对包络做FFT得到的是故障轮所在轴的转频及其谐波。包络谱的好处是把高频共振里的冲击信息解调到低频段频谱干净、容易看。早期点蚀阶段原始频谱里啮合频率幅值几乎没变化但包络谱里转频谐波已经抬头了。所以我的诊断习惯是分两步走宽频段上看啮合频率和边频带能量判断整体磨损水平高频共振区做包络谱定位是哪根轴的局部缺陷。这两步信息互补单纯看一段频谱经常漏诊。3. 诊断指标怎么搭才不虚从时域RMS到边频带能量比3.1 时域三件套RMS管退化趋势、峭度管早期冲击、峰值因子管局部缺陷时域指标里面RMS是最基础的公式就是信号平方均值的开方。它的物理意义是振动能量水平齿面均匀磨损导致啮合冲击增大RMS会稳定抬升所以它适合做长期退化趋势线。但RMS对早期局部缺陷不敏感因为一次点蚀冲击对整体能量的贡献很小可能被背景噪声淹没。峭度是四阶中心矩除以二阶矩平方高斯分布信号理论值是3。局部缺陷产生冲击后信号分布尾部变重峭度会明显大于3。一个常用判断是峭度超过4就要警惕超过8基本可以确认存在强烈冲击。但峭度的坑在于磨损从局部扩展到多点接触后冲击变得连续峭度反而会回落这个现象不是算法错了是物理过程变了后面避坑章专门说。峰值因子是峰值除以RMS逻辑和峭度类似也是早期冲击敏感型。三者组合起来看才有意义RMS看长期趋势峭度和峰值因子看早期预警配合使用能覆盖整个磨损周期。3.2 频域指标啮合频率幅值和边频带能量比谁更早报警频域里最直接的指标是啮合频率幅值但它的绝对幅值受转速、负载、传感器安装刚度影响太大。同一个齿轮箱负载从50%变到100%啮合频率幅值可能差出一倍这个波动比磨损带来的变化还大所以单看幅值很容易误报。更稳的是边频带能量比SBER我习惯定义为以啮合频率为中心、±k倍转频带宽内的总能量去掉中心主峰能量后占整个窄带能量的比例。k一般取3到5。局部缺陷一出现调制就会把能量从中心主峰挤到边频带SBER会快速抬升而且它是一个比值负载变化对中心峰和边频带的影响方向一致比值相对稳定。这是我做过多次现场验证后留下来的主诊断指标。另一个常用指标是边频带间隔的等间隔性检验。如果提取出的边频带谱线间隔都等于某根轴的转频基本可以锁定故障就在这根轴对应的齿轮上。这个指标不适合做趋势监测但非常适合做故障定位。3.3 从指标到判定基线归一化、加权评分与三级报警有了特征还得有判定逻辑才能叫状态监测系统。我一般先采集设备健康状态下的数据建立基线baseline包含RMS、峭度、峰值因子、SBER四个值。运行期间每个特征算一个相对变化率ratio (current - baseline) / baseline或者直接用current / baseline前者适合特征本身接近零的情况。然后做加权评分权重根据设备工况和故障模式调。默认的一组是SBER权重0.3RMS权重0.3峭度0.2峰值因子0.2。评分超过1.5倍预警、超过2倍报警具体倍数用正常波动范围校准。如果历史数据积累得多用xgboost之类模型做多特征分类也行但前提是把上面这些物理特征提取好直接拿原始FFT谱喂模型的实践效果通常不如特征工程加阈值来得稳定。4. 用Python写一套齿轮磨损状态监测系统仿真信号、特征提取与诊断全代码4.1 生成齿轮磨损仿真信号采样频率、齿数与调制参数怎么定下面是完整可跑的示例代码先造一段带磨损特征的齿轮振动信号。调试算法和标定阈值阶段仿真数据是必需品正式上线时把数据源换成现场采集的真实信号即可。import numpy as np def generate_gear_signal(fs25600, duration2.0, z30, fr20, am0.10, fm_index0.02, noise_level0.05, impact_amp0.0): 生成带磨损趋势的齿轮啮合振动信号 fs : 采样率(Hz)25600可覆盖啮合频率的前3阶谐波 duration : 采样时长(s)至少包含1秒保证频率分辨率1Hz z : 齿数 fr : 转频(Hz)现场用转速计测 am : 幅值调制深度齿面磨损越重越大(0.05~0.6) fm_index : 调频指数反映载荷波动磨损后增大 noise_level : 背景噪声标准差 impact_amp : 局部缺陷冲击幅值0表示无局部缺陷 t np.arange(0, duration, 1 / fs) fm z * fr # 啮合频率 envelope 1 am * np.cos(2 * np.pi * fr * t) phase 2 * np.pi * fm * t fm_index * np.sin(2 * np.pi * fr * t) x envelope * np.sin(phase) if impact_amp 0: step int(fs / fr) # 每个转频周期一个冲击 n np.arange(step) for i in range(0, len(x) - step, step): # 4000Hz共振振铃时间常数5ms模拟点蚀冲击 kernel impact_amp * (0.8 0.4 * np.random.rand()) kernel * np.exp(-n / (0.005 * fs)) kernel * np.sin(2 * np.pi * 4000 * n / fs) x[i:i step] kernel x noise_level * np.random.randn(len(t)) return x, fm, fr x, fm, fr generate_gear_signal(impact_amp0.6, am0.3) print(f啮合频率: {fm:.1f} Hz, 信号点数: {len(x)})这段代码里的幅值调制和频率调制是齿轮振动最经典的物理模型。磨损以后齿面载荷波动变大所以am从健康状态的0.05调到0.3甚至更高局部缺陷则用4000Hz衰减振铃模拟每隔一个转频周期出现一次。这里的4000Hz不是随便写的它模拟的是齿轮箱固有频率现场可以先扫一段谱确认共振峰在哪再把代码里的频率改掉。4.2 特征提取函数RMS、峭度、峰值因子和边频带能量比信号拿到手之后核心工作是把特征算出来。下面的函数可以同时处理一整段信号也可以把长信号切成0.5到1秒的片段分别计算再取平均后者更适合现场做趋势监测。from scipy.stats import kurtosis def extract_time_features(x): 时域特征RMS、峰值因子、峭度 rms float(np.sqrt(np.mean(x ** 2))) peak float(np.max(np.abs(x))) cf peak / rms kurt float(kurtosis(x, fisherFalse)) # 高斯信号约等于3 return rms, cf, kurt def extract_freq_features(x, fs, fm, fr, n_side5): 频域特征啮合频率幅值、边频带能量比(SBER) win np.hanning(len(x)) X np.fft.rfft(x * win) freqs np.fft.rfftfreq(len(x), 1 / fs) df freqs[1] - freqs[0] center_idx int(np.argmin(np.abs(freqs - fm))) mesh_amp float(np.abs(X[center_idx]) * 2 / len(x)) half_span int(round(n_side * fr / df)) # ±5倍转频的带宽 band np.arange(center_idx - half_span, center_idx half_span 1) energy_band float(np.sum(np.abs(X[band]) ** 2)) main_span int(round(1.0 / df)) # 主峰宽度取±1Hz main np.arange(center_idx - main_span, center_idx main_span 1) energy_main float(np.sum(np.abs(X[main]) ** 2)) sber (energy_band - energy_main) / (energy_band 1e-12) return mesh_amp, sber rms, cf, kurt extract_time_features(x) mesh_amp, sber extract_freq_features(x, fs25600, fmfm, frfr) print(fRMS{rms:.3f} 峰值因子{cf:.2f} 峭度{kurt:.1f} SBER{sber:.3f})插一句代码规范函数命名用动词开头、参数全部显式传入避免后面接真实数据时还要猜上一级变量。这里的main_span表示主峰宽度按±1Hz取因为FFT频率分辨率本身约1Hz把主瓣能量算进边频带会污染SBER。注意窗函数会让幅值偏小如果你关心绝对幅值需要除以np.mean(win)修正我们用的SBER是比值这项修正不影响结论。4.3 综合诊断判定从特征到报警等级有了特征和基线就用一个诊断类来输出状态。基线来自设备健康时采集的三组以上数据取平均不要用出厂说明书上的经验值。class GearDiagnoser: def __init__(self, baseline, warn_ratio1.5, alarm_ratio2.0): self.base baseline # {rms:, cf:, kurt:, sber:} self.warn_ratio warn_ratio self.alarm_ratio alarm_ratio def diagnose(self, feats): ratios {} for key in self.base: ratios[key] feats[key] / self.base[key] score (0.3 * ratios[sber] 0.3 * ratios[rms] 0.2 * ratios[kurt] 0.2 * ratios[cf]) if score self.alarm_ratio: return 报警, score elif score self.warn_ratio: return 预警, score return 正常, score baseline {rms: 0.12, cf: 3.2, kurt: 3.1, sber: 0.25} diag GearDiagnoser(baseline) feats {rms: rms, cf: cf, kurt: kurt, sber: sber} status, score diag.diagnose(feats) print(f诊断状态: {status}, 综合评分: {score:.2f})这里加权评分用的是乘法比值不是绝对差值。所以基线数据必须可靠建议取设备稳定运行3到7天的数据剔除大修、启停、极端负载时段。报警阈值初始设1.5倍预警、2倍报警跑两到四周后根据误报率回调。5. 状态监测系统落地避坑测点、转速、阈值与线缆的五道坎5.1 同一个设备两次采集结果差三成先别怀疑算法现场最容易翻车的不是算法是测点不统一。现象是上午下午测同一台减速机RMS差30%以上频谱形态看起来也像两台设备。原因多半是磁座没吸紧、传感器从轴承座挪到了箱体薄壁、或者安装方向偏了。振动加速度传感器对接触刚度极其敏感磁座一松动高频响应立刻衰减。解决方法是把测点固定下来写在采集流程里优先选轴承座正上方的刚度较大平面清理表面后胶粘或螺栓固定避免手持和磁座。每次采集前记录转速、负载、测点编号。如果条件允许给传感器做固定安装趋势监测的价值就在数据的可比性上。5.2 转速波动让频域特征漂移别用固定谱线追峰值现场设备转速很少恒定。转频从20Hz掉到19.5Hz啮合频率跟着从600Hz变到585Hz如果你在频谱里用固定600Hz这条谱线取值幅值会大幅跳变诊断指标看着像故障其实是转速漂了。更隐蔽的是采样时长不是转轴的整数倍时FFT泄漏会把谱峰磨平边频带能量被污染。常见做法是加键相传感器或转速计按整周期截取信号保证每个样本都包含整数圈再进阶一点可以做计算阶比跟踪把时域信号重采样到角度域。如果暂不具备这些条件至少在用FFT前把信号按估计转频重采样或者把特征提取的频带中心改成实时转速乘以齿数而不是固定值。5.3 峭度在中后期不升反降不是代码bug我见过不止一次有人看到峭度曲线爬升到高点后回落第一反应是特征提取写错了。实际上均匀磨损从局部扩展到多点后冲击变得越来越连续信号分布趋近于平稳随机过程峭度自然回落。这是物理现象不是系统故障。处理办法是不要用峭度做唯一报警指标尤其磨损后期。我的逻辑是早期看峭度和峰值因子中期看SBER后期看RMS趋势。如果只揪住峭度不放后期会把严重磨损判断成设备变好了这个误判比漏报更危险。建议在诊断代码里对峭度做单边预警数值从高点回落30%以上时改由SBER主导评分。5.4 低速重载设备的报警阈值反复横跳要做区间分箱低速重载齿轮箱的振动信号能量受负载影响极大负载一变压根传感器读数能跳好几倍固定阈值在这种设备上基本没法用。我早期用统一阈值做的系统在皮带机上误报率接近一半后来改成按转速和负载做区间分箱把转速分成几档、每档单独建基线和阈值整体误报率就降下来了。实际落地时如果负载不方便直接测量可以用电流、扭矩或工艺参数代替最省事的办法是只保留相同工况下的历史数据来建基线比如只取稳定满负荷时段的数据参与阈值计算。5.5 线缆晃动带来的幽灵冲击会让你多修一台好设备最后说一个最玄学的坑传感器线缆没有固定好现场人员走动踩到线缆摩擦产生的脉冲会进入采集通道时域波形看起来和齿轮局部故障冲击几乎一样频谱里也会出现等间隔边频带——我把它叫幽灵冲击。排查时先看信号里冲击间隔是否严格等于转频周期再试着按压线缆或接头如果波形里出现对应变化基本可以断定干扰源在线缆侧。规范做法是使用屏蔽双绞线、线缆沿结构件固定走线、接头处做应力释放。采集系统上线前让现场巡检人员正常走动一圈用这段数据做底噪筛查。数据质量是诊断系统最容易被忽视的环节这一关过了后面算法才谈得上准不准。6. 用合成退化数据验证指标切换点一个半小时的验收方法诊断系统做完先别急着上现场用一组合成退化数据把指标的行为曲线跑出来验证切换点是不是符合预期。方法很简单模拟设备从健康到重度磨损的连续退化过程每隔一个退化等级算一次特征。levels, rms_list, cf_list, kurt_list, sber_list [], [], [], [], [] for level in np.linspace(0, 1, 150): am 0.05 0.35 * level # 磨损加重调制变深 imp 0.8 * np.sin(np.pi * level) # 局部缺陷先出现后扩展 x, fm, fr generate_gear_signal(amam, fm_index0.02 0.04 * level, impact_ampimp) rms, cf, kurt extract_time_features(x) mesh, sber extract_freq_features(x, fs25600, fmfm, frfr) levels.append(level) rms_list.append(rms); cf_list.append(cf) kurt_list.append(kurt); sber_list.append(sber) import matplotlib.pyplot as plt plt.plot(levels, rms_list, labelRMS) plt.plot(levels, kurt_list, labelKurtosis) plt.plot(levels, sber_list, labelSBER) plt.legend(); plt.xlabel(磨损退化等级); plt.ylabel(特征值) plt.show()跑完这段代码你会看到三个典型阶段早期峭度和峰值因子先抬头SBER紧随其后开始爬升RMS最后才明显上升。这验证了前面定的诊断逻辑——峭度做早期预警SBER做中期主指标RMS做晚期确认。我把这套退化脚本当作系统验收用例调权重和阈值前必须先跑一遍曲线指标行为不符合物理趋势坚决不发布。我最早给减速机做这套监测时只用了RMS和固定阈值低速重载工况下天天误报后来改成转速区间分箱、把SBER当成主指标才消停下来。指标切换这个事越早知道越省事希望帮到你。本文还有配套的精品资源点击获取
返回列表