3. 信号处理与特征工程:从原始数据到故障指纹

大家好,我是老张。在设备维护这行摸爬滚打了十几年,今天咱们聊聊信号处理与特征工程。说白了,就是把传感器采集的那些“乱七八糟”的原始数据,变成能反映设备健康状态的“故障指纹”。

你想想看,传感器每秒采几千个点,直接拿这些数去判断设备好坏?那肯定不行。我们需要一套“翻译”方法,把时域、频域、时频域的信息都挖出来,再挑出最有用的特征。嗯,这就是本章要讲的核心。

3.1 时域分析:最直观的“体检报告”

时域分析,就是直接看信号随时间怎么变。我习惯把它比作人的体温、心率——简单直接,但信息量有限。

3.1.1 均值(Mean)

均值反映信号的直流分量。比如一个振动传感器,如果均值突然漂移,说明传感器可能坏了,或者设备有静载荷变化。我在项目里遇到过,一个泵的均值缓慢上升,最后发现是轴承磨损导致轴心偏移。

import numpy as np
signal = np.array([...])  # 你的振动数据
mean_value = np.mean(signal)
print(f"均值: {mean_value:.4f}")

3.1.2 峰值(Peak Value)

峰值就是信号的最大绝对值。它很敏感,能快速捕捉冲击信号。但要注意,峰值容易受噪声干扰。我曾经因为一个螺丝松动,峰值瞬间跳了3倍,差点误报成轴承碎裂。

避坑指南: 我曾经用峰值做早期预警,结果发现每次换刀时都会触发。后来加了“持续超过阈值时间”的条件,才把误报率降下来。

3.1.3 均方根值(RMS)

RMS是时域分析里最常用的特征之一。它代表信号的能量水平。对于旋转机械,RMS值稳定上升,往往意味着磨损在加剧。我个人习惯用RMS做长期趋势监控,因为它比峰值稳定得多。

rms_value = np.sqrt(np.mean(signal**2))
print(f"RMS: {rms_value:.4f}")
特征 物理含义 适用场景 我的经验
均值 直流分量 传感器漂移、静载荷变化 配合温度看,效果更好
峰值 最大冲击 早期冲击故障 容易误报,需加滤波
RMS 信号能量 磨损、不平衡 长期趋势监控首选

3.2 频域分析:用FFT看“频谱指纹”

时域看不出来的东西,频域一眼就能发现。比如一个齿轮有裂纹,时域波形可能只是微微抖动,但频谱里会出现边频带。这就是FFT(快速傅里叶变换)的威力。

3.2.1 FFT 基础

FFT把时域信号转换到频域,告诉我们信号里包含哪些频率成分,以及各自的幅值。说白了,就是给信号做“光谱分析”。

from scipy.fft import fft, fftfreq
N = len(signal)
T = 1.0 / fs  # 采样间隔
yf = fft(signal)
xf = fftfreq(N, T)[:N//2]
amplitude = 2.0/N * np.abs(yf[:N//2])

3.2.2 频谱分析实战

拿到频谱后,我们主要看几个东西:

  • 转频及其谐波:判断不平衡、不对中
  • 边频带:齿轮故障、轴承故障的典型特征
  • 高频段能量:摩擦、气蚀等异常

我记得有一次,一个风机振动超标。时域RMS只高了15%,但频谱里出现了明显的2倍转频谐波。我判断是不对中,结果拆开一看,联轴器胶垫已经磨掉了一半。

核心要点: 频谱分析的关键是“知道正常长什么样”。我建议每个设备都建一个“基线频谱”,以后对比着看。

3.3 时频分析:小波变换的“显微镜”

FFT有个局限——它假设信号是平稳的。但实际设备信号往往是非平稳的,比如启动瞬间、冲击响应。这时候就需要时频分析。小波变换就像一把“显微镜”,能同时看清时间和频率的局部变化。

3.3.1 为什么需要小波?

短时傅里叶变换(STFT)也能做时频分析,但它有个矛盾:时间分辨率高,频率分辨率就低;反之亦然。小波变换通过可变窗口解决了这个问题。低频用宽窗口,高频用窄窗口,非常巧妙。

3.3.2 小波变换实战

import pywt
coeffs, freqs = pywt.cwt(signal, scales=np.arange(1, 128), wavelet='cmor')
# coeffs 就是时频矩阵,可以画成热力图

我在做轴承故障诊断时,经常用小波变换提取“冲击成分”。因为轴承故障信号是周期性的冲击,在时频图上会呈现“竖条纹”模式。这个特征在FFT里很难直接看到。

小技巧: 小波基函数的选择很重要。我一般先用'db4'或'cmor'试试,效果不好再换。没有绝对最好的,只有最适合你数据的。

3.4 特征选择与降维:PCA 的“降维打击”

好,现在你从时域、频域、时频域提取了几十个特征。然后呢?全部扔进模型?那会“维度灾难”——计算慢、过拟合、解释性差。我们需要做特征选择与降维。

3.4.1 为什么要降维?

  • 减少计算量:几十个特征变成几个主成分
  • 去除冗余:很多特征之间高度相关
  • 提升泛化能力:减少过拟合风险

3.4.2 PCA 主成分分析

PCA 的原理不复杂:找到数据方差最大的方向,把数据投影上去。第一个主成分捕获最大方差,第二个次之,以此类推。通常前几个主成分就能解释90%以上的信息。

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# 标准化很重要!否则量纲大的特征会主导
X_scaled = StandardScaler().fit_transform(X)
pca = PCA(n_components=0.95)  # 保留95%方差
X_pca = pca.fit_transform(X_scaled)
print(f"原始特征数: {X.shape[1]}, 降维后: {X_pca.shape[1]}")
我的经验: 别盲目用PCA。如果特征本身就有明确的物理意义(比如RMS、峰值),我建议先做特征选择,保留最关键的3-5个。PCA适合特征太多、且物理意义不明确的情况。

3.4.3 特征选择的其他方法

方法 原理 适用场景
方差阈值 去掉方差太小的特征 初步筛选
相关系数 去掉高度相关的特征 去除冗余
随机森林重要性 用模型评估特征贡献 有标签数据

我个人习惯先用随机森林跑一遍特征重要性,把排名靠后的砍掉。然后再用PCA做最终降维。这样既保留了物理意义,又控制了维度。

信号处理与特征工程知识体系 原始振动/温度/电流数据 时域分析 频域分析 时频分析 均值 峰值 RMS FFT 频谱 边频带 小波变换 STFT 时频图 特征选择与降维(PCA、随机森林等)

好了,以上就是信号处理与特征工程的核心内容。从时域的均值、峰值、RMS,到频域的FFT频谱,再到时频域的小波变换,最后用PCA等工具做降维。每一步都有它的价值,也都有坑。我踩过的坑不少,希望你能少走弯路。

记住一句话:特征工程决定了模型的上限,而模型只是逼近这个上限。把信号处理基本功打扎实,你的预测性维护系统就成功了一半。

专注资料整理