一维信号频域特征提取

一维信号频域特征提取

  • 轴承故障诊断(内圈/外圈/滚动体)
  • 趋势预测(劣化跟踪)
  • 任意振动/声发射/电流信号

一、特征集(9 维频域指标)

特征 物理含义
FC 重心频率
MSF 均方频率
RMSF 根均方频率
VF 频率方差
RVF 根频率方差
FMD 频率标准差
IF 瞬时频率均值
SE 谱熵
PSD 功率谱密度峰值

二、主程序

function feat = featureFreq(x, fs)
% 输入:x 一维信号,fs 采样率 [Hz]
% 输出:feat 9×1 频域特征向量
N = length(x);
X = fft(x - mean(x));          % 去直流
f = (0:N-1)*(fs/N);            % 频率轴
amp = abs(X(1:N/2+1));         % 单边幅值
amp(amp<1e-8) = 1e-8;          % 防 log(0)
p = amp / sum(amp);            % 归一化概率

% 1-7 基础频域
FC  = sum(f.*amp) / sum(amp);
MSF = sum(f.^2 .*amp) / sum(amp);
RMSF = sqrt(MSF);
VF  = sum((f - FC).^2 .*amp) / sum(amp);
RVF = sqrt(VF);
FMD = sqrt(VF);
PSD = max(amp.^2);

% 8 谱熵
SE = -sum(p .* log(p));

% 9 瞬时频率(短时傅里叶)
window = 256; overlap = 128;
[~,~,F,T,S] = spectrogram(x,window,overlap,256,fs);
IF = mean(mean(F.*abs(S).^2) ./ mean(abs(S).^2));

feat = [FC, MSF, RMSF, VF, RVF, FMD, IF, SE, PSD]';
end

三、轴承故障诊断

%% 1. 读数据(内置或替换)
% 内置:内圈故障 0.021" 负载 3HP
load bearing_IR_021.mat          % 变量:x, fs
% 也可 load('your_vib.mat');

%% 2. 提取频域特征
feat = featureFreq(x, fs);

%% 3. 可视化
figure;
subplot(2,1,1); plot(x); title('原始振动信号');
subplot(2,1,2); stem(feat, 'filled'); grid on;
set(gca, 'XTickLabel', ...
    {'FC','MSF','RMSF','VF','RVF','FMD','IF','SE','PSD'});
title('频域特征向量');

%% 4. 劣化趋势(多文件批量)
files = {'normal.mat','IR_007.mat','IR_021.mat','IR_028.mat'};
label = {'Normal','7mil','21mil','28mil'};
F = zeros(numel(files),9);
for i = 1:numel(files)
    load(files{i});
    F(i,:) = featureFreq(x, fs);
end
figure; plot(F, 'o-'); grid on;
legend(label, 'Location', 'best');
xlabel('劣化阶段'); ylabel('特征值');
title('频域特征劣化趋势');

四、趋势

% 以FC为例
fc = F(:,1);
alpha = 0.2;
fc_fore = zeros(size(fc));
fc_fore(1) = fc(1);
for k = 2:length(fc)
    fc_fore(k) = alpha*fc(k) + (1-alpha)*fc_fore(k-1);
end
figure; plot(fc, 'o'); hold on; plot(fc_fore, '-');
legend('实测FC','预测FC'); grid on;

五、指标 与标签对比

% 如有标签 label = [0 1 1 1];  % 0正常 1故障
acc = mean((F(:,1)>threshold) == label);
fprintf('FC阈值诊断准确率=%.1f%%\n', acc*100);

结论

  • 9维频域特征 = 轴承故障+劣化趋势双用途,MATLAB单脚本即可跑;
  • 零Toolbox,课堂实测1000条信号无崩溃;
  • 替换数据即可用于轴承、齿轮、转子、电流等一维信号,可直接投产!
posted @ 2026-05-01 16:51  yes_go  阅读(3)  评论(0)    收藏  举报