我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

时域与频域特征提取全解析:从FFT到故障诊断的工程实践

时域与频域特征提取全解析:从FFT到故障诊断的工程实践 简介本资源是一份面向信号处理初学者与工程实践者的Python特征提取工具脚本聚焦时域与频域两类核心特征的快速计算与理解。针对振动分析、故障诊断、生物电信号处理等实际场景提供可直接运行的代码实现解决特征手动计算繁琐、公式与代码脱节的问题。压缩包仅含1个Python源文件.py大小2KB轻量简洁涵盖方差、标准差、峭度、裕度、峰值、斜度等6类时域指标以及功率谱密度、谐波、带宽、中心频率等4种频域特征的完整计算逻辑全部基于numpy和scipy标准库无需额外依赖。目前已有1799人学习下载读者可即刻运行脚本输入任意一维信号数组获得结构化特征输出并结合注释深入理解各指标物理意义与工程适用性是入门信号特征工程的实用型参考脚本。 做信号处理的人十有八九都遇到过这种场景数据采了一大堆波形在屏幕上密密麻麻扭成一片人眼根本盯不出规律。领导问设备有没有异常你说“波形有点乱”这不算结论因为乱是一个没法量化、没法复现、没法写进报告的词。真正能解决问题的是特征提取——把一条时间轴上的原始信号按照特定规则压缩成一组具有物理含义的数字用这些数字代替波形去做判断。时域和频域是这个领域最基础的两种切入角度。时域回答“信号值随时间怎么变”频域回答“信号由哪些频率成分按什么强度组成”。两者不是对立关系而是对同一段信号的两种投影方式。特征提取的核心工作就是从这两个投影面中分别捞出真正有判别力的指标。这篇文章我会把时域、频域特征提取的完整逻辑讲透包括每个特征值的物理含义、计算公式、适用场景以及工程中容易踩的坑。尤其会重点处理一个网上被反复问的问题Matlab里拿到一组非整数时间间隔的数据怎么转频域并挑出某一频率。适合刚接触信号处理的初学者也适合做故障诊断、语音分析、工业监测但一直停留在“画图看图”阶段的工程师参考。1. 为什么“时域”和“频域”总是成对出现1.1 同一个信号的两张“身份证”先想一个问题一段声音是一秒内鼓点、人声、吉他声混合叠加后的结果。你在时域里看到的是空气压强随时间的连续波动这个波形的形状取决于所有声源瞬时叠加后的总和。人耳虽然能分辨鼓点和人声但只看时域波形你分不清哪个部分是鼓、哪个部分是人声。频谱的作用就是把这团混合物重新拆解成一个个频率分量让你看到在某个频点上能量有多强。这就是傅里叶变换干的事。它不改变信号本身包含的信息只是把信息从“时间坐标系”搬到了“频率坐标系”。更准确地说原始时域信号是一个函数它把每个时刻映射成一个幅度值。傅里叶变换把这个函数分解成一组正弦波基函数的加权叠加每个正弦波有自己的频率、幅度和相位。分解完以后原来的全部信息仍然在但视角完全不同。我经常用交通类比来解释。时域数据像高速路口的实时车流量记录某个时刻冲过去多少辆车这是瞬时的密度变化。频域数据更像把所有车辆按目的地分类后的统计报表不管它们什么时间通过只看哪些目的地频率占了多大比例幅度。交通管理既要看瞬时流量变化也要看周期性拥堵的主要路段两种视角缺一不可。1.2 特征提取的本质降维而不是丢失很多初学者有个误解认为特征提取就是把信号“简化”了损失了真实信息。这话对了一半。特征提取确实是降维但是一种在保留关键判别信息的前提下主动丢弃冗余信息的降维。以电机轴承状态监测为例。原始振动信号以50kHz采样率记录一秒钟就是5万个数据点。如果直接把这段波形交给分类模型模型要处理的特征维度是五万维计算量巨大、过拟合风险高。但仔细观察你会发现不同故障状态的振动信号在时域统计量和频域能量分布上表现出明显的差异。健康的轴承振动近似随机白噪声叠加微弱的转频成分外圈故障时往往出现与通过频率有关的周期冲击内圈故障的冲击幅度又受负载调制。这些差异可以用几十个特征数字完整表达。从五万个点到几十个点这就是特征提取的降维作用。它没有“丢失真实信息”因为那5万个原始数据点里其实包含了大量重复的、噪声性的、对故障判别没有贡献的信息。特征提取帮你把注意力集中到信号真正携带判别能力的位置上。1.3 时域特征与频域特征的分工差异时域特征最擅长捕捉三类信息信号的总体幅值水平、瞬时的冲击/突变、信号随时间变化的统计规律。它不需要做复杂的数学变换计算代价低而且物理意义非常直白——均值、峰值、方差、峭度每一个都能直接和设备的某种运行状态挂钩。频域特征则擅长回答另一类问题信号在哪些频率上聚集了能量这些频率成分的分布形态是怎样的旋转机械的转频、齿轮啮合频率、轴承故障特征频率、电气设备的工频及其谐波这些都只能在频域里被精准定位。如果只靠时域统计量你顶多能判断“信号幅值变大、波动变强”但判断不了“是1倍频变大还是2倍频变大”也就锁不住故障源。所以成熟的诊断方案几乎都是双域联合先用时域特征做快速筛查、发现异常征兆再用频域特征定位异常成分、锁定故障机理。特征提取不是二选一而是两套尺子配合着量。2. 时域特征把波形压缩成一组可比较的数字2.1 最常用的时域统计量及其物理含义时域特征从计算方式上看都很简单但要真正用好必须理解每个量到底在“感知”信号的哪个侧面。我把实际项目里最常用的一组列出来特征名称计算公式感知的信号侧面典型应用场景均值(\frac{1}{N}\sum_{i1}^{N}x_i)信号的直流分量、静态偏置传感器零漂检测、静态差异对比均方根值RMS(\sqrt{\frac{1}{N}\sum_{i1}^{N}x_i^2})信号的总体能量水平振动烈度评价、噪声等级测量峰峰值(\max(x)-\min(x))信号的最大摆动幅度冲击检测、间隙评估方差/标准差(\frac{1}{N}\sum_{i1}^{N}(x_i-\bar{x})^2)信号相对均值的波动程度信号平稳性判断峭度(\frac{1}{N}\sum_{i1}^{N}(\frac{x_i-\bar{x}}{\sigma})^4)信号分布的“尖峰”程度轴承早期故障、局部冲击敏感检测偏度(\frac{1}{N}\sum_{i1}^{N}(\frac{x_i-\bar{x}}{\sigma})^3)信号分布的不对称性不对中、摩擦类故障的辅助判断波形因子(RMS / \frac{1}{N}\sumx_i)峰值因子(\maxx_i/ RMS)这里我想特别强调峭度。正常轴承振动信号近似高斯分布峭度值在3附近。当轴承表面出现局部剥落或裂纹时每次滚珠经过缺陷位置都会产生一个窄而尖的冲击脉冲。这种脉冲在时域波形上只占几个采样点对RMS的影响微乎其微但它的幅度很大会显著抬高信号分布的四阶矩使得峭度值迅速上升到5以上。所以峭度是轴承早期局部故障非常灵敏的指示器这类故障在峰峰值和RMS变化还不明显的时候峭度往往已经报警了。峰值因子也有类似的逻辑一个高幅值尖脉冲会把峰值因子推得很高而连续的平稳振动即使RMS很大峰值因子也维持在较低水平。所以峰值因子适合区分“少数几次剧烈冲击”和“整体性高振动”。2.2 时域特征的适用场景与局限性时域特征的最大优势是计算简单、实时性好。在嵌入式设备或PLC里不需要做复杂的FFT只要能跑加减乘除和开方就能实时计算RMS、峭度、峰值因子。国内很多设备状态监测系统的报警逻辑至今还在用“振动速度RMS是否超ISO 10816标准限值”这一条门槛很低但非常实用。但时域特征有个显著短板无法定位频率。如果设备出现共振或某个齿轮的啮合频率成分异常增大时域统计量可能几乎不变因为总能量没变只是能量在频谱上的分布位置变了。这种情况需要频域特征出手。另外时域特征受噪声和异常值影响较大。采集系统中偶尔出现的尖峰干扰、通信毛刺会直接影响峰峰值和峭度的计算结果。因此在实际做时域特征提取之前一定要做预处理去除异常值、必要时做带通滤波。我见过不止一个项目峭度一直偏高报警查到最后发现是传感器线缆接触不良每隔几百个点就跳一个尖峰。预处理做完峭度就回到正常水平了。2.3 预处理决定时域特征的可靠性很多人忽略的一个细节是特征提取不是对原始数据直接算而是对预处理后的数据算。最基本的预处理链路包括去均值把信号减去自身均值消除直流偏置否则后续计算方差、峭度时直流分量会严重干扰结果。去除毛刺设定合理的幅度阈值超过阈值且持续时间极短的点判断为干扰用邻域插值代替。带通滤波根据研究对象的特征频率范围设计带通滤波器保留有效频段、抑制无关低频漂移和高频噪声。旋转机械振动的有效分析频段通常在10Hz到10kHz之间。加窗分段对长时间连续信号按固定长度如1024点或1秒时长切分对每个分段分别计算特征。这样既能观察特征值随时间的变化趋势也便于后续做统计分析和机器学习建模。我在实际项目中的习惯是先画一段原始波形肉眼判断是否有明显异常点然后做去均值和毛刺处理再对处理后的信号计算全部时域特征。如果计算后的特征值仍然不符合预期回头检查预处理环节几乎没有一次是预处理白做的。3. 频域特征FFT之后你到底在看什么3.1 从时域到频域的跳转规则要把时域信号转成频域目前工程上几乎都用FFT快速傅里叶变换但FFT只是傅里叶变换的一种高效算法实现它有几个输入前提和输出特性不理解清楚很容易得到错误结论。第一是采样定理。要分析的最高频率不能超过采样率的一半这个频率叫奈奎斯特频率。假设采样率是10kHz那FFT结果中最高可靠频率就是5kHz超过这个范围的信息会被“混叠”折返到低频段里造成假峰。所以设置采样率之前一定要先想清楚目标信号集中在哪个频段、需要用到的高频上限是多少。工程经验是采样率至少设置为最大关注频率的5到10倍而不是刚好两倍。留出余量以便后处理滤波。第二是频谱分辨率。FFT输出的频率点间隔是采样率除以FFT点数。采样率10kHz、FFT点数1024分辨率为10Hz。这意味着你只能区分相隔10Hz以上的两个频率分量如果两个峰只差5Hz在频谱上会糊成一个峰。要提高频率分辨率不能靠提高采样率这会拉低分辨率而要增加FFT点数。增加点数的办法是延长截取信号的时长。FFT点数由采样率fs和信号时长T共同决定N fs * T。想要0.1Hz的分辨率在10kHz采样率下需要10万点、10秒的数据长度。这是很多入门者在频域分析中碰到的第一堵墙数据长度不够频率分辨率到不了目标值。第三是窗函数。对有限长信号做FFT相当于在无限长信号上截取了一段矩形窗这会带来频谱泄漏——频率成分的能量泄漏到相邻频点上形成“裙边”。抑制泄漏的办法是在截取时加窗函数如汉宁窗、汉明窗、布莱克曼窗。加窗的代价是主瓣变宽频率分辨能力略有下降但旁瓣泄漏显著减少。对于连续周期信号我常用汉宁窗对于冲击类信号矩形窗反而更合适因为加窗会削弱冲击的幅度和边缘特征。3.2 从频谱中提取常用的频域特征FFT算完以后你会得到一组复数包含每个频率分量的幅度和相位。幅度谱是最常用的它告诉你每个频率上信号强不强。但直接拿几百上千条幅度谱线去建模维度依然太高还需要进一步压缩成频域特征。下面几个是工业界实践中最常使用的主频谱峰频率幅度谱中最大峰值对应的频率代表信号能量最集中的频率位置。旋转机械的轴频、电机工频及其倍频往往就是主频所在的位置。谱质心重心频率所有频率分量按能量加权后的平均频率反映信号频谱的能量中心。谱质心可用于描述声音的明亮度、振动的频率重心变化。频带能量把整个频段划分成若干个子频段分别计算每个子频段的能量和。这是故障诊断界最经典、最常用的做法因为不同故障类型往往在不同频带产生异常能量。频率集中度主频能量占总能量的比例描述信号能量是否集中在少数几个频率上。齿轮均匀磨损时啮合频率及其谐波能量集中度会发生变化。边频带能量主频两侧以故障特征频率为间隔的边带能量之和常用于调制类故障如齿轮局部断齿、轴承故障引起的振动调制的识别。重点说下谱质心。它的计算公式是[ SC \frac{\sum_{i1}^{K} f_i \cdot P_i}{\sum_{i1}^{K} P_i} ]其中 (f_i) 是第 (i) 个频率值(P_i) 是频率点 (i) 的功率谱值。可以直观地理解谱质心是把整个频谱看成一根质量分布不均匀的杆子能量集中的地方质量大谱质心就是这根杆子的质量平衡点。它落在哪个频率位置就说明信号的主要能量集中在这个频率附近。设备启动过程中转速升高谱质心会随之上升轴承出现严重磨损时高频振动能量增加谱质心也会向高频方向偏移。这是一个能反映频谱总体迁移趋势的好指标。3.3 功率谱密度与自谱除了直接FFT的幅度谱工程上还常用功率谱密度PSD。PSD描述信号功率在频率轴上的分布密度单位是 (V^2/Hz) 或 (g^2/Hz)。计算方式有两种一种是对时域信号计算自相关函数再对自相关函数做傅里叶变换这叫自相关法Wiener-Khinchin定理另一种更常用的是Welch法——把长信号分段每段加窗后做FFT再将各段幅度平方后平均。Welch法的优势在于通过分段平均来抑制频谱的随机起伏。单个样本的FFT频谱噪声很大峰和谷的抖动明显分成多段后真实频率成分在每段都稳定出现平均后保持不变而随机噪声在各段表现不同平均后会被压低。平均次数越多频谱越平滑稳定性和可重复性越高。但代价是频率分辨率降低——每段越短能分辨的频率间隔越粗。工程中做频域特征提取的推荐流程是截取足够长的稳定运行数据用Welch法计算PSD然后基于PSD提取主频、谱质心、频带能量和边带能量。PSD比单次FFT幅度谱稳健得多后续特征也不容易受随机噪声扰动。4. 非整数时间间隔数据转频域并提取指定频率的完整实操4.1 问题背景非均匀采样为什么不能直接做FFT网上关于“Matlab中如何将一组时域下的非整数数据转换为频域数据”的提问非常多。用到的场景很典型从数据库导出的数据时间戳不是整数秒比如0.0012、0.0025、0.0041、0.0053……时间间隔忽大忽小甚至中间有缺失。直接把这两列数据送入fft函数Matlab并不会报错但结果完全错误。因为fft函数假设输入数据是等时间间隔采样的它把数据点顺序当成均匀时间轴上的相邻样本。如果间隔不均频谱的频率轴位置就会严重错位数据点之间的“时间关系”也失真。再举一个网上常被问到的角度时域掩蔽效应中的时域掩蔽。这个概念来自听觉感知指的是一个强的声音在时间上遮蔽其后或之前较弱的听觉信号。人类听觉系统在时域上的分辨能力有限瞬间强声过后会有一段听不到的短暂阶段。这虽然不是频域特征提取的直接组成但说明时域上的时间分辨率与频域上的频率分辨率之间存在物理上的相互制约这也是为什么时域和频域特征必须分开提取、结合起来使用的根本原因。4.2 处理方案一插值重采样到均匀时间轴非均匀数据转频域最直观的思路是先把数据变成均匀间隔再做FFT。插值重采样的完整流程如下第一步确定目标采样率。看数据平均时间间隔。比如0.001、0.002交替出现取平均间隔0.0015秒目标采样率约666.7Hz。如果对频率分辨率有要求需要结合数据总时长和目标频率分辨率来倒推。建议设置的目标采样率不高于原始数据等效采样率的1.5倍避免过度插值引入虚假信息。更稳妥的做法是统计间隔的均值 (dt_{mean})目标采样率 (fs_{new} 1 / dt_{mean})。如果间隔变化很大取较小的间隔作为目标采样率以保证不丢信息但需要接受插值计算量增大的代价。第二步选择插值方法。Matlab中常见的方法有线性插值interp1、三次样条插值spline、pchip插值。线性插值简单、计算快但会损失一部分高频信息而且折角处不够光滑可能引入额外的高频分量。三次样条插值光滑性最好适合振动信号这种平滑波形的重采样。pchip则适合变化剧烈的数据它不会像三次样条那样出现超调和过冲。第三步建立新的均匀时间轴。t_new 0 : dt_new : t_end或者用 linspace(0, t_end, N_new)。然后调用 interp1 完成重采样。% 原始数据t为非均匀时间戳x为对应采样值 t [0.0012 0.0025 0.0041 0.0053 0.0064 0.0079 0.0090]; x [1.2 2.1 1.8 2.5 2.2 3.1 2.9]; % 1. 统计实际时间间隔与平均间隔 dt diff(t); dt_mean mean(dt); fs_new round(1 / dt_mean); % 2. 构造新的均匀时间轴 t_new t(1) : dt_mean : t(end); if t_new(end) t(end) t_new [t_new, t_new(end) dt_mean]; % 确保覆盖完整段 end % 3. 三次样条插值 x_new interp1(t, x, t_new, spline); % 4. 验证重采样后的间隔 dt_check mean(diff(t_new)); disp([目标采样率: , num2str(fs_new), Hz]); disp([重采样后平均间隔: , num2str(dt_check), 秒]); % 5. 做FFT N length(x_new); X fft(x_new - mean(x_new)); % 去直流后再FFT f (0 : N-1) * (fs_new / N); % 频率轴 mag abs(X) / N * 2; % 单边幅度谱这里有几个细节要强调。fft之后计算幅度谱时常用的归一化方式是幅度除以N再乘以2得到单边幅度谱。但因为插值后的点数N不一定是2的幂次fft内部对非2幂次长度会用混合基算法计算速度稍慢但结果正确。如果数据点数特别多、想加快速度可在重采样后截取前缀到2的幂次长度或者直接调用fft不手动补零因为补零只会使频谱更平滑不会提高真实分辨率。4.3 处理方案二最小二乘频谱估计插值重采样处理非均匀数据会引入一个隐患插值本身相当于一个低通滤波过程会平滑掉一部分高频细节。如果原始数据的间隔不均匀程度很大插值结果与真实信号之间的偏差会明显增加。对这类数据另一种更精确的方法是做Lomb-Scargle周期图它能直接在非均匀采样点上估计功率谱不需要插值。Matlab自带的 plomb 函数可以实现。% 直接用非均匀采样数据计算Lomb-Scargle谱 t [0.0012 0.0025 0.0041 0.0053 0.0064 0.0079 0.0090]; x [1.2 2.1 1.8 2.5 2.2 3.1 2.9]; [pxx, f] plomb(x, t, normalized); plot(f, pxx); xlabel(Frequency (Hz)); ylabel(Power);plomb 返回的 pxx 是功率谱密度估计f 是频率向量。它的好处是不用选择插值方法、不用重采样直接代入原始数据即可。缺点是计算速度比FFT慢尤其数据量大时差距明显。因此工程上建议间隔偏差较小时用插值重采样法间隔波动剧烈或数据量适中时用Lomb-Scargle法。4.4 指定频率的提取技巧重采样和FFT之后真正的痛点往往变成“怎么把某个频率的幅值取出来”。比如你只关心256.3Hz这个频率上的幅值怎么做最准频谱的频率轴是按固定间隔步进的除非你运气特别好否则256.3Hz很可能不落在任何一条谱线上。最接近它的谱线位置计算方式是f_target 256.3; [~, idx] min(abs(f - f_target)); amp_at_target mag(idx); disp([目标频率: , num2str(f_target), Hz]); disp([最近谱线频率: , num2str(f(idx)), Hz]); disp([对应幅值: , num2str(amp_at_target)]);如果只是取最近谱线的值误差取决于频率分辨率。分辨率10Hz时256.3Hz偏差可以到0.3Hz幅度误差在5%以内如果分辨率1Hz误差就更小了。追求更准确的话可在目标频率附近做抛物线插值也叫谱峰插值取峰值谱线及左右两条谱线用三点抛物线拟合得到的峰值频率更接近真值% 三点抛物线谱峰插值 if idx 1 idx length(mag) y1 mag(idx-1); y2 mag(idx); y3 mag(idx1); delta 0.5 * (y1 - y3) / (y1 - 2*y2 y3); f_peak_corrected f(idx) delta * (f(2) - f(1)); amp_peak_corrected y2 - 0.25 * (y1 - y3) * delta; disp([插值后的峰值频率: , num2str(f_peak_corrected), Hz]); disp([插值后的峰值幅值: , num2str(amp_peak_corrected)]); end另一种常见需求是提取某个频带的总能量比如关心230Hz到280Hz之间的总振动能量。做法是对该频带内所有谱线求能量和band_idx find(f 230 f 280); band_energy sum(mag(band_idx).^2); % 频带能量按幅度平方累加注意计算频带能量时用幅度平方而不是直接用幅值因为能量正比于幅值的平方。如果后续要做多段对比建议把每条谱线先归一化再累加减少不同信号总体幅值差异带来的干扰。5. 容易被点名的进阶概念MFCC、倍频程与时域掩蔽5.1 MFCC特征提取的流程和用途MFCCMel频率倒谱系数是语音处理和音频识别中最经典的特征提取方法。它和普通频域特征最大的区别在于它不是直接使用频谱值而是在频谱基础上做了一层模拟人耳听觉特性的映射和压缩。完整流程是预加重、分帧、加窗、FFT、Mel滤波器组、取对数、离散余弦变换DCT、取前若干维系数。预加重是为了提升高频分量因为语音中的高频能量通常偏弱。分帧是把连续信号切成20ms到40ms的小段为了保证段与段之间连续分帧时相邻帧有50%左右的重叠。每帧加汉明窗后做FFT得到频谱。Mel滤波器组把频率轴按Mel尺度划分成若干个三角形滤波器每个滤波器的输出代表该频带内的能量。然后取对数模拟人耳对声音响度的对数感知最后做DCT得到倒谱系数。DCT之后取前12到13个系数就是MFCC特征。它为什么有效因为DCT具有非常好的去相关性能把Mel谱上相邻滤波器输出之间的冗余信息压缩掉让特征向量维度紧凑、独立性更强。语音识别系统几十年的实践证明MFCC在干净环境和噪声环境下都优于直接使用FFT谱线或线性预测系数。5.2 倍频程分析从频谱到1/3倍频程频域oct的原理是倍频程分析。倍频程Octave是指频率之比为2:1的频带范围。1/1倍频程就是把整个频段按每个频带的上限频率是下限频率的2倍来划分1/3倍频程是每个频带的上限频率是下限频率的2的1/3次方倍更细一些。划分后分别统计每个频带内的声压级或振动能量。倍频程分析在噪声测量和声学工程中几乎是标配。ISO标准里的噪声评价、听力保护标准、建筑声学测量都要求按1/1倍频程或1/3倍频程输出。原因很简单人耳对频率的感知本来就是等比划分的100Hz到200Hz之间和1000Hz到2000Hz之间的感知差异大致相当。而线性频率轴把低频段压得很窄、无法区分细节倍频程轴则能反映人耳实际的频率感受。Matlab频谱分析后做1/3倍频程的常见做法是定义标准中心频率如25Hz、31.5Hz、40Hz……20kHz按每个中心频率上下限滤波器或直接在频域积分频带能量。对于振动信号1/3倍频程能量谱常用于评价机器在不同频段的振动等级比只看总RMS更有诊断价值。5.3 时域掩蔽效应与特征提取的关联时域掩蔽temporal masking是听觉心理学中的一个概念但在信号处理的特征提取环节里它的思想经常被借用。比如语音增强算法里分析一个强声之后的短时间内人耳对弱声的感知阈值提高于是这个时间段内的噪声即使幅度较大感知上也不明显。基于这个掩蔽效应的算法可以在不强求完全消除噪声的情况下把感知噪声压到掩蔽阈值以下从而在保持语音自然度的前提下提升主观听感。在特征提取层面理解时域掩蔽可以帮你想明白一个问题为什么有些时候不必追求极高的时间分辨率当你做短时频谱分析时窗长越短时间分辨率越高但频率分辨率越差这就是时域与频域分辨率的折中本质上是时域不确定原理的体现。人耳的时域掩蔽说明人类听觉本身就接受这种折中。所以特征提取参数的选择不是时间分辨率越高越好而是需要根据目标频率精度来反推合适窗长。对语音识别帧长20ms到30ms是经验最优区间对旋转机械振动窗长则应覆盖至少2到3个旋转周期。5.4 滚动时域优化一个常被混淆的“时域”名词“滚动时域优化”在某些热搜里和特征提取放在一起但它其实是控制理论中的概念。滚动时域优化Receding Horizon Optimization也叫模型预测控制MPC的核心——每个控制周期都基于当前状态预测未来一段时域内的系统行为求解一个有限时域的优化问题只执行第一步然后下个周期滚动重复。它名字里的“时域”是指预测和控制的时间窗口不是信号处理里的时域分析。如果在搜索信号处理特征提取资料时碰到这个词不要混淆。它不参与MFCC、FFT之类的特征计算。这里顺带澄清另一个相关热词“方位向压缩是压缩的频域还是时域”。这属于合成孔径雷达SAR成像里的概念。方位向压缩是在方位向雷达平台运动方向进行匹配滤波本质上是把方位向信号与参考函数做相关运算既可以视为时域卷积操作也可以在频域通过相乘实现。因为匹配滤波在频域就是乘积所以工程实现上通常放到频域做。它不是信号特征提取的范畴但理解“在频域实现等效时域压缩”的思路对理解频域处理的桥梁作用很有帮助。6. 落地项目时绕不开的细节与取舍6.1 频谱泄漏与窗函数选择的经验法则FFT的频谱泄漏问题很多入门者一开始意识不到。加矩形窗信号截断的边缘会引入假的高频分量加汉宁窗泄漏减少了但主瓣变宽两个靠得很近的频率峰可能无法分开。根据信号特点选择窗函数的基本经验是分析连续平稳的振动信号、做常规频谱监测用汉宁窗频谱主瓣与旁瓣综合平衡最好。分析瞬态冲击信号用矩形窗保留冲击的完整时域特征。需要精确测量幅值平顶窗flat top的幅值精度最高但主瓣最宽。需要分离两个幅度差异很大、频率接近的成分布莱克曼窗的旁瓣衰减最快适合压制弱峰被强峰拖尾掩盖的问题。这些选择直接影响后续频域特征主频、谱质心、频带能量的准确性。频谱泄漏严重的FFT做出来的谱质心会偏向高频方向因为泄漏把低频主峰的能量向两侧铺开。6.2 频带划分的实践原则频带能量是故障诊断中使用频率最高的频域特征但频带怎么划分很多人凭感觉拍脑袋。划分方式不同特征对故障的敏感度差别很大。频带划分的基本原则是围绕设备的结构特征频率展开。旋转机械的振动频谱往往形成以转频 (f_r) 为基频、包含整数倍频的谱线族。诊断时可以按1倍频到10倍频逐条提取窄带能量或者按低频段1倍频、1倍频附近、2倍频附近、3到5倍频、6到10倍频、高频段10倍频分成几大块。这样划分的物理含义很清晰不平衡主要激起1倍频不对中通常激起2倍频的显著增大松动和裂纹往往在不同倍频上产生不同模式的响应。齿轮箱诊断往往会按啮合频率 (f_m Z \cdot f_r)Z为齿数及其上下边带频率来划分频带。啮合频率附近的边带能量增加代表齿轮存在局部损伤或齿面磨损。轴承诊断则围绕轴承特征频率外圈BPFO、内圈BPFI、滚动体BSF、保持架FTF计算窄带能量。频带划分不该随意选择应该根据对象结构的传动机理去定。6.3 站在模型视角反推特征质量如果你做特征提取的目的是喂给机器学习模型做故障分类建议先想清楚模型需要什么样的特征再决定提取方案而不是先一股脑提取几百个特征再说。特征的质量要从四个维度去评估可分性不同类别之间特征值的差异是否明显大于同类别内部的波动。可以用类间距离与类内方差的比值衡量。稳定性同一设备在相同工况下反复测量特征值重复性如何。时域RMS这类统计量稳定性好而瞬时峰值的稳定性相对较差。物理可解释性特征出了问题能不能回到物理层面解释。峭度升高对应冲击谱质心偏移对应能量重心改变——这些都可以解释。线性组合出来不知所云的抽象特征用于论文可以用于现场诊断要谨慎。鲁棒性特征值在工况波动转速、负载变化下是否剧烈突变。如果转速从1000转/分跳到3000转/分特征值变化比故障引起的还要大必须做工况归一化或分段建模。经验数据表明在工业故障诊断项目中往往20到30个精心挑选的时域加频域特征配合树模型或线性模型就能达到90%以上的分类准确率。不是特征越多越好而是需要覆盖信号的不同侧面、有物理依据、计算稳定。真正决定模型上限的往往是对特征物理含义的深度理解而不是算法本身。6.4 时域频域特征联合使用的典型套路实际项目里最有效的做法不是单独使用时域特征或频域特征而是把两组特征组合成一个向量再进入分类器或回归模型。我惯用的组合方式是先计算时域特征包均值、RMS、峰峰值、峭度、偏度、峰值因子再从功率谱中提取频域特征包主频、谱质心、1倍频到10倍频窄带能量、低中高频段能量占比。然后把两组特征拼在一起做特征归一化一般用z-score再送入模型训练。归一化这步必须做因为特征值的量纲差异很大峭度可能在3到10之间RMS可能是0.01到10窄带能量可能是1e-5量级。如果不归一化量纲大的特征在距离计算中会彻底压制量纲小的特征模型就学不到峭度、峰值因子这些敏感指标的作用了。归一化参数必须只基于训练集计算再用同一套参数对测试集做变换否则会造成数据泄漏、高估模型性能。另外当转速或负载在工作过程中有变化时建议先把特征值按转速/负载分箱归一化再做建模。比如转速在1000转/分和3000转/分时同样的故障引起的RMS会差出好几倍不做工况归一化模型会把转速差异误判为故障差异误报率居高不下。6.5 工程中容易忽略的几个小细节最后分享几个经常在项目里踩到、但参考资料很少提起的细节。第一FFT之后取幅度谱时别忘了去除FFT点数N造成的缩放效应。很多人直接用 abs(fft(x)) 取出来的值当幅值用结果比自己预期大了N倍懵了半天。完整的幅值计算是 abs(fft(x)) / N单边谱再乘2。这个细节写进各种教程里都有但实际项目里因为复制粘贴旧代码导致的结果错误我遇见过不止一次。第二计算频带能量时直流分量0Hz要单独处理或直接丢弃。直流分量反映的是传感器零偏或均值不属于交流振动能量。如果不剔除当传感器存在漂移时低频段能量会被直流偏置严重影响特征失真。第三波形数据采集时的抗混叠滤波器比事后一切处理都重要。硬件上如果没有抗混叠滤波高于奈奎斯特频率的信号会折叠回分析频带产生假峰。这类假峰在频域特征里要么造成主频错位要么在高频段产生虚假能量。事后软件处理很难完全纠回只能在采样环节就保证硬件的抗混叠设计合格。第四长时程数据的稳定性评估。做设备健康监测时单条数据的特征值没有意义必须连续采集多段数据做特征值随时间的变化趋势分析。单独一次峭度从3升到4可能是噪声扰动连续五段都稳定在4以上且持续升高才是真正的异常征兆。趋势信息往往比单点阈值更具诊断价值。6.6 什么时候该信时域特征什么时候该信频域特征把时域特征和频域特征放在一起对比后我会给出一个简单的决策经验当故障表现的差异主要体现在幅值水平剧烈变化、冲击特性突出时时域特征优先。例如转子碰磨、轴承初期冲击、传感器松动。当故障差异主要体现在频率成分分布变化而总体能量几乎不变时频域特征优先。例如齿轮磨损引起的谐波变化、共振频率偏移、轴承损伤由外圈向内圈转移引起的特征频率变化。当两者结论矛盾时先查数据质量确认采集链路没有异常再回到现场核对设备实际状态。数据质量问题的概率远高于算法问题。能覆盖更多信号信息不等于越复杂越好。特征提取的核心是找到与目标物理过程强相关的可测量量它需要数字上的可计算性也需要物理上的可解释性。时域和频域只是两个入口真正有价值的是你判断特征与对象状态关联的能力。本文还有配套的精品资源点击获取
返回列表