基于一维信号频域特征提取的轴承故障诊断与趋势预测
一、频域特征提取方法
1. 快速傅里叶变换(FFT)
% 轴承振动信号FFT分析
fs = 48000; % 采样频率
N = length(signal);
f = (0:N/2)*fs/N;
fft_val = fft(signal);
P2 = abs(fft_val/N);
P1 = P2(1:N/2+1);
P1(2:end-1) = 2*P1(2:end-1);
% 特征频率计算(示例:外圈故障)
f_outer_race = 0.4*fs/(2*pi); % 假设节径比0.4
[~,idx] = findpeaks(P1, 'SortStr', 'descend', 'NPeaks', 5);
fault_freq = f(idx(1)); % 主特征频率
2. 小波包分解
% 小波包能量特征提取
wpt = wpdec(signal, 4, 'db4');
energy = zeros(1, size(wpt,2));
for i = 1:size(wpt,2)
energy(i) = sum(wpt.cfs(i,:).^2);
end
% 频带划分(示例:0-2kHz, 2-8kHz)
band_energy = [sum(energy(1:3)), sum(energy(4:7))];
3. 倒频谱分析
% 倒频谱计算
c = cceps(signal);
[~,lag] = max(c(20:end)); % 忽略前20点直流分量
fault_period = lag/fs; % 故障周期估计
二、特征工程与选择
1. 关键频域特征
| 特征类型 | 数学表达式 | 物理意义 |
|---|---|---|
| 峰值频率 | f_peak = argmax(P(f)) | 主故障频率成分 |
| 谐波比 | HR = P(2f)/P(f) | 故障严重程度指标 |
| 频带能量比 | E_ratio = E_band/E_total | 故障能量集中度 |
| 边带间隔 | Δf = f_sideband – f_peaks | 转频调制特征 |
2. 特征降维(PCA示例)
% 主成分分析
[coeff,score,latent] = pca(features);
explained = 100*latent/sum(latent);
selected_features = score(:,1:3); % 保留95%方差
三、故障诊断模型
1. 双流CNN架构
layers = [
imageInputLayer([256 256 2]) % 时频图+频谱图
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
reluLayer
fullyConnectedLayer(256)
reluLayer
classificationLayer];
2. 混合特征输入
% 输入特征矩阵构建
X = [fft_features, wavelet_energy, cepstral_features];
Y = categorical(labels);
% 交叉验证
cv = cvpartition(Y,'KFold',5);
cv_accuracy = zeros(cv.NumTestSets,1);
for i = 1:cv.NumTestSets
trainIdx = cv.training(i);
testIdx = cv.test(i);
model = fitcecoc(X(trainIdx,:),Y(trainIdx));
cv_accuracy(i) = sum(predict(model,X(testIdx,:)) == Y(testIdx))/numel(Y(testIdx));
end
disp(['平均准确率: ', num2str(mean(cv_accuracy)*100,'%')]);
四、趋势预测方法
1. 基于LSTM的时间序列预测
layers = [ ...
sequenceInputLayer(3) % 峰值频率、峭度、能量
lstmLayer(64,'OutputMode','sequence')
dropoutLayer(0.2)
lstmLayer(32)
dropoutLayer(0.2)
fullyConnectedLayer(1)
regressionLayer];
options = trainingOptions('adam',...
'MaxEpochs',100,...
'MiniBatchSize',32,...
'InitialLearnRate',0.001);
net = trainNetwork(XTrain,YTrain,layers,options);
2. 剩余使用寿命(RUL)预测
% 基于健康指数曲线拟合
health_index = polyfit(time, features(:,1),2);
RUL = 1./(1 + exp(-(health_index(1)*time + health_index(2))));
相关代码 一维信号频域特征提取可用于轴承故障诊断和趋势预测 www.youwenfan.com/contentcsg/50931.html
五、工程应用案例
1. 滚动轴承故障诊断流程
振动信号采集 → FFT频谱分析 → 小波包能量提取 → 特征选择 →
双流CNN分类(正常/内圈/外圈/滚动体故障)
2. 趋势预测系统架构
实时数据流 → 滑动窗口处理 → LSTM预测模型 → RUL可视化 → 预警阈值判断
六、关键优化策略
-
动态频带划分
根据转速自适应调整分析频段:f_adaptive = [0.2*fn, 0.5*fn, 1.2*fn]; % 基于故障特征频率动态调整 -
多尺度特征融合
结合时域(峭度)、频域(频带能量)、时频域(小波熵)特征:fused_feature = [kurtosis, energy_ratio, wavelet_entropy]; -
迁移学习应用
使用预训练模型(如VGGish)进行特征提取:net = alexnet; features = activations(net, input_layer, 'fc7', 'OutputAs', 'rows');
七、完整代码结构
Bearing_Diagnosis/
├── data/
│ ├── raw_signals.mat % 原始振动数据
│ └── labels.csv % 故障标签
├── features/
│ ├── fft_features.m % FFT特征提取
│ └── wavelet_features.m % 小波包特征
├── models/
│ ├── cnn_classifier.m % 双流CNN模型
│ └── lstm_predictor.m % LSTM预测模型
├── utils/
│ ├── data_loader.m % 数据加载
│ └── visualization.m % 结果可视化
└── reports/
├── accuracy_report.pdf % 性能评估
└── rul_prediction.png # 趋势预测结果
八、参考文献
- 基于小波包能量谱的轴承故障诊断方法(机械工程学报,2021)
- 深度学习在旋转机械故障诊断中的应用(IEEE Transactions,2023)
- 轴承剩余寿命预测的LSTM网络优化(机械强度,2024)
- 频域特征融合的轴承故障分类算法(振动与冲击,2022)