
1. 信号特征提取的核心价值与分类体系在工业设备监测、医疗诊断、语音识别等实际场景中原始信号就像未经雕琢的玉石蕴含着宝贵信息却难以直接利用。三年前我在轴承故障诊断项目中就深有体会——当面对数GB的振动数据时如何提取出反映故障特征的关键指标成为最大挑战。时频域特征提取正是解决这类问题的金钥匙它能将杂乱无章的波形转化为具有物理意义的特征向量。特征提取方法通常分为四大类每类都有独特的观察视角时域特征直接观察信号波形适合捕捉幅值变化和统计规律频域特征通过傅里叶变换观察频谱擅长分析周期性成分时频域特征如小波兼顾时域和频域特别适合非平稳信号信息熵特征量化信号复杂度在故障早期预警中效果显著关键认知没有绝对最优的特征提取方法实际项目中往往需要组合多种特征。比如在旋转机械故障诊断中我们同时使用时域峭度对冲击敏感和小波包能量熵捕捉频带能量变化的组合特征。2. 时域特征全解析与MATLAB实战2.1 基础统计特征群这组特征计算简单却非常实用在Python中用numpy就能轻松实现但在MATLAB中更推荐使用内置函数以保证计算效率% 加载示例信号替换为实际信号 load(vibration.mat); signal vibration(1:2000); % 基础特征计算 mean_val mean(signal); % 均值 std_val std(signal); % 标准差 rms_val rms(signal); % 均方根 kurtosis_val kurtosis(signal); % 峭度 skewness_val skewness(signal); % 偏度实测发现当采样率超过100kHz时使用movmean等滑动窗口函数比整体计算更能捕捉瞬时特征。2.2 波形因子与冲击指标这三个关联因子是机械故障诊断的黄金指标peak_val max(abs(signal)); abs_mean mean(abs(signal)); rms_val rms(signal); % 关键因子计算 crest_factor peak_val / rms_val; % 峰值因子 shape_factor rms_val / abs_mean; % 波形因子 impulse_factor peak_val / abs_mean; % 脉冲因子在轴承外圈故障案例中当crest_factor超过5时往往意味着出现明显冲击现象。建议配合findpeaks函数统计峰值分布。2.3 过零率与自相关特征语音识别常用的过零率在工业场景中也能有效检测异常zcr sum(diff(sign(signal)) ~ 0)/length(signal); [acf, lags] xcorr(signal, coeff); amdf mean(abs(signal(2:end) - signal(1:end-1)));特别提醒计算AMDF时要注意端点效应建议配合buffer函数进行分帧处理。3. 频域特征深度挖掘技巧3.1 傅里叶变换实战要点N length(signal); f (0:N-1)*(fs/N); % 频率轴 fft_val abs(fft(signal)*2/N); % 关键技巧汉宁窗减少频谱泄漏 window hann(N); fft_windowed abs(fft(signal.*window)*2/N);常见陷阱直接使用fft结果会导致幅值误差必须进行归一化处理。对于瞬态信号推荐使用pwelch函数计算功率谱。3.2 频谱特征计算模板[psd, f] pwelch(signal, hann(256), 128, 256, fs); % 频谱质心计算 spectral_centroid sum(f.*psd)/sum(psd); % 频谱扩展度 spectral_spread sqrt(sum(((f-spectral_centroid).^2).*psd)/sum(psd)); % 谱熵计算 prob psd/sum(psd); spectral_entropy -sum(prob.*log2(probeps));在齿轮箱诊断中频谱质心的左移往往伴随着齿面磨损的加剧。建议配合findpeaks识别特征频率。3.3 MFCC特征工程虽然常用于语音识别但MFCC在机械声纹识别中同样有效coeffs mfcc(signal, fs, NumCoeffs, 13);需要Audio Toolbox支持。替代方案是手动实现Mel滤波器组关键步骤包括预加重处理signal filter([1 -0.97], 1, signal)分帧加窗每帧20-40ms50%重叠通过三角滤波器组计算对数能量4. 小波变换特征工程指南4.1 小波基选择与分解[c, l] wavedec(signal, 5, db4); % 5层分解 approx wrcoef(a, c, l, db4, 5); % 近似分量 details zeros(5, length(signal)); for i1:5 details(i,:) wrcoef(d, c, l, db4, i); end经验之谈db4小波适合机械振动信号而语音信号更适合sym8。分解层数通常选择使最低频带中心频率在设备转频的2-3倍。4.2 小波能量特征energy_total sum(signal.^2); energy_ratio zeros(1,6); for i1:5 energy_ratio(i) sum(details(i,:).^2)/energy_total; end energy_ratio(6) sum(approx.^2)/energy_total;在电机故障实验中第3层细节能量比正常状态增加20%以上可能预示轴承故障。4.3 小波熵计算for i1:5 E sum(details(i,:).^2); P details(i,:).^2 / E; wavelet_entropy(i) -sum(P.*log(Peps)); end小波熵对早期微弱故障敏感但容易受噪声干扰建议先进行wden阈值去噪。5. 信息熵特征的高级应用5.1 多尺度熵实现function [mse] multiscale_entropy(signal, scale, m, r) mse zeros(1, scale); for tau1:scale coarse mean(reshape(signal(1:floor(end/tau)*tau), tau, [])); mse(tau) sample_entropy(coarse, m, r); end end这是诊断阿尔茨海默病EEG信号的关键特征尺度参数通常取20m2r0.15*std。5.2 排列熵快速计算function [pe] permutation_entropy(signal, m, delay) N length(signal); patterns zeros(1, factorial(m)); for i1:N-(m-1)*delay [~,idx] sort(signal(i:delay:i(m-1)*delay)); patterns(idx2num(idx)) patterns(idx2num(idx)) 1; end prob patterns/sum(patterns); pe -sum(prob.*log2(probeps)); endm通常取3-7delay取1。在癫痫预测中发作前排列熵会显著降低。6. 特征工程实战经验6.1 特征选择策略方差阈值法剔除方差小于0.01的特征互信息排序[idx,scores] fscmrmr(X,y)递归特征消除c fitrlinear(X,y); [~,idx] fsrftest(c,X,y)6.2 特征标准化要点% 鲁棒标准化抗异常值 X_norm (X - median(X)) ./ iqr(X); % 或者常规标准化 [X_norm, mu, sigma] zscore(X);特别注意测试集必须使用训练集的mu和sigma参数6.3 特征融合技巧时频域特征拼接features [time_features, freq_features]特征级融合通过PCA降维后再输入分类器决策级融合不同特征集训练多个模型再投票在最近的风机故障预测项目中我们通过组合时域峭度、小波能量熵和MFCC等45个特征将故障识别率提升到了98.7%。关键是要根据具体问题设计特征组合方案而不是简单堆砌所有特征。