变转速下的阶次分析:角度重采样原理与order.m实战 简介面向机械振动分析与故障诊断场景的阶次分析脚本资源。该压缩包内仅含一个脚本文件体积约两KB脚本核心覆盖转速计算、角度重采样及阶次分析三大环节。通过将时域转速信号映射至旋转角度域可在变转速工况下提取稳定的阶次特征有助于识别机械设备中的周期性振动或噪声源。已有999人学习/下载适合信号处理、机械工程等方向的工程师和研究者参考复用。资源价值在于提供了一套可运行的阶次分析算法框架脚本内包含从原始转速信号中提取转速曲线、按角度进行插值重采样以及输出阶次谱的具体实现。研读后可快速理解角度域转换的关键步骤和参数设定思路直接用于算法验证或作为二次开发基础能够明显缩短振动信号分析与故障诊断项目的原型搭建周期。1. 阶次分析从角度重采样开始Order_tracing 到底帮你干了什么搞旋转机械振动诊断的同行应该都有过这种体会设备转速一直漂频谱图上的故障特征峰跟着飘你根本分不清那是 2 倍频还是 3 倍频。根源在于普通 FFT 基于等时间间隔采样转速一变阶次能量就抹平了。Order_tracing.zip 这包东西核心就一个 order.m 脚本配合 steptdm 做时间域建模的前处理把等时间采样信号掰成等角度采样再做转速计算与阶次分析。适合搞行星轮系、轴承、齿轮箱振动监测的工程师也适合刚入门想搞懂角度重采样原理的学生。整条链路跑通后转速波动下的故障特征就能稳定对齐到整数阶次上。2. 为什么必须角度重采样等时间采样在变转速下会翻车2.1 阶次与频率的本质区别阶次Order表示每转发生的循环次数。一阶就是轴每转一圈发生一次的事件二阶就是两圈一次。注意这里与频率Hz的关键差异频率是每秒事件数阶次是每转事件数两者通过转速换算f Order × RPM / 60。恒定转速下一个齿轮啮合频率在 3600 RPM 时 120 阶等于 7200 Hz频谱里看峰值位置即可但转速从 3600 降到 1200同样 120 阶从 7200 Hz 变成 2400 Hz频谱峰在移动。如果你不把信号搬进角度域FFT 结果里所有阶次峰都会糊成一片宽带。这是我在处理某型风电齿轮箱数据时最直观的感受——行星轮系在变转速工况下太阳轮故障特征阶次是稳定的但频率是漂移的用普通频谱完全无法识别。2.2 角度域的本质把每秒多少个样本变成每转多少个样本角度重采样的核心思想很简单信号横轴从秒换成角度通常用转数或弧度。等角度采样就是让每个采样点之间间隔固定的角度增量 Δθ比如每转 256 个点Δθ 360°/256 1.40625°。实现上分两步先用转速脉冲计算瞬时转速再通过转速积分得到任意时刻的转角最后在等角度网格上插值。整个过程看起来像玄学其实每一步都有明确的物理对应脉冲对应转轴一圈转速对应每圈耗时角度对应时间积分。把这个映射关系想清楚后面代码怎么写都不会偏。2.3 Steptdm 在流程中的定位Order_tracing 包里的 steptdm按我的理解它描述的是 Step Time-Domain Modeling 这一套时间域建模的前处理思路。也就是先把时域转速信号经过阶跃式时间建模换算成平稳角度域时刻表从而为重采样提供时间标签。真正的阶次分析不需要一步到位的复杂变换重点是先有一个干净、单调递增的角度-时间表再插值陡峭的转速波动会直接破坏这个表。我在实际使用中steptdm 的输出通常就是每个脉冲时刻对应的转数累积值这个值在后续 3.3 节的角度积分中会直接用到。3. 从转速脉冲到瞬时转速转速计算怎么实现、参数怎么定3.1 order.m 第一步键相脉冲的边沿检测几乎所有的旋转机械都使用键相传感器输出每转一个或每转多个脉冲。order.m 第一步就是把脉冲时刻提取出来。常见做法是用触发电平做上升沿检测。注意抗干扰现场脉冲信号经常叠加毛刺若毛刺超过触发电平会产生假脉冲导致转速计算出现翻倍或半倍错误。我一般会在检测前加一个最小时间间隔转速不可能超过物理极限对应的脉冲间隔比如最高转速 6000 RPM脉冲间隔不小于 0.01s剔除间隔小于 0.5 倍平均间隔的假脉冲。% —— 键相脉冲上升沿检测 —— % t: 时间轴(s); v: 脉冲信号幅值 th 2.5; % 触发电平视传感器输出而定 rising find(diff(v th) 1); t_rot t(rising); % 每个上升沿对应时刻(s) % —— 剔除假脉冲转速越限检查 —— rpm_lim 6000; % 机组最高转速(RPM) min_dt 60 / rpm_lim; % 最高转速下最小脉冲间隔(s) dt_raw diff(t_rot); valid dt_raw 0.5 * min_dt; % 保留物理上可信的间隔 t_rot t_rot([valid; true]); % 最后一个脉冲无后继保留逻辑说明diff(v th)为 1 的位置就是信号从低到高穿越阈值的点对应转轴每转一圈的时刻。rpm_lim是物理上限用于剔除毛刺产生的短间隔阈值系数 0.5 是经验值现场毛刺间隔通常远小于真实脉冲间隔。参数调整时th需要根据传感器静默电平与触发幅值确定一般取峰值的 60% 左右rpm_lim直接设成设备铭牌最高转速的 1.2 倍即可别卡太死。注意如果齿盘每转输出多个脉冲t_rot是齿间隔而不是转间隔后面计算转速时要除以齿数。3.2 瞬时转速计算相邻脉冲法脉冲时刻确定了每转耗时就是相邻脉冲的时间差瞬时转速RPM 60 / 每转秒数。这里有个工程细节计算出来的转速点应放在两个脉冲中间时刻而不是脉冲时刻本身因为它是该时间间隔的平均转速。转速波形若毛刺大还需要做一次平滑如滑动平均或低通滤波否则后续角度积分会被噪声放大。% —— 瞬时转速计算 —— dt_rot diff(t_rot); % 每转耗时(s) rpm 60 ./ dt_rot; % 瞬时转速(RPM) t_rpm_mid (t_rot(1:end-1) t_rot(2:end)) / 2; % 转速点时刻取间隔中点 % —— 转速平滑3 点滑动平均 —— rpm_s movmean(rpm, 3); % 窗口取 3过大会抹掉真实转速波动逻辑说明dt_rot 表示每一转花了多少秒60 除以它就是 RPM。转速点时刻取中点是因为dt_rot是这一转的平均耗时转速代表的是该转的平均转速。movmean窗口取 3 是我在燃气轮机数据上的常用设置窗口过大会把真实转速波动抹平导致角度域插值出来波形畸变。如果你面对的转速波动本身是分析对象比如扭振分析平滑窗口要缩小甚至跳过。3.3 角度位置计算把转速积分成转角有了每转一个的脉冲时刻理论上脉冲时刻对应的角度是精确的整转数×360°。中间任意时刻的角度需要做插值。常见做法是用样条插值把时间-整转数映射到每个原始采样时刻得到连续的 θ(t)。采样率越高插值越平滑但转速剧烈波动时线性插值会失真推荐三次样条。% —— 连续角度表脉冲时刻角度精确已知 —— theta_known (0:length(t_rot)-1) * 2*pi; % 每转累计 2π(rad) theta_cont spline(t_rot, theta_known, t); % 插值到每个采样时刻 % —— 等角度网格目标值 —— PPR 256; % 每转采样点数(Order Per Rev) delta_theta 2*pi / PPR; % 角度间隔(rad) theta_target theta_known(1) : delta_theta : theta_known(end); theta_target theta_target(:); % 转成列向量逻辑说明theta_known里第 k 个脉冲对应角度 (k-1)×2π这是物理事实spline在脉冲点之间做三次样条插值得到任意时刻的连续角度。PPR是角度重采样最关键的分辨率参数取太低阶次谱看不清取太高插值会过拟合噪声。经验值振动分析取 128~512齿轮啮合分析取 256~1024具体取决于最高关注阶次一般取最高阶次的 2.56 倍以上类比采样定理留出余量。3.4 角度域重采样把时域信号插到等角度网格现在角度-时间表有了目标角度网格有了直接从原始时域信号插值到目标角度。注意theta_cont必须单调递增如果转速出现过零正反转则整段数据要分段处理不能一把梭。% —— 等角度重采样 —— sig_angle interp1(theta_cont, x_sig, theta_target, linear); % x_sig: 原始时域振动信号(与 t 同长度)逻辑说明interp1的查询点是theta_target返回的是等角度间隔的振动序列sig_angle。线性插值在 PPR 较大时与样条结果几乎一致胜在快如果转速波动剧烈比如启停机过程转速斜率大建议改用spline。我自己试过在 1500→6000 RPM 扫频段用线性插值频谱毛刺明显换成样条后阶次峰干净很多。参数作用常用取值调整方向触发电平 th键相脉冲边沿检测阈值信号峰值的 60%毛刺多就调高脉冲幅值波动大就调低最高转速 rpm_lim假脉冲剔除上限铭牌转速×1.2有超速工况再放宽PPR每转采样点数128~1024关注高阶次就加大插值方法角度域插值方式linear / spline转速平稳用 linear扫频用 spline转速平滑窗口去除转速毛刺3~5 点转速信号噪声大再加大4. 阶次谱怎么算从角度域信号到阶次峰4.1 角度域信号就是等间隔的转数域信号重采样完成之后sig_angle的横坐标是角度每转固定 PPR 个点。此时角度域信号在数学上就是一个等间隔采样序列直接 FFT 得到的就是阶次谱。这里有个容易困惑的点普通频谱的横轴是 Hz每秒循环数阶次谱的横轴是 Order每转循环数两者在形式上完全同构只是横轴单位变了。FFT 换回来之后横轴要除以总转数而不是除以采样频率。很多新手在这里翻车拿着频谱横轴直接除以当前转速结果阶次峰位置偏得离谱以为是脚本 bug其实换算逻辑错了。4.2 阶次谱计算代码FFT 长度建议取 2 的幂加汉宁窗减频谱泄漏幅值按窗函数能量修正。我用下面这段处理风电齿轮箱数据时效果比直接调 MATLAB 自带函数更可控因为你每个环节都能看到中间结果出问题时知道该往哪查。% —— 阶次谱计算 —— N length(sig_angle); w hann(N, periodic); % 汉宁窗 NFFT 2^nextpow2(N); % FFT 点数取 2 的幂 S fft(sig_angle .* w, NFFT); amp abs(S(1:NFFT/2)) * 2 / sum(w) * 2; % 幅值修正(能量法修正为幅值法) order_axis (0:NFFT/2-1) * (PPR / N); % 阶次轴换算逻辑说明角度域信号共 N 点对应 N/PPR 转FFT 频率分辨率换算成阶次分辨率就是 PPR/N。amp计算要除以窗函数的能量和否则加窗后幅值偏小。order_axis的换算我经常见到同事写错——直接拿 FFT 频谱轴除以转速结果阶次峰位置偏得离谱。正确做法是阶次分辨率 1/总转数第 k 根谱线对应阶次 k × PPR/N。参数调整NFFT 不一定要等于 N补零可以细化谱线但不会提高真实分辨率阶次分辨率只由总转数决定想分辨 0.1 阶的边带就必须保证数据至少覆盖 10 转以上。4.3 阶次谱怎么看一个行星轮系案例行星轮系阶次特征和定轴齿轮完全不同太阳轮、行星架、齿圈转速不同各自故障特征阶次基于相对转频计算。比如某型行星齿轮箱太阳轮故障特征为太阳轮转频的整数倍齿圈故障则表现为行星架转频相关的边带族。用 order.m 跑出来的阶次谱上你会看到一系列峰1 阶是转频Z 阶是啮合频率Z 为齿数啮合频率两侧出现 ±1 阶边带往往是齿轮偏心或裂纹早期信号。我的习惯是先看 1 阶峰是否突出——如果 1 阶峰异常高先查转子不平衡再看啮合阶次附近的边带间隔是否为 1 阶是则指向齿轮问题边带间隔是行星架阶次时问题大概率在行星轮或齿圈。这就是阶次分析比频谱强的地方转速变化时这些特征峰在阶次谱上的位置纹丝不动只有幅值在变故障前后对比一眼能看出来。5. 避坑指南order.m 实战中的五个典型坑5.1 键相脉冲丢失导致转速计算跳变现象瞬时转速曲线在某处突然上冲到 20000 RPM或出现反向转速。原因键相传感器在低转速段信号幅值偏弱过零检测漏掉了脉冲diff(t_rot)算出两倍转周期瞬时转速瞬间砍半或翻倍。解决加脉冲丢失检测。我处理某机组数据时在代码里加了逻辑判断——相邻脉冲间隔超过中位数的 3 倍即判定丢失用前后两个有效间隔的均值填充该点。这个方法不引入相位误差比直接删脉冲稳定得多。5.2 插值方法选错导致波形失真现象阶次谱在 30~40 阶之间出现一堆没有物理意义的裙边峰。原因扫频段转速变化率高线性插值在角度域各点的时间间隔波动大导致等效采样率不均匀FFT 后产生虚假频谱分量。解决扫频工况把interp1的linear改成spline同时检查角度-时间表的二阶差分连续性若某处跳变量超过相邻均值 2 倍说明该段转速数据本身有毛刺先回 3.3 节做转速平滑。5.3 PPR 设太小高阶次峰混叠现象啮合阶次峰真实位置在 137 阶但谱图上在 9 阶、73 阶处出现重复峰。原因PPR 取 128 时最高可无混叠表示的阶次为 64 阶奈奎斯特对应 PPR/2137 阶已混叠到低频位置。解决先算关注最高阶次 O_max再定 PPR ≥ 2.56 × O_max。这个 2.56 是我自己常用的安全系数比理论下限 2 多留余量因为在插值非理想时边缘阶次幅值衰减明显。5.4 转速计与振动计不同步现象阶次谱 1 阶峰旁边出现梳状边带间隔恰好等于转速脉冲频率。原因转速通道与振动通道的 ADC 启动时刻不一致或每通道采样点数不同步。在阶次分析里角度表来自转速通道信号来自振动通道两边时间轴必须严格对齐。解决数据采集时用同一采样时钟的同步采集卡并记录启动时刻偏移如果已经拿到不同步数据按码率换算时间偏移后先对齐再进入 order.m。这是我踩过最深的坑——一度以为是轴承故障换了同步采集后所有边带消失。5.5 谱泄漏与窗函数选择现象阶次谱上每个真实阶次峰两侧都有对称旁瓣幅值最大的一阶峰甚至压扁了相邻 0.5 阶的小故障峰。原因角度域数据不是整周期截断FFT 隐含周期延拓造成频谱泄漏直接矩形窗时旁瓣接近 -13 dB足以淹没小峰。解决把hann窗换成展平顶窗flattop主瓣幅值误差从 ±1.5 dB 降到 ±0.1 dB代价是主瓣变宽无法分辨相隔太近的两个阶次。工程上我通常先加汉宁窗排查确认有小峰被掩盖后再切 flattop 验证。6. 验证与进阶让阶次分析结果可信的最后一道工序6.1 用仿真信号验证 order.m 正确性拿到别人脚本第一步别急着喂真实数据先合成一段已知阶次成分的仿真信号跑通后再上实机。我的仿真模板是生成 1 阶、2 阶和 17.5 阶模拟某个故障特征三个成分转速从 1000 线性扫到 4000 RPM然后经过同样的角度重采样与阶次谱计算检查三个峰的位置是否落在 1、2、17.5 阶且幅值误差不超过 5%。% —— 变转速仿真信号 —— Fs 10000; T 10; t (0:1/Fs:T-1/Fs); rpm 1000 (4000-1000) * t / T; % 线性升速 theta cumtrapz(t, rpm * 2*pi/60); % 转角积分 x sin(theta) 0.8*sin(2*theta) 0.5*sin(17.5*theta) 0.1*randn(size(t));逻辑说明第 1、2、17.5 阶是已知真值cumtrapz对转速离散积分得到精确转角生成理想变转速信号。跑完 order.m 后若仿真谱三峰位置与幅值偏差太大先查你的脉冲检测和插值环节真实数据结果才会可信。我拿到新环境数据前会强制跑一遍这一步省掉了很多冤枉路。6.2 参数自动寻优与批量验证当手头数据有成百上千个文件时手工调 PPR 和插值方法效率太差。我的做法是把 PPR、插值方法、平滑窗口三个参数做成网格每次只验证已知故障特征阶次峰的信噪比用 SNR 最大的一组参数作为该批次数据的统一配置。这类参数寻优在 MATLAB 里可以用网格搜索思路或用 parfor 并行跑网格耗时从小时级压到分钟级。6.3 与包络谱、倒谱交叉验证阶次谱只展示幅值随阶次的变化对早期微弱故障单独使用容易误判。通常是先做角度域包络解调再做阶次包络谱查找故障特征阶次及其谐波同时用倒阶次谱把阶次谱取 log 再 FFT看周期边带间隔是否均匀。如果三种方法都在同一个阶次位置给出明显峰值我才会在诊断报告里写存在该故障特征。最后说个真实教训有一回我用未同步的转速与振动数据做某风场齿轮箱分析谱图上出现 0.43 阶间隔的奇怪边带我怀疑是齿圈磨损差点下现场拆机。后来核对采集日志发现转速通道滞后了两个采样周期修正后边带全部消失真实故障只是行星轮轻微点蚀。从那以后我每次拿到数据第一件事就是画转速-时间曲线和角度-时间曲线确认单调、同步、无跳变再进阶次分析。主轴类问题靠 1 阶判断齿轮啮合靠啮合阶次两侧边带判断边带间隔对应哪个部件转频就直接指向哪个部件——这套流程希望帮到你数据干净比算法复杂重要得多。本文还有配套的精品资源点击获取