振动信号进行时域特征提取,并用于机械故障诊断

振动信号进行时域特征提取,并用于机械故障诊断
覆盖:数据导入 → 时域统计特征 → 特征归一化 → 可视化 → 与频域/时频域特征联合使用的扩展接口。

核心思想:时域特征计算量小、对硬件要求低,适合在线监测;与频域、时频域特征融合后,可显著提升故障识别准确率。


1 文件结构

VibTimeDomain/
├─ main.m                    % 一键运行
├─ time_domain_features.m   % 时域特征计算
├─ load_vib_data.m          % 数据导入(支持 .mat/.csv)
├─ normalize_features.m     % 归一化
├─ plot_time_features.m     % 可视化
└─ example_data/            % 示例振动数据(轴承正常/外圈故障)

2 时域特征列表(共 15 项)

特征 物理意义 故障敏感示例
均值 直流分量 传感器漂移
标准差 整体能量 普遍损伤
峰值 最大瞬时幅值 冲击故障
峰峰值 最大摆幅 不平衡
方根幅值 低频能量 早期磨损
均方根 RMS 总能量 轴承疲劳
波形因子 峰值/均值 冲击强度
峰值因子 峰值/RMS 剥落/裂纹
脉冲因子 峰值/绝对均值 高频冲击
裕度因子 峰值/方根幅值 局部缺陷
峭度 尖峰程度 剥落/裂纹
偏度 对称性 摩擦/松动
Crest Factor 峰值/RMS 同上
K因子 峭度×峰值因子 复合指标
熵值 复杂度 非线性故障

3 核心函数 time_domain_features.m

function feat = time_domain_features(x)
% 输入:振动信号 x(列向量)
x = x(:) - mean(x);               % 去直流
feat.mean = mean(x);
feat.std  = std(x);
feat.peak = max(abs(x));
feat.peak2peak = max(x) - min(x);
feat.rms = rms(x);
feat.sra = mean(sqrt(abs(x)))^2;  % 方根幅值
feat.waveform = feat.peak / feat.rms;
feat.crest  = feat.peak / feat.rms;
feat.impulse = feat.peak / mean(abs(x));
feat.margin = feat.peak / feat.sra;
feat.kurt = kurtosis(x);
feat.skew = skewness(x);
feat.entropy = -sum( (abs(x)+eps).*log(abs(x)+eps) ); % Shannon 熵
% 复合指标
feat.K_factor = feat.kurt * feat.crest;
feat.CF = feat.crest;
feat.Kurtosis = feat.kurt;
end

4 主脚本 main.m

clc; clear; close all;
%% 1. 加载数据(示例:轴承正常 vs 外圈故障)
[data_normal, data_fault, fs] = load_vib_data();

%% 2. 计算时域特征
feat_n = time_domain_features(data_normal);
feat_f = time_domain_features(data_fault);

%% 3. 归一化 & 表格
feat_table = struct2table([feat_n; feat_f]);
feat_table = normalize_features(feat_table);

%% 4. 可视化
plot_time_features(feat_table, {'Normal','Fault'});

%% 5. 自动阈值(示例:峭度 > 5 判故障)
if feat_f.kurt > 5
    disp('→ 疑似故障(峭度超标)');
else
    disp('→ 正常');
end

参考代码 振动信号时域特征提取用于故障诊断 www.youwenfan.com/contentcnj/46679.html


posted @ 2025-10-20 16:20  别说我的眼泪有点咸  阅读(9)  评论(0)    收藏  举报