ARTICLE DETAIL

资讯详情

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

阶次分析实战:角度重采样与变速工况振动频谱解析

阶次分析实战:角度重采样与变速工况振动频谱解析 简介压缩包提供了一个基于MATLAB的阶次分析脚本适用于旋转机械振动信号处理、状态监测与故障诊断等场景。核心功能包括转速信号读取、角度重采样以及阶次谱计算配合steptdm相关思路可将时域信号映射到角度域帮助识别齿轮、轴承等部件的周期性振动特征并进一步定位异常阶次。包内仅含1个MATLAB脚本文件体积约2KB代码精简适合作为算法原型、课程设计或教学示例便于读者在此基础上扩展数据接口、绘图与结果保存模块。该资源至今已有998人学习对于正在研究阶次分析、角度重采样或转速计算的工程师与研究生可直接获取可运行的算法骨架并参考注释理解从时间域转换到角度域的关键步骤。整体上这份小体积源码清晰地展示了从转速计算到阶次提取的完整流程能够为设备健康监测、振动源定位与故障诊断提供实用参考也可作为后续开发阶次跟踪工具的基础模块。1. Order_tracing 与阶次分析转速一变频谱就“糊”电机、齿轮箱、泵在升速或降速测试时常规 FFT 频谱会难以辨认转速从 1000 r/min 拉到 6000 r/min 的几秒内转频从 16.7 Hz 漂到 100 Hz啮合频率跟着漂移对整段信号做 FFT 得到的是这些漂移成分的时间平均峰值被抹平拖宽。Order_tracing 这类阶次分析脚本解决的就是这个矛盾由键相脉冲做转速计算把等时间采样重采样成等角度采样再做阶次 FFT横轴从 Hz 换成倍转频的阶次。转速变化从干扰变成可用信息升速、降速、变速工况下的振动成分能逐阶识别旋转机械监测、整车 NVH、电机诊断都会用到。整套流程里最值得调的是重采样角度步长。2. 转速计算与角度重采样先把时间轴换成角度轴2.1 转速计算的输入键相脉冲与累积转角阶次分析的第一步不是处理振动信号而是把转速信号换算成角度基准。常见配置是输入端装一路键相传感器每转 1 个脉冲或增量编码器每转 60 至 100 个脉冲与振动信号同步采集。每个上升沿对应一个固定的机械角度增量键相是 360°编码器是 360/PPR 度。于是脉冲边沿时刻 t_i 与累积角度 θ_i i × 360/PPR 构成一组稀疏但严格单调递增的 (t, θ) 点这就是整个角度重采样的锚点。转速计算的精度直接决定最终阶次谱的质量。假设脉冲间隔有 1% 的抖动单转角度基准就会偏差约 3.6°对 20 阶以上成分的相位影响已不可忽略。实际项目里键相信号线先经过施密特触发放大整形、去除毛刺再从干净的方波上提取边沿时间采集卡建议用计数器通道硬件记录脉冲时刻而不是对低速脉冲做连续采样否则时间分辨率不够。2.2 转速计算的两种路径脉冲平均法与样条求导法转速计算有两条路。第一路把每个脉冲间隔内的转速当作常数RPM_i 60 / (Δt_i × PPR)再把这些值分配到间隔中点。优点是计算量小、抗噪好缺点是单转内转速波动被平均掉而往复压缩机、柴油机这类扭振明显的设备单转内转速可能变化 5% 以上直接用 RPM_i 做角度映射会产生周期性误差。第二路是对 (t, θ) 做函数拟合、再求导得到瞬时转速 n(t) (dθ/dt) × 60/360dθ/dt 单位是 deg/s。这一路能保留转内转速细节。拟合函数建议用 PCHIP保单调分段三次插值它不会产生三次样条那种脉冲间隔突变处的过冲——过冲的 dθ/dt 会算出负转速在重采样时表现为角度倒退。import numpy as np from scipy.interpolate import PchipInterpolator def calc_rpm(tach, ppr1, t_queryNone): theta np.arange(len(tach)) * (360.0 / ppr) # 累积角度 pchip PchipInterpolator(tach, theta) # 保单调三次插值 if t_query is None: t_query tach d_theta_dt pchip.derivative()(t_query) # 角速度, deg/s rpm d_theta_dt * 60.0 / 360.0 # 转成 r/min return rpm逻辑说明先从脉冲序号构造出每个边沿对应的累积角度用 PCHIP 通过全部 (t, θ) 点对拟合结果求导即得任意时刻的角度变化率。t_query 传振动信号的采样时刻序列时得到的 rpm 与振动数据自然对齐后面做阶次谱按时间对齐时不用再插值一次。参数层面ppr 必须与硬件倍频一致编码器 100 PPR 且做了 4 倍频时 ppr400写错直接导致转速翻倍或减半阶次谱上 1 阶会出现在 2 阶或 0.5 阶位置t_query 越密越能体现转速细节但也会把脉冲边沿抖动暴露出来所以工程上通常对 rpm 再做 35 点滑动平均。2.3 角度重采样的步长 steptdm 与每转采样数角度重采样的目标是把等时间间隔的振动信号 x(t) 转换成等角度间隔的 x(θ)。等角度间隔设置多少由步长参数决定。在不少 Order_tracing 脚本里这个步长变量就叫steptdm含义是从时间域数据time-domain data映射到角度域时每一步转过的角度单位是度也有脚本命名成 delta_theta 或 step_deg作用完全相同。每转采样点数 SPR 360 / steptdm它相当于阶次域的采样率直接决定阶次域 Nyquist 频率。steptdm (°)SPR阶次域 Nyquist适用场景2.018090低速粗查、内存受限1.0360180常规齿轮与电机诊断0.5720360含高阶次啮合成分的分析0.251440720阶次追踪图与精密诊断阶次域同样受 Nyquist 制约能表示的阶次不超过 SPR/2。但插值重建在接近 Nyquist 时幅值明显衰减工程上建议让 SPR 大于最大关注阶次的 4 倍。例如重点关注 120 阶steptdm 取 1°Nyquist180是最低标准想留余量就取 0.5°。提示steptdm 越小角度域数据量越大。转速不变时重采样信号长度与原始时域信号长度之比是 SPR×60/(fs×平均转速)对 60 s 长数据做 0.25° 重采样内存开销可能多出 10 倍以上先按关注阶次反推不要无脑取小。2.4 角度重采样的实现路径正问题与逆映射具体实现常见两步走。第一步是正问题在加密的时间网格上计算角度得到足够密的 (t, θ) 采样第二步是逆映射对目标角度序列 θ_target 0, steptdm, 2·steptdm, …反查对应的时间 t_res再对振动信号插值。因为 θ(t) 严格单调递增逆映射用 np.interp 是安全的不必做逐点二分求解。加密网格的疏密是关键。网格间隔应小于最小的脉冲间隔一般按典型脉冲间隔的 1/8 来取网格太粗时逆映射的时间会带着台阶误差先表现为角域波形上出现等间距的锯齿再传导为阶次谱的杂散峰。完整函数实现放到下一章。3. 角度重采样与阶次 FFT完整的最小实现3.1 角度重采样最小实现把上一章的两步路径落成可以直接复制的函数输入是振动信号的原始时间 t 和幅值 x、键相脉冲边沿时间 tach、每转脉冲数 ppr、角度步长 steptdm。import numpy as np from scipy.interpolate import PchipInterpolator def angular_resample(t, x, tach, ppr1, steptdm1.0, grid_factor8.0): if len(tach) 3: raise ValueError(键相脉冲至少需要3个边沿) theta_pulse np.arange(len(tach)) * (360.0 / ppr) pchip PchipInterpolator(tach, theta_pulse) # 1) 加密时间网格计算角度(正问题) dt_med np.median(np.diff(tach)) # 典型脉冲间隔 n_grid int((tach[-1] - tach[0]) / dt_med * grid_factor) t_dense np.linspace(tach[0], tach[-1], n_grid) a_dense pchip(t_dense) # 单调递增 # 2) 目标角度序列: 从0到末角每 steptdm 度一个采样 theta_target np.arange(0.0, a_dense[-1], steptdm) # 3) 逆映射: 角度 - 时间 t_res np.interp(theta_target, a_dense, t_dense) # 4) 振动信号在 t_res 处线性插值 x_res np.interp(t_res, t, x) return theta_target, t_res, x_res逻辑说明函数分四步走。第 1 步用典型脉冲间隔乘上 grid_factor 决定加密密度grid_factor 取 8 意味着在最短脉冲间隔里至少插入 8 个采样点保证逆映射的时间分辨率第 2 步生成等角度网格起点取 0°实际测试时建议把起点改为 tach[0] 对应的角度避免开头处在拟合边界上第 3 步和第 4 步都是 np.interp 线性插值前者用于角度到时间的反查后者用于振动幅值重建。需要留意两个边界t_res 的范围被 tach[0] 和 tach[-1] 包住振动信号开头和结尾各有一个脉冲间隔的数据会被舍弃这正是 2.4 提到的边界效应实际使用可以接受因为后续阶次谱分段时本来也要裁边steptdm 传入浮点数即可函数内部用 np.arange 生成网格末段不足一步的残余角度会被自然丢弃。3.2 阶次 FFT 的横轴换算与幅值标定角度重采样完成后振动信号变成了以角度为自变量的均匀采样序列每转 SPR 个点。阶次 FFT 与普通 FFT 的唯一区别是横轴换算普通频谱用 d1/fs 代表时间采样间隔这里用 d1/SPR 代表“每个采样点转过 1/SPR 转”FFT 频率轴的单位就是 转/采样点再乘上 SPR 得到 转/转也就是阶次。def order_fft(x_res, steptdm1.0): x_res x_res - np.mean(x_res) # 去直流 spr int(360.0 / steptdm) win np.hanning(len(x_res)) xw x_res * win spec np.fft.rfft(xw) / np.sum(win) * 2.0 # 单边谱 order_axis np.fft.rfftfreq(len(x_res), d1.0/spr) return order_axis, np.abs(spec)参数说明spr 必须与重采样时的 steptdm 严格对应函数内部重新算一遍是为了防止调用方传错除以 np.sum(win) 是幅度恢复乘 2 是单边谱把负频率能量并回来。阶次分辨率 ΔOrder 1/(总转数)10 s 内从 1200 r/min 升到 4800 r/min 约有 500 转ΔOrder ≈ 0.002足够分开相邻 0.1 阶的峰值。3.3 Order tracing阶次追踪图的窗口切分单个阶次谱只反映整段数据的平均状态。现场诊断更需要看阶次随时间或转速的演变这就是阶次追踪图——把角度域信号切成若干固定转数的块每块做一次阶次 FFT按时间堆叠成二维的阶次-转速图。块内转数是一个关键权衡块越长阶次分辨率越高但时间轴被抹得越粗升速快的工况会让阶次轨迹变斜变糊。def order_colormap(theta, x_res, steptdm1.0, blk_rev8, ovlp0.5): spr int(360.0 / steptdm) blk int(blk_rev * spr) hop max(1, int(blk * (1 - ovlp))) frames, centers [], [] win np.hanning(blk) for start in range(0, len(x_res) - blk 1, hop): seg x_res[start:start blk] - np.mean(x_res[start:start blk]) spec np.fft.rfft(seg * win) / np.sum(win) * 2.0 frames.append(np.abs(spec)) centers.append(theta[start blk // 2]) # 块中心角度 return np.array(frames), np.array(centers)说明ovlp0.5 表示相邻块重叠一半可以缓解窗函数引起的幅值调制blk_rev 建议按转速上升率选择转速变化率超过 100 (r/min)/s 时 blk_rev 不要超过 8否则单个块内转速跨度大于 100 r/min阶次峰会被展宽。输出 frames 的形状是 块数 × 阶次点数绘图时把 centers 换算成转速作为 x 轴更直观。4. 阶次分析实战参数设定、转速截取与故障排查4.1 先定最大关注阶次再反推 steptdm阶次分析的第一步不是打开代码而是确定最大关注阶次。齿轮箱场景里啮合阶次等于齿数边带是啮合阶次±1 或±2轴承故障的特征频率除以转频通常是小数阶次比如 3.57而缺陷冲击会激励到几十阶以上的宽带成分。把关心的最高阶次记作 O_max按 SPR ≥ 4×O_max 反推O_max60 时 SPR≥240steptdm≤1.5°保险取 1°O_max180 时 steptdm 必须取 0.5°以下。还要考虑分析转速区间。低速时高阶次的物理频率很低需要更长的时间窗才够做 FFT所以低速段通常只分析中低阶次高速段物理频率高阶次谱更容易受抗混叠滤波器截止频率的约束。如果数据是固定采样率采集的重采样前最大物理频率不能超过 fs/2换算成阶次就是 O_max fs / (2 × n_max/60)。4.2 转速段的选取与转速曲线检查角度重采样只对转速持续变化的区段有意义匀速段的振动信号用普通 FFT 即可不必引入插值误差。处理前先画出 rpm 曲线人工确认三件事脉冲是否从头到尾连续、是否有明显跳变、是否存在长时间停转段。建议按下面的流程截取从 rpm 曲线中删除转速为负或接近零的区间单向旋转设备出现负转速通常是丢脉冲或插值过冲。删除转速变化率 dRPM/dt 超过设备物理上限的区段比如 0.1 s 内转速突变超过 200 r/min 的片段。把剩余区间按连续单调段拆分每段单独做重采样与阶次分析避免把一次升速和一次降速混在同一个角度序列里。4.3 键相脉冲丢失、抖动与角度基准修复脉冲丢失是现场最常遇到的问题。判断方法很简单计算相邻脉冲间隔若某个间隔超过局部中值的 3 倍说明中间丢了一个或多个脉冲。只丢一个且转速变化平缓时可以在两个正常边沿的中点补一个假想边沿并在代码里标记该点为插值点、不参与 PCHIP 拟合的导数约束连续丢失超过两个脉冲不建议修补直接丢弃该段数据否则角度基准会整体偏移。脉冲抖动比丢失更难察觉。编码器安装偏心、键相传感器对齿槽敏感都会让边沿时间出现周期性抖动反映在重采样信号里就是固定阶次的宽峰。缓和手段是 2.2 里提到的 rpm 滑动平均以及重采样加密网格时把 grid_factor 从 8 提高到 12让逆映射误差低于单个角度步长的 1/10。4.4 插值阶数、窗函数与边界效应重采样时振动幅值重建用线性插值还是三次插值取决于信号性质。连续平稳的振动分量齿轮啮合、不平衡用线性插值就够误差在 1% 量级轴承早期故障的冲击成分是宽带的线性插值会削平冲击峰值建议用 InterpolatedUnivariateSpline(k3) 做三次插值但同时要对接角域信号做一次带通避免插值过冲放大高频噪声。阶次谱的窗函数必不可少。角度域信号首尾不连续不做窗直接 FFT阶次峰两侧会出现一整排泄漏旁瓣。逐段分析时对每块加 Hann 窗并重叠 50%既压低旁瓣又保证时间连续性。边界上PCHIP 在首尾脉冲段外的外推误差很大重采样结果前后各一个脉冲间隔要裁掉再进 FFT。症状原因处理对策阶次峰宽、拖尾严重转速误算或脉冲抖动修正 pprrpm 做滑动平均高频阶次幅值明显偏低steptdm 过大接近 Nyquist减小 steptdmSPR≥4×O_max出现小数假阶次重采样时间轴台阶误差加密网格提高 grid_factor阶次轨迹中段分叉升速过程扭矩突变截去突变段或减小 blk_rev5. 用合成信号验证角度重采样与阶次分析的完整链路合成信号是验证阶次分析代码最快的方法。构造一组已知阶次、已知转速曲线的信号跑完转速计算、角度重采样、阶次 FFT 全流程核对输出阶次和幅值能暴露 80% 以上的实现错误而且不依赖现场数据。fs, T 25600.0, 10.0 t np.arange(0, T, 1/fs) rpm 1200 (4800-1200) * t / T # 线性升速 rpm 25 * np.sin(2*np.pi*2*t) # 叠加2Hz转速波动 theta_deg np.cumsum(rpm / 60.0 * 360.0) / fs # 真实累积角度 x (1.00*np.sin(2*np.pi*1.0 *theta_deg/360) 0.60*np.sin(2*np.pi*3.5 *theta_deg/360) 0.30*np.sin(2*np.pi*23.0*theta_deg/360)) # 已知阶次信号 edge_angles np.arange(0, theta_deg[-1], 360.0/60) tach np.interp(edge_angles, theta_deg, t) # ppr60的脉冲时刻逻辑说明前三行构造真实转速其中叠加的 25 r/min 转速波动专门用来检验转速计算是否跟得上细节信号含 1 阶、3.5 阶小数阶次和 23 阶高次成分直接验证阶次谱的分辨能力。生成键相脉冲时用 np.interp 从真实角度反查时间模拟 PPR60 的编码器输出这一过程假设转速完全已知后续噪声只会来自处理链路本身。跑完 calc_rpm、angular_resample、order_fft 后按三条标准验收第一重采样后对整段信号做阶次 FFT峰值应精确落在 1.0、3.5、23.0 阶误差小于 0.01 阶第二幅值比应接近 1:0.6:0.3偏差超过 5% 说明窗函数或插值有问题第三用 2.2 的 calc_rpm 与真实 rpm 对比平滑后的最大误差应小于 0.1%。峰值位置对而幅值不对优先查窗函数归一化和直流分量峰值位置偏移先查 ppr 是否与边沿生成一致再查逆映射的 t_dense 是否够密。整条链路通过后把同样的检查带到现场数据先看 rpm 曲线有无丢脉冲再看角域波形是否等角度均匀最后看阶次谱里 1 阶转频处是否干净。1 阶之外的杂散峰若高于 1 阶幅值的 10%通常是重采样质量问题的信号而不是设备故障。本文还有配套的精品资源点击获取
返回列表