尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
阶次分析从入门到实战:角度重采样与转速计算全流程解析
简介这是一份面向机械振动分析、旋转机械故障诊断及信号处理初学者的阶次分析MATLAB实现包围绕“角度重采样—转速计算—阶次分析”主线展开适合需要理解非平稳转速下振动信号处理方法的工程技术人员。压缩包内共1个m文件即order.m脚本代码量仅2KB整体结构精简可直接运行或作为二次开发基础帮助用户掌握从原始转速信号到角度域重采样最终提取阶次谱的完整计算流程。资源目前已获999人浏览学习具备一定参考热度。通过阅读和运行该脚本读者可以了解Steptdm相关思路在时间域建模与角度域映射中的应用学会根据转速脉冲信号估算瞬时转速、构造等角度间隔采样数据并利用阶次分析识别设备周期性振动分量为进一步研究故障特征频率或设计在线监测算法提供可复用的代码框架与实现参考。1. 从转速波动说起为什么你的频谱图总是“糊”的做旋转机械故障诊断的工程师大概率都见过这个现象设备负荷一变转频从 1490 转/分慢慢爬到 1520 转/分原本尖细的基频峰值像被抹了一层黄油边带杂乱得没法看。传统 FFT 默认信号是平稳的转速一变频率成分在积分窗口内连续漂移能量被摊到好几个频点频谱泄漏直接掩盖了特征。阶次分析就是为解决这个问题而来的它把时域振动信号映射到角度域按转轴的角位置重采样让每一个与转速同步的振动特征都落在整数阶次上。Order_tracing.zip 这类工具包正是把转速计算、角度重采样、阶次谱估计串成一条流水线其中 steptdm 是很多方案里用来从键相脉冲推导瞬时转速的关键脚本。本文写给做行星轮系监测、变转速设备诊断的从业者我会把从脉冲信号到阶次谱的完整链路拆开讲并给出可以直接复制的参数设置和踩坑记录。2. 阶次分析为什么要先做角度重采样原理与选型理由2.1 频谱泄漏与转速波动阶次分析要解决什么问题常规振动采集以固定采样率记录时间信号分析时假设转频恒定。现实中电机启停、负载波动、行星轮系啮合都会让转速产生可观的波动哪怕只有 ±2%在长时间窗 FFT 里基频也会横跨多个频率分辨率单元。举个例子采样时长 10 秒频率分辨率 0.1 Hz转频从 25 Hz 漂到 25.5 Hz基频已经在 5 个频点上滑动幅值被拉低一半以上。更麻烦的是与转速相关的边带、谐波同样在漂窄带包络谱里根本没法区分哪根峰对应哪一阶次。阶次分析把振动信号从等时间间隔采样变成等角度间隔采样。角度域里每转一圈采集固定数量的样本转频在角度域里是恒定周期1 阶所有与转频成整数倍关系的振动特征都会变成固定在 1x、2x、3x 等位置的谱峰。这样即使转速剧烈变化阶次谱也能保持锐利故障特征比如齿轮啮合阶次、行星轮通过频率都能被稳定识别。这是阶次分析相对传统频谱最大的价值也是后续所有重采样工作的出发点。2.2 等时间采样与等角度采样的本质差异等时间采样是在均匀时间间隔上取振动幅值采样率是赫兹等角度采样是在均匀角度增量上取幅值采样率是每转采样点数例如每转 1024 点。两者转换的核心是找到每个角度增量对应的时间位置再对原始振动信号插值。角度采样的密度决定最高可分析阶次类似时域里的采样率而分析总转数决定阶次分辨率类似时域里的时长。实现这个转换的前提是有准确的转角-时间关系工程上通常靠键相传感器或编码器提供每转或每齿的脉冲序列。脉冲之间的时间间隔代表转速变化通过对脉冲时刻做插值和微分就能得到连续转速曲线。这个曲线必须平滑且无相位跳变否则重采样后的信号会引入假的谐波。我见过很多新手直接用线性插值连接脉冲时间点做转速曲线结果重采样后阶次谱上全是毛刺原因就是转速曲线没有做低通平滑把键相齿的加工误差当成了真实转速波动。2.3 用 steptdm 从脉冲序列计算转速曲线的关键逻辑在 Order_tracing.zip 这类包里steptdm 承担的是从键相脉冲时间序列到瞬时转速曲线的转换。它的输入通常是脉冲到达的时间戳数组输出是等时间间隔的转速序列。常见做法是先把脉冲间隔换算成周期再取倒数得到转速。但直接取倒数会得到一个阶梯状转速波形脉冲间隔内的转速是恒定的这与真实连续转速不符。所以 steptdm 通常会用阶数为 1 或 3 的样条对周期序列做平滑插值再微分得到连续转速。我一般会在调用 steptdm 之后做两件事一是打印转速曲线的极差确认没有超出传感器量程导致的突变二是对转速曲线做一次带通滤波截止频率设为最高分析阶次乘以平均转频把高频噪声滤掉。需要注意滤波会引入相位延迟所以要用零相位滤波比如按顺序正向反向各跑一遍否则转速相位错位会让重采样后的阶次谱整体偏移导致阶次显示不准。3. 拿 Order_tracing.zip 跑通阶次分析完整流程与代码解析3.1 数据准备振动信号与键相脉冲信号缺一不可阶次分析需要两路同步采集的数据一路是加速度计或速度传感器的振动信号另一路是键相传感器电涡流、磁电式或光电式输出的脉冲信号。键相信号用于标记轴系每转或每齿的起始位置它的质量直接决定重采样精度。采集时至少满足两点键相通道与振动通道同步采样采样率一致脉冲信号经过整形电路处理边沿陡峭且无抖动。如果现场只有普通转速计输出 4-20 mA 模拟转速信号无法直接给出脉冲时刻那就需要先用硬件做脉冲变换或者改用编码器信号。下面是一个典型的 Python 数据读取流程假设振动和键相信号分别存在两个 CSV 文件里时间戳由采集器统一同步。这里使用 numpy 和 scipy后续重采样也用它们实现。import numpy as np import pandas as pd from scipy.interpolate import CubicSpline # 读取振动信号和键相脉冲信号 # 表头: time, vibration, tacho df pd.read_csv(measured_signal.csv) t df[time].values vib df[vibration].values tacho df[tacho].values # 找出键相脉冲的上升沿时刻 # 阈值设为最大值的一半避免噪声触发 threshold 0.5 * (np.max(tacho) np.min(tacho)) rising_idx np.where((tacho[:-1] threshold) (tacho[1:] threshold))[0] pulse_time t[rising_idx] (t[rising_idx1] - t[rising_idx]) * ( (threshold - tacho[rising_idx]) / (tacho[rising_idx1] - tacho[rising_idx]) ) print(f检测到 {len(pulse_time)} 个脉冲平均转速 {60 / np.mean(np.diff(pulse_time)):.2f} rpm)这里用线性插值精确找到脉冲过阈值时刻是为了减小采样率不够高带来的时间量化误差。如果采样率是 50 kHz一个脉冲上升沿最多有 20 微秒的量化误差对应高速轴转速计算误差可能超过 1%。做行星轮系转速计算时这个误差会直接映射到啮合阶次的相位上所以建议脉冲检测后做一次局部线性修正代码里已经处理了这一点。注意阈值不能设成固定电压值因为键相传感器输出幅值会随转速和间隙变化取最大值和最小值的中点是稳妥做法。3.2 核心步骤steptdm 转速计算与角度重采样的实现拿到脉冲时间后下一步就是计算瞬时转速曲线。Order_tracing.zip 中 steptdm 的常见输入是脉冲时间和总采样时间输出是等时间间隔的转速序列。我在自己写替代函数时习惯先计算每个脉冲区间的平均转速再对区间中点做三次样条插值最后用重采样函数得到每一点的瞬时转速。角度重采样的本质是求解角度积分方程从起始角度开始累计角度增量等于本次转过的角度当累计角度达到设定增量时对应的时间点就是需要插值的时刻。下面这段代码实现了基于等角度增量每转 360 点的重采样过程。from scipy.signal import filtfilt, butter from scipy.interpolate import interp1d # 计算瞬时转速曲线用三次样条 pulse_center (pulse_time[:-1] pulse_time[1:]) / 2 rpm_avg 60.0 / np.diff(pulse_time) # 每个脉冲间隔内的平均转速 r/min rpm_func CubicSpline(pulse_center, rpm_avg) t_fine np.linspace(t[0], t[-1], len(t)) rpm_inst rpm_func(t_fine) # 零相位低通滤波抑制键相齿误差带来的转速噪声 cutoff 100.0 # 根据最高分析阶次和平均转速设置 b, a butter(2, cutoff / (0.5 * 10000), btypelow) rpm_smooth filtfilt(b, a, rpm_inst) # 转速到角度的积分生成等角度采样的时间点 samples_per_rev 360 angle np.cumsum(rpm_smooth / 60.0 * (t_fine[1] - t_fine[0])) * 360.0 target_angle np.arange(0, angle[-1], 360.0 / samples_per_rev) target_time np.interp(target_angle, angle, t_fine) # 对原始振动信号插值得到角度域信号 angle_sample interp1d(target_time, np.interp(target_time, t, vib), kindlinear, bounds_errorFalse, fill_value0.0)(target_time)如果包里有 steptdm 可直接调用通常它的输出就是这个逻辑的封装只是内部可能用更精确的数值积分和自适应步长来保证角度增量均匀。参数说明里最要紧的是 samples_per_rev它决定最高可分析阶次。采样点数为 360 时最高阶次为 180奈奎斯特想分析到 50 阶以内每转 600 点更安全。目标角度数组直接用 arange 生成最后一个会截断属正常现象建议保留整数转数据避免末端插值误差。3.3 从角度域信号得到阶次谱和包络阶次谱角度重采样完成后角度域的振动信号是一等角度间隔的序列对它做 FFT 得到的谱线横轴单位就是阶次Order比如 1 阶对应 1 倍转频行星轮齿数 23 时啮合阶次 23 附近会出现峰。阶次谱的计算可以用常规 FFT但要注意幅度归一化。角度域采样点数是每转采样点数乘以转数FFT 的谱线间隔就是 1/总转数所以这个值直接决定两个临近阶次能否分开。# 对角度信号做 FFT得到阶次谱 from scipy.fft import rfft, rfftfreq order_signal angle_sample - np.mean(angle_sample) # 去直流 N_order len(order_signal) order_resolution 1.0 / (N_order / samples_per_rev) # 阶次分辨率 order_axis rfftfreq(N_order, d1.0 / samples_per_rev) order_spectrum 2.0 * np.abs(rfft(order_signal)) / N_order # 打印前 20 阶的峰值 peak_idx np.argsort(order_spectrum)[-20:][::-1] for idx in peak_idx[:10]: print(f阶次 {order_axis[idx]:.2f} 幅值 {order_spectrum[idx]:.4f})这里 rfftfreq 的 d 参数是关键角度域一个样本代表 1/samples_per_rev 转因此 d1/360那么频率轴的刻度就是循环阶次。阶次分辨率很容易被忽略如果只采了 10 转分辨率是 0.1 阶两个啮合边带相隔 0.05 阶就分不开。想提高阶次分辨率只能增加采集转数不能靠补零补零只改变显示精度。对于做行星轮系故障诊断的场景建议至少采集 60 转以上啮合阶次附近边带才能分辨得开。4. 转速计算与角度重采样的 4 个关键参数窗口、插值阶数、阶次分辨率和滤波4.1 转速计算窗口脉冲间隔与平滑窗的权衡转速计算本质是用脉冲间隔估计局部周期脉冲间隔越短转速时间分辨率越高但单个脉冲的测量误差也被放大。键相盘上的齿距误差、传感器安装偏心都会让相邻脉冲间隔产生规律性波动。处理上常见两种窗口一是直接用单脉冲间隔适合每转一个键槽的情况二是用多个脉冲间隔做滑动平均适合每转多个键齿的编码器。滑动平均窗口越大转速曲线越平滑但对真实转速波动的响应越慢。我一般会优先使用单脉冲间隔然后用零相位低通滤波做平滑。滤波截止频率需要按最高分析阶次和平均转速来估算。目标是让转速曲线带宽至少覆盖最高阶次对应频率的 2 倍。假设平均转速 3000 转/分50 Hz最高分析阶次 30 阶那需要的转速带宽是 50×301500 Hz低通截止频率不能低于这个值否则重采样会滤掉与高阶段次相关的转速调制。很多工程师直接默认平滑窗取 10 点结果行星轮系通过频率附近的调制信息全被抹掉了这是常见误区。4.2 插值阶数转速曲线与角度位置的精度差异转速曲线和角度重采样都涉及插值但插值阶数选择不同。转速曲线插值通常用三次样条因为真实转速变化是连续的二次曲线只能保证一阶导数连续三次样条能保证二阶导数连续对啮合振动中包含的加速度信息更友好。角度重采样在原始振动信号上插值时反而常用线性插值原因是振动信号包含高频成分高阶样条容易在峰谷附近产生过冲制造出不存在的振荡。对于每转 360 点的角度信号线性插值已经足够如果振动信号本身采样率很高且过采样充足线性插值带来的误差远小于传感器噪声。代码里对角度信号插值用了 np.interp 就是线性插值很多商业软件里默认也是线性。如果你追求更高的相位精度可以使用分段三次 Hermite 插值它能避免过冲且保持一阶连续但计算量稍大。无论选哪种都要注意插值后角度域的幅值没有改变原信号的动态范围必要时用已知正弦信号做验证。4.3 阶次分辨率与采样总转数的关系阶次分辨率定义为 1/总转数。比如采集了 40 转分辨率就是 0.025 阶意味着相距 0.025 阶的两个峰值可以区分。这个值对应时域 FFT 里 1/信号时长是物理本质无法靠重采样技巧绕过。如果你分析的是行星轮系太阳轮故障特征可能是 1.5 阶和 3 阶的边带间隔很小就必须拉长采样时间。同时总转数也决定了重采样后信号的长度进而影响 FFT 计算量。实际项目中经常遇到采集时长受限的情况。转速 3000 转/分下采 40 转只要 0.8 秒但若要同时分析低于 1 阶的慢变特征比如轴承滑差引起的非同步振动阶次分析本身不适用需要保留时域频谱做对照。所以我在出具的报告中总会在同样的数据上同时给出阶次谱和传统频谱一方面验证阶次分析的合理性另一方面捕捉非同步振动成分。4.4 抗混叠滤波在重采样之前必须做角度重采样后原始振动信号的高阶成分可能混叠到低阶区域。例如最高分析阶次是 50原始信号里 300 Hz 的振动在每转 60 点的低速情况下会折返回低阶区域。所以重采样之前必须对振动信号做低通滤波。滤波器截止频率按平均转速下的最高阶次频率设置同时考虑转速波动区间。例如转速 1200-1800 转/分最高阶次 80 阶那么截止频率应取 1800/60×802400 Hz 以上但同时要低于采样率的一半。滤波阶数建议用四阶 Butterworth并做零相位处理。零相位滤波可以用 filtfilt代价是延迟变为 0但会占用一定内存。很多现成包里可能只提供了普通滤波函数使用前要确认输出是否被平移过。我遇到过用一次常规滤波后重采样导致所有阶次峰值相位整体偏移几十度包络解调后相位特征全错最后检查才意识到是滤波延迟未补偿。这是阶次分析里最容易隐性翻车的地方。参数建议值影响脉冲时间检测阈值信号幅度中值影响转速曲线的毛刺转速平滑截止频率最高阶次频率×2影响高阶段次调制信息每转采样点数最高阶次×4以上决定混叠边界总采集转数60转以上决定阶次分辨率5. 角度重采样与转速计算的 5 个常见坑现象、原因与解决5.1 重采样后阶次谱出现均匀间隔的假峰现象角度域信号做 FFT 后在整数阶次附近出现间隔完全相同的一簇边带且转速越低越明显。原因多半是键相盘的齿轮齿距误差被转速曲线完整保留重采样时把这种周期性机械误差当成了转速波动。比如 60 齿的齿轮盘齿距误差会在 60 阶处产生等间隔边带。解决方法是提高转速平滑力度或对转速曲线做一个周期平均剔除把与齿数相关的谐波成分滤掉。更彻底的办法是换用每转只有单键槽的盘避开齿距误差。5.2 steptdm 报错脉冲时间戳不是严格递增现象程序运行到转速计算时提示时间数组递减或者计算出的转速出现负数。原因通常是脉冲检测时把同一个上升沿重复触发或者触发电平滞后导致在下降沿也触发了一次。排查时先打印脉冲间隔看有没有小于 0 的值。解决方法是给脉冲检测加滞回区间阈值上方过阈值只触发一次直到信号回落到阈值下方再等待下一个上升沿。代码检测上沿时增加一个最小间隔约束比如间隔小于平均脉冲周期的 0.1 倍就丢掉。5.3 行星轮系转速计算时阶次谱基频位置不对现象使用行星轮系时阶次谱上的基频峰值不在 1 阶而是偏到 0.98 或 1.03 阶。原因通常是转速计算时把太阳轮和行星架的转速搞混了。行星轮系的啮合频率与转轴转速的关系比较复杂键相传感器如果装在行星架上脉冲间隔对应行星架的转速但齿轮啮合阶次相对的是太阳轮或行星轮转速。解决方法是先明确键相脉冲对应的旋转件再在阶次谱中手动打上理论啮合阶次线。我一般会先用一个已知的单级齿轮啮合频率验证转速计算是否正确再做行星轮系。5.4 重采样后信号长度比预期少了一截现象目标角度数组从 0 到总角度结果插值后的角域信号末尾全是 0 或者直接报错。原因是角度积分或目标角度数组越过了实际数据末端。比如转速曲线最后一点计算有偏差累计角度偏大导致 target_time 请求超过 t[-1]。解决方法是生成目标角度时把最大角度限制在累计角度最后值减去一个角度增量同时检查最后一段的插值时间不超过采样末端。另外转速滤波的填充量filtfilt 对边界的处理也可能让末尾数据不可用建议重采样前裁剪前后各 0.5 转的数据作为余量。5.5 阶次谱幅值和传统频谱幅值对不上现象同一组数据10 Hz 时振幅 1 m/s²阶次谱 1 阶处振幅却变成了 0.8 或 1.2。原因有两个一是 FFT 归一化方式不一致时域频谱用幅值谱且做了窗函数增益补偿阶次谱角度域数据长度和窗函数不同二是角度重采样的插值会改变信号能量分布特别是每转采样点数偏低时。解决方法是先用标准正弦信号做幅值标定方法见第 6 章。这里提醒一下做故障诊断时阶次谱更关注相对幅值变化绝对幅值需要传感器灵敏度标定不要被两套频谱的数值差异吓到。6. 用仿真信号验证整条链路从阶次谱反推转速准确度阶次分析做完如何确认结果是可信的我习惯在每次处理真实数据前先构造一个已知转速曲线和已知阶次成分的仿真信号完整跑一遍 Order_tracing.zip 里的流程。仿真信号的做法很简单设定一个转速函数例如 30 Hz 到 40 Hz 的线性升速再加上一个始终等于 2 倍瞬态转频的振动分量采样率 10 kHz时长 10 秒。fs 10000 t_sim np.arange(0, 10, 1/fs) rpm_func 30 (40 - 30) * t_sim / 10 # 30 到 40 Hz 线性升速 phase 2 * np.pi * np.cumsum(rpm_func) / fs # 相位积分 vib_sim np.sin(phase * 2) # 2 阶振动分量把 vib_sim 和模拟的键相脉冲每转一个脉冲送入我们前面的流程重采样后计算阶次谱理论上应该只在 2 阶处出现一根谱峰。如果谱峰出现在 1.8 或 2.2 阶说明转速曲线滞后或超前相位积分基准没对齐。这个验证方法比对着真实数据猜要高效得多我已经把它当作每次阶次分析前的固定动作。用仿真信号调通一次参数再用真实数据跑遇到问题就回到仿真里还原变量能省出一整个下午的排查时间。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

Java双人联机小游戏源码解析:森林冰火人Socket通信与避坑指南

Java双人联机小游戏源码解析:森林冰火人Socket通信与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/30 6:05:00
PLCopen轴状态机串联:从MC_Power到MC_MoveRelative的ST实现

PLCopen轴状态机串联:从MC_Power到MC_MoveRelative的ST实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/30 6:05:00
NI万用表驱动从zip到稳定读数:C++环境搭建与避坑指南

NI万用表驱动从zip到稳定读数:C++环境搭建与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/30 6:05:00
MORE NEWS

更多资讯

📰

央媒都在布局GEO,企业再不行动会失去什么

企业过去二十年的线上经营,本质上只做对了一件事:让目标客户在搜索框里找到自己。搜索引擎给的是链接列表,用户自己判断、自己点击、自己比较。生成式AI改变了这个动作的终点——用户不再拿到十个链接,而是拿到一个已经组织好的答…

📰

让AI合并两张表,销售额怎么翻倍了?从一个重复订单号讲透数据关联

合并脚本没有报错,销售额却从600元变成1200元,问题可能出在关联粒度。本文用可运行的Python示例,拆解一对多、多对多、重复键和订单金额重复累加,给出主键检查、未匹配清单与逐单核验,并说明为什么总额一致也不等于结果…

📰

自建云服务器 MQTT 平台全栈实战:Broker 部署、Topic 设计与 Android/Qt 双端接入

自建云服务器 MQTT 平台全栈实战:Broker 部署、Topic 设计与 Android/Qt 双端接入 做 IoT 产品的时候,最先被低估的一定是"连接"这件事。很多人以为难点在传感器选型或者算法,实际上真正把人拖垮的是:每台设备都要在云端占一条长连接,一万台设备就是一万条 TCP…

📰

基于 Vue3 与 MQTT 的物联网实时监控大屏:前端可视化、Broker 桥接与后端数据流实战

基于 Vue3 与 MQTT 的物联网实时监控大屏:前端可视化、Broker 桥接与后端数据流实战 车间和园区里几乎都有一个共同的场景:值班室正中挂着一块大屏,上面跑着产线温度、设备电流、告警条数和当班产量。以前这块屏的解决方案很固定,要么买商业组态软件,要么让集成商连同 PL…

📰

面向结构智能的决策能力理论

面向结构智能的决策能力理论——基于WSaiOS-SI中“决策能力”框架的理论重构摘要: 本文基于WSaiOS-SI结构智能理论第十一卷第三章“决策能力”,对决策能力的概念、结构、生成机制与执行链条进行学术化重构。文章首先区分“决策”与“决策能力”&#xff…

📰

企业知识库与GEO的分工边界:从“AI理解“到“AI推荐“的两层技术链路

本文把"知识库"和"GEO"拆成两层技术链路:知识库层解决实体识别与属性完整(AI理解),GEO层解决检索命中与引用触发(AI推荐)。两层之间有明确的输入输出契约——知识库层必须输出"可…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬