简介:本资源是一份面向信号处理初学者与工程实践者的时域特征提取入门工具包,聚焦于从原始时间序列中高效提取具有物理意义的统计与形态类特征,解决分类、故障诊断、生物信号分析等任务中的特征工程瓶颈问题。压缩包共2个文件(11KB),含MATLAB核心脚本timeDomainFeatures.m——可直接调用计算平均值、标准差、峰峰值、自相关、路径长度等10类常用时域指标;另附详实的Word文档《时域特征提取》,系统梳理概念原理、公式推导、适用场景及医学ECG、工业振动等典型应用案例。目前已有2063人学习下载,内容兼顾理论严谨性与代码实用性,既可作为课程实验补充材料,也适合作为语音识别、设备状态监测等项目中快速部署的轻量级特征提取模块。
1. 从信号到信息:为什么我们需要时域特征
在信号处理的世界里,我们每天面对的都是海量的、看似杂乱无章的波形数据。无论是工业设备传回的振动信号,还是医疗设备捕捉到的心电图,亦或是金融市场的价格波动曲线,它们本质上都是一串随时间变化的数字序列。直接面对这些原始数据,我们往往一头雾水,无法直接判断一台机器是否即将故障,一个心跳是否异常,或者一段语音表达了什么情绪。
这就好比给你一张记录了某城市24小时内所有车辆位置和速度的原始数据表,你很难一眼看出“今天交通是否拥堵”。但如果你计算出“平均车速”、“拥堵路段占比”、“最高车速与最低车速的差值”这些指标,交通状况就一目了然了。时域特征提取,做的正是这样一件事:它从原始的时间序列信号中,计算出一系列有明确物理或统计意义的数值指标,将冗长、高维的波形数据,压缩成低维、可解释的特征向量,从而为后续的分析、诊断、分类和决策提供直接的依据。
没有特征提取,机器学习模型就相当于在“阅读”天书;没有合适的特征,再先进的算法也难以发挥威力。时域特征因其计算简单、物理意义清晰、对计算资源要求低,成为信号分析中最基础、最常用,也往往是第一步的特征工程手段。今天,我们就深入聊聊时域特征提取的那些门道,从最基础的统计量,到进阶的波形指标,再到实际工程中的选型心得与避坑指南。
2. 基础统计特征:信号的第一张“体检报告”
当我们拿到一段信号,最先做的往往是计算它的一些基本统计量。这就像给人做体检,先量身高、体重、血压一样,能快速建立一个整体印象。这些特征完全在时间维度上计算,不涉及频率变换,是最典型的时域特征。
2.1 中心趋势与离散程度:均值、方差与标准差
假设我们有一段信号序列 ( X = [x_1, x_2, ..., x_N] ),其中 N 是采样点数。
均值:信号的平均水平,反映了信号的直流分量或静态偏移。 [ \mu = \frac{1}{N} \sum_{i=1}^{N} x_i ] 在振动分析中,均值过大可能表示传感器存在零漂或安装基准面有问题;在声音信号中,均值接近零通常是正常的。
方差与标准差:衡量信号围绕均值的波动剧烈程度,是信号“能量”或“活力”的重要指标。 [ \sigma^2 = \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2 ] [ \sigma = \sqrt{\sigma^2} ] 标准差 (\sigma) 具有和原始信号相同的量纲,更直观。例如,在轴承故障诊断中,随着故障发展,振动信号的方差和标准差通常会显著增大。
注意:计算样本方差时,有时会使用 (N-1) 作为分母(无偏估计),但在特征工程中,我们更关注特征值相对变化而非绝对无偏性,使用 (N) 作为分母更为常见,且与后续其他特征计算保持一致。
2.2 分布形态:偏度与峰度
均值和方差描述了分布的位置和散度,但无法区分分布的形状。偏度和峰度弥补了这一点。
偏度:衡量信号概率分布的不对称性。 [ Skewness = \frac{\frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^3}{\sigma^3} ]
- 偏度 ≈ 0:分布大致对称(如正态分布)。
- 偏度 > 0:正偏态,分布右侧有长尾,均值 > 中位数。在机械冲击信号中常见,表明存在大幅值的正向冲击。
- 偏度 < 0:负偏态,分布左侧有长尾。
峰度:衡量信号分布曲线尖峭或扁平的程度,常以正态分布为基准(峰度=3)。 [ Kurtosis = \frac{\frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^4}{\sigma^4} ]
- 峰度 > 3:分布比正态分布更尖峭、尾部更厚。这是滚动轴承故障诊断中的一个黄金指标。故障产生的周期性冲击会使信号中出现大量远离均值的峰值,导致峰度值显著升高,对早期故障非常敏感。
- 峰度 < 3:分布比正态分布更扁平。
在实际应用中,我习惯将峰度值减去3,得到“超额峰度”,这样正态分布对应0,正值表示重尾,更符合直觉。
2.3 极值信息:峰值、峰峰值、裕度因子
对于冲击类故障,信号的极值包含重要信息。
峰值:信号绝对值的最大值。( Peak = max(|x_i|) )。它直接反映了信号可能出现的最大瞬时幅值,与设备的瞬时负载或冲击强度相关。
峰峰值:信号最大值与最小值的差值。( P-P = max(x_i) - min(x_i) )。它描述了信号的整体波动范围,在评估信号动态范围或ADC量程是否合适时非常有用。
裕度因子:这是一个对冲击异常敏感的无量纲指标。 [ Clearance Factor = \frac{Peak}{(\frac{1}{N} \sum_{i=1}^{N} \sqrt{|x_i|})^2} ] 它的分母是方根幅值的平方,当信号中出现个别极大值的冲击时,分子急剧增大,而分母变化相对较小,因此裕度因子会剧烈增大。它在监测齿轮、轴承的早期点蚀故障时,效果有时比峰度更明显。
这些基础统计特征计算速度快,意义明确,构成了时域特征的基石。通常,我们会将它们作为一个特征集合一起提取,为模型提供信号的多角度“素描”。
3. 进阶波形特征:刻画信号的“轮廓”与“节奏”
基础统计特征描述了信号的“体质”,而进阶波形特征则试图刻画信号的“形态”和“变化规律”。这些特征对于区分不同类型的波形模式(如周期性冲击、随机振动、正弦波动)至关重要。
3.1 波形指标:形状因子、峰值因子、脉冲因子
这是一组经典的无量纲指标,在旋转机械故障诊断中应用极广。它们的特点是对故障敏感,但对信号幅值和频率不敏感,非常适合用于状态监测的阈值报警。
均方根值:也称为有效值,首先需要明确,因为它常作为分母。 [ RMS = \sqrt{\frac{1}{N} \sum_{i=1}^{N} x_i^2} ] 对于交流信号,RMS值代表了信号的平均功率。它是振动烈度的标准度量。
峰值因子:峰值与RMS值的比值。 [ Crest Factor = \frac{Peak}{RMS} ]
- 对于纯粹的正弦波,峰值因子约为1.414。
- 当信号中出现稀疏的、高幅值的冲击(如轴承内圈故障)时,峰值会显著增加,而RMS值可能增加不大,导致峰值因子升高。
- 经验之谈:峰值因子特别适用于发现早期局部故障。但需要注意,当故障发展到非常严重时,冲击变得密集,RMS值也会大幅上升,峰值因子反而可能下降。因此,它是一个很好的早期预警指标,但不适合用于评估故障严重程度。
脉冲因子:峰值与绝对平均值的比值。 [ Impulse Factor = \frac{Peak}{\frac{1}{N} \sum_{i=1}^{N} |x_i|} ] 其物理意义与峰值因子类似,但对冲击同样敏感。绝对值平均值计算比RMS更快,在嵌入式设备中更有优势。
形状因子:RMS值与绝对平均值的比值。 [ Shape Factor = \frac{RMS}{\frac{1}{N} \sum_{i=1}^{N} |x_i|} ]
- 对于正弦波,形状因子约为1.11。
- 这个指标对波形形状的变化比较敏感。当信号从正弦波变为方波或含有谐波时,形状因子会改变。
在实际项目中,我通常会同时计算峰值因子和脉冲因子,观察它们的变化趋势。如果两者同步快速增长,是冲击性故障的强有力指示。
3.2 时序相关性特征:自相关与互相关
相关性特征揭示了信号自身或信号之间在不同时间点上的关联程度。
自相关函数:描述信号(x(t))与其自身经过时延(\tau)后的信号(x(t+\tau))的相似性。 [ R_{xx}(\tau) = \frac{1}{N} \sum_{t=1}^{N-\tau} x(t) \cdot x(t+\tau) ] (为简化,未做去均值等处理,实际计算常使用协方差形式)。
- 在(\tau=0)时,自相关值最大,等于信号的均方值。
- 对于周期性信号,自相关函数也会呈现出相同的周期。这个特性非常有用:在强噪声背景下,直接观察原始信号可能看不到周期,但计算自相关函数后,噪声成分(随机不相关)会相互抵消,而周期性成分会被增强,从而清晰地暴露出来。这对于从嘈杂信号中提取故障特征频率至关重要。
互相关系数:如果需要比较两个不同信号(如两个通道的振动)在零时延下的整体相似性,可以使用皮尔逊相关系数。 [ \rho_{xy} = \frac{\sum (x_i - \mu_x)(y_i - \mu_y)}{\sqrt{\sum (x_i - \mu_x)^2 \sum (y_i - \mu_y)^2}} ] 其值在[-1, 1]之间。1表示完全正相关,-1表示完全负相关,0表示不相关。在多传感器系统中,可以用它来判断故障发生的部位(例如,靠近故障源的传感器信号之间相关性会更高)。
3.3 基于直方图的特征:熵与能量
将信号的幅值范围划分为若干个区间(bin),统计信号值落在每个区间内的点数,形成幅值直方图。基于这个直方图,可以计算信息熵。
幅值域熵:反映了信号幅值分布的不确定性或混乱程度。 [ H = -\sum_{k=1}^{M} p_k \cdot \log_2(p_k) ] 其中,(M)是直方图区间数,(p_k)是信号值落在第k个区间的概率(频率)。
- 当信号幅值分布非常均匀(接近均匀分布)时,熵值较大。
- 当信号幅值集中在少数几个区间(如健康的周期性信号)时,熵值较小。
- 当设备发生故障,信号中引入随机冲击或噪声时,幅值分布可能变得更“散”,导致熵值增大。熵特征在轴承和齿轮箱的退化评估中常有应用。
波形能量:虽然有时被归为时域特征,但更严格地说,它是基于幅值的。即信号各点幅值平方和:( Energy = \sum_{i=1}^{N} x_i^2 )。它与RMS值直接相关((Energy = N * RMS^2)),通常用于需要衡量整体能量大小的场景。
4. 工程实践:特征提取流程、陷阱与调优心法
理论上的特征琳琅满目,但落到实际工程代码和项目中,如何高效、可靠地提取特征,并让它们真正发挥作用,才是考验功力的地方。这一部分,我结合多次踩坑的经验,分享一套可落地的实践流程和关键注意事项。
4.1 标准化的特征提取流水线
一个健壮的特征提取流程,绝不仅仅是调用几个库函数。以下是我推荐的步骤:
数据预处理(前置清洗):
- 去趋势:使用线性拟合或滑动平均,移除信号中缓慢变化的趋势项。趋势项会严重影响均值、方差等特征。对于振动信号,这通常是必须步骤。
- 去直流:直接减去信号均值。确保后续分析针对交流分量。
- 异常值处理:对于因传感器失灵或电磁干扰产生的瞬态尖峰,需要采用阈值法或中值滤波进行剔除或平滑,否则峰值、峰度等特征会被严重扭曲。
- 标准化/归一化:如果特征要输入机器学习模型,通常需要进行标准化(减均值除以标准差)或归一化(缩放到[0,1])。关键点:务必用训练集的统计量(均值、标准差、最大最小值)来转换验证集和测试集!这是新手常犯的错误,会导致数据泄露,模型评估结果虚高。
滑动窗口分割: 对于长时间序列,我们需要将其切分成一个个短时窗口进行分析。窗口长度是关键参数。
- 原则:窗口应至少包含主导频率成分的多个周期。例如,对于转频为10Hz的设备,采样率1000Hz,一个周期100个点。窗口长度通常取512、1024、2048等2的幂次方(便于FFT)。对于10Hz,1024点约1秒,包含了10个周期,通常足够。
- 重叠率:为了增加数据量和平滑分析结果,相邻窗口可以重叠50%-75%。重叠越高,生成的特征序列越平滑,但计算量和数据冗余也越大。
特征计算与向量化: 对每个窗口,并行计算所有选定的时域特征,形成一个特征向量。假设我们选了10个特征,处理1000个窗口,就会得到一个1000x10的特征矩阵。这里强烈建议使用向量化计算库(如NumPy),避免在Python中写for循环,效率有数量级提升。
特征后处理:
- 缺失值处理:某些特征在特殊信号下可能计算无效(如除零)。需要填充(用前后值或均值)或剔除该窗口。
- 平滑滤波:生成的特征序列可能仍有毛刺,可以用滑动平均或低通滤波进行平滑,使趋势更明显。
4.2 特征选择与评估:避免“维度诅咒”
提取出几十个特征后,不能一股脑儿扔给模型。无关或冗余的特征会降低模型性能、增加过拟合风险、拖慢训练速度。
过滤法:快速初筛。
- 方差阈值:移除方差接近0的特征(即该特征在所有样本上几乎不变)。
- 相关性分析:计算特征与目标标签的相关性(对于分类/回归问题),保留相关性高的。同时,计算特征之间的相关性,如果两个特征高度相关(如RMS和方差),保留一个即可。
包裹法:以模型性能为导向。 使用递归特征消除等算法,看模型在特征子集上的表现。效果最好,但计算成本高。
嵌入式法:模型自带选择。 使用L1正则化(Lasso)的线性模型,或基于树模型的特征重要性排序。这是实践中平衡效果与效率的常用方法。
我的常用策略:先计算所有基础时域特征(约15-20个),然后用树模型(如随机森林或XGBoost)跑一遍初步训练,根据特征重要性排序,剔除重要性为0或极低的特征。对于剩余特征,观察两两相关性热力图,手动剔除一些物理意义重复的。
4.3 实战中的高频“坑点”与应对策略
坑点一:采样率与混叠。这是根源性错误。如果采样频率 (f_s) 不满足奈奎斯特采样定理((f_s > 2f_{max}),(f_{max})是信号最高频率),高频成分会混叠到低频中,所有时域特征都会失真。对策:在传感器和ADC之前,必须使用抗混叠滤波器。明确你关心的最高频率,并设置至少2.5倍以上的采样率。
坑点二:非平稳信号的窗口陷阱。时域特征默认假设信号在分析窗口内是平稳的。对于转速剧烈变化(如启动、停机)的设备,这个假设不成立。对策:对于变速工况,要么采用阶次分析转为角域平稳信号再提取特征,要么使用极短的窗口(但会损失频率分辨率),要么转向时频分析(如小波变换)。
坑点三:特征对负载/转速敏感。很多时域特征(如RMS、峰值)会随设备负载和转速变化而自然变化,这可能掩盖故障引起的微小变化。对策:使用无量纲指标(峰值因子、脉冲因子、峰度),它们对运行条件的变化相对不敏感。或者,建立不同工况下的基线模型,进行相对比较。
坑点四:计算效率与实时性。在嵌入式设备或需要处理海量数据的场景,计算所有特征可能吃不消。对策:进行性能剖析,找出计算瓶颈。方差、均值等可迭代计算;峰度、偏度涉及高次幂,较慢。根据业务需求精选最有效的几个特征。对于滑动窗口,可以利用重叠窗口间数据的相关性,优化计算,避免重复运算。
5. 案例深潜:基于时域特征的滚动轴承故障诊断
让我们通过一个经典场景——滚动轴承故障诊断,来串联上述所有知识。假设我们有一个驱动电机轴承的振动加速度信号,采样频率12.8kHz,我们怀疑其外圈存在早期点蚀故障。
5.1 故障机理与特征预期
滚动轴承外圈故障会产生周期性的冲击脉冲,脉冲重复频率称为外圈故障频率(BPFO),由轴承几何参数和转速决定。这些冲击会激发传感器及结构的固有频率,形成一系列衰减振荡波形。在时域上,我们预期看到:
- 信号幅值整体可能略有上升(RMS增大)。
- 信号中会出现周期性的、幅值远高于背景振动的冲击脉冲(峰值、峰峰值增大)。
- 由于冲击脉冲的稀疏性和高幅值,信号的分布会偏离正态分布,出现重尾(峰度、裕度因子显著增大)。
- 脉冲的周期性可能被噪声淹没,但在自相关函数中会显现。
5.2 特征提取与对比分析流程
我们采集了健康状态和故障状态下的多段振动信号。处理流程如下:
- 数据准备:对每段信号去直流、去趋势(高通滤波)。截取稳定转速下的数据段。
- 窗口划分:取窗长8192点(约0.64秒),重叠率50%。确保窗口包含足够多的转频周期和可能的故障冲击周期。
- 特征计算:对每个窗口计算一个包含以下特征的向量:
- 基础统计:均值、标准差、偏度、峰度(超额峰度)。
- 波形指标:峰值、峰峰值、RMS、峰值因子、脉冲因子、裕度因子。
- 其他:波形因子、幅值域熵。
- 特征聚合:对于每个状态(健康/故障),我们得到了多个窗口的多个特征值。通常,我们计算每个特征在所有窗口上的平均值(或中位数)作为该状态样本的最终特征值。
为了直观对比,我们可以将健康与故障状态的特征值列成表格:
| 特征指标 | 健康状态 (平均值) | 故障状态 (平均值) | 变化幅度 | 敏感度评价 |
|---|---|---|---|---|
| RMS | 0.15 m/s² | 0.21 m/s² | +40% | 中等,受工况影响大 |
| 峰值 | 1.2 m/s² | 3.8 m/s² | +217% | 高,但易受偶发噪声干扰 |
| 标准差 | 0.148 m/s² | 0.208 m/s² | +41% | 同RMS |
| 峰度 (超额) | -0.1 | 5.2 | 急剧增大 | 非常高,早期故障敏感 |
| 峰值因子 | 8.1 | 18.3 | +126% | 非常高,对冲击特异 |
| 脉冲因子 | 7.5 | 16.9 | +125% | 非常高,与峰值因子互补 |
| 裕度因子 | 5.6 | 12.4 | +121% | 高,对稀疏冲击敏感 |
| 幅值熵 | 4.5 bit | 5.8 bit | +29% | 中等,趋势性变化 |
从上表可以清晰看出:
- 峰度、峰值因子、脉冲因子、裕度因子这四个无量纲指标在故障状态下发生了数量级或翻倍的增长,变化最为剧烈,是诊断外圈故障的强特征。
- RMS和标准差也有增长,但变化比例不如前者,且更容易受到设备负载变化的影响。
- 峰值虽然增长很大,但单一点的特异性太强,容易受非故障冲击(如碰撞)干扰。
5.3 特征趋势分析与阈值设定
在实际监测中,我们更关注特征随时间的变化趋势。我们可以每天计算轴承振动信号的特征值,绘制其趋势图。
假设我们以峰值因子和峰度作为主要监测指标。在设备运行初期,建立其健康状态的基线值(例如,峰值因子基线=8.0,峰度基线=3.0)和正常波动范围(如±2倍标准差)。
当连续多个点的特征值超过基线值的2.5倍(或超过统计控制上限),并且呈现持续上升趋势时,就可以触发预警。相比于设定一个固定的绝对阈值,这种基于历史基线的相对阈值方法,更能适应不同设备、不同工况的个体差异。
一个重要的心得:不要依赖单一特征做判断。应该观察一个特征集合(如“峰度+峰值因子+脉冲因子”)的协同变化。如果它们同步增长,是故障的强证据;如果只有某一个特征突变,则需要排查是否是测量干扰。
6. 超越基础:时域特征的融合与创新思路
纯粹的时域分析有时会遇到瓶颈,比如对复合故障、微弱故障区分度不够。这时,我们需要更巧妙的思路。
6.1 时域特征的组合与派生
我们可以将基础特征进行组合,创造出物理意义更强的新特征。
- 脉冲-峰度比:( \frac{Impulse Factor}{Kurtosis} )。尝试刻画冲击的“尖锐度”与分布“重尾性”之间的关系。
- 波形复杂度:可以尝试用多个波形指标(形状因子、峰值因子、脉冲因子)的熵或主成分来综合描述。
- 差分特征:计算原始信号的一阶差分(近似导数)序列,再对这个差分序列提取同样的时域特征集。差分序列放大了信号的变化率,对冲击的上升沿和下降沿更敏感,可能揭示出原始信号中不明显的信息。
6.2 与频域特征的融合
时域特征和频域特征(从FFT频谱中提取,如重心频率、均方频率、频率熵等)是从不同角度描述信号。它们不是替代关系,而是互补关系。
- 早期故障:时域的峰度、峰值因子可能更敏感。
- 发展期故障:频域中故障特征频率的幅值增长会更明显。
- 复合故障:需要同时观察时域波形和频谱图。
最常用的方法就是特征融合:将时域特征向量和频域特征向量拼接成一个更长的“时频联合特征向量”,输入给分类器(如SVM、神经网络)。这往往能获得比单一域特征更好的分类精度。
6.3 基于深度学习的端到端特征学习
这是当前的前沿方向。我们不再手动设计峰度、峰值因子等特征,而是将原始的时域信号切片直接输入一维卷积神经网络(1D-CNN)或Transformer模型。模型的底层卷积核会自动学习到类似于滤波器的作用,高层网络则自动组合出对分类任务最有效的抽象特征。
这种方法优势明显:省去了复杂的特征工程,理论上能学到更优的特征表示。但其劣势同样突出:需要大量的标注数据,模型是“黑箱”,可解释性差,在工业界对可靠性要求极高的领域,工程师往往更信任机理清晰的传统特征。目前一个折中的方案是,将手工特征作为补充,与深度学习模型提取的特征一同使用。
从我个人的项目经验来看,对于数据量有限、对可解释性要求高的传统工业场景,精心设计和选择的时域特征集合依然是性价比最高、最可靠的方案。而对于互联网、语音等数据丰富且模式复杂的场景,端到端深度学习正逐渐成为主流。理解时域特征的原理,不仅能让我们用好它,更是我们理解更高级方法的基础。当你看到CNN学习到的特征图时,如果能联想到它可能是在提取某种“非线性峰度”或“局部脉冲模式”,你的理解层次就完全不一样了。特征提取,终究是连接物理世界与数字智能的桥梁,而时域,是这座桥梁最坚实、最直观的起点。
本文还有配套的精品资源,点击获取