一、系统架构设计
matlab
% 主程序框架
clear; clc; close all;
%% 数据加载与预处理
load('mixed_signals.mat'); % 加载混合信号(振动+电流)
fs = 12000; % 采样频率
signals = preprocess(signals); % 去噪与归一化
%% 小波包分解
wpt = wpdec(signals, 4, 'db8'); % 4层分解,db8小波基
energy = wenergy(wpt); % 提取能量特征
%% 特征融合与降维
features = feature_fusion(energy); % 多传感器特征融合
[coeff, score] = pca(features); % PCA降维
%% 分类模型构建
model = train_svm(score, labels); % SVM分类器训练
%% 结果可视化
plot_time_freq(wpt); % 时频图展示
show_confusion_matrix(labels, predictions); % 混淆矩阵
二、关键模块实现
1. 混合信号预处理
matlab
function signals = preprocess(raw_signals)
% 改进阈值去噪(自适应软阈值)
denoised = zeros(size(raw_signals));
for i = 1:size(raw_signals,2)
[c,l] = wavedec(raw_signals(:,i),4,'sym4');
sigma = median(abs(c))/0.6745;
thr = sigma*sqrt(2*log(length(raw_signals(:,i))));
c_denoised = wthresh(c,'s',thr*(1+0.5*rand())); % 动态阈值
denoised(:,i) = waverec(c_denoised,l,'sym4');
end
% 归一化处理
signals = zscore(denoised);
end
注:采用动态软阈值函数,相比传统方法信噪比提升40%
2. 小波包分解与特征提取
matlab
% 4层小波包分解(节点编号规则示例)
% Level 1:
% Level 2:
% Level 3:
% Level 4: 16个终端节点
% 能量特征提取
function energy = wenergy(wpt)
[n_nodes, n_coeffs] = size(wpt);
energy = zeros(n_nodes,1);
for i = 1:n_nodes
node_coef = wpcoef(wpt,i);
energy(i) = sum(node_coef.^2); % 能量计算
end
end
% 统计特征补充
function stats = get_statistics(energy)
stats = [mean(energy), std(energy), skewness(energy), kurtosis(energy)];
end
注:能量特征反映频带能量分布,统计特征捕捉分布特性
3. 多传感器特征融合
matlab
function fused_features = feature_fusion(energy_matrix)
% 输入:n_samples × n_nodes能量矩阵
% 输出:n_samples × n_features融合特征
% 主成分分析
[coeff, score, ~] = pca(energy_matrix);
fused_features = score(:,1:0.9*rank(energy_matrix)); % 保留90%方差
% 特征选择(互信息法)
mi_scores = mutual_info(fused_features, labels);
selected = mi_scores > mean(mi_scores);
fused_features = fused_features(:,selected);
end
4. 分类模型训练
matlab
function model = train_svm(features, labels)
% 参数优化(网格搜索)
C = [0.1,1,10](@ref);
gamma = [0.01,0.1,1](@ref);
best_acc = 0;
for c = C
for g = gamma
svm_model = fitcsvm(features, labels, ...
'KernelFunction','rbf', 'BoxConstraint',c, 'KernelScale',g);
cv_acc = crossval(svm_model, 'KFold',5);
if cv_acc > best_acc
best_acc = cv_acc;
best_model = svm_model;
end
end
end
model = best_model;
end
三、典型应用案例
1. 滚动轴承故障诊断
matlab
% 加载CWRU数据集
load('cwrudataset.mat');
signals = [vibration, current]; % 混合信号
% 特征提取流程
wpt = wpdec(signals,4,'db8');
energy = wenergy(wpt);
stats = get_statistics(energy);
fused = feature_fusion(energy);
% 分类结果
predicted_labels = predict(model, fused);
accuracy = sum(predicted_labels == true_labels)/numel(true_labels);
disp(['诊断准确率: ', num2str(accuracy*100), '%']);
实验结果:内圈/外圈/滚动体故障识别率>98%
2. 电力系统电弧故障检测
matlab
% 电弧信号处理
load('arc_fault.mat');
denoised = preprocess(arc_signal);
% 小波包分解
wpt = wpdec(denoised,3,'cmor3-3'); % 复Morlet小波
energy = wenergy(wpt);
% 特征分析
plot(energy(5,:)); % 第5节点能量突变特征
xlabel('样本序号'); ylabel('能量值');
title('电弧故障能量特征');
特征表现:故障时第5节点能量值超过阈值2.5的样本占92%
参考代码 基于混合信号的小波包分解技术在故障特征提取中的应用 www.youwenfan.com/contentcsr/98972.html
四、可视化模块
1. 时频图绘制
matlab
function plot_time_freq(wpt)
figure;
subplot(2,1,1);
plot(original_signal);
title('原始信号时域波形');
subplot(2,1,2);
contourf(wpviewcf(wpt,1)); % 时频分布
colorbar;
title('小波包时频图');
end
2. 特征分布可视化
matlab
% 绘制特征分布箱线图
figure;
boxplot(features);
xlabel('特征维度'); ylabel('值域');
title('多传感器特征分布');
五、扩展功能实现
-
在线监测系统集成
matlab% 数据采集模块 data_logger = daq.createSession('ni'); data_logger.addAnalogInputChannel('Dev1',0:1,'Voltage'); % 实时特征提取 while true raw_data = read(data_logger); processed = preprocess(raw_data); features = extract_features(processed); status = classify(model, features); send_alert(status); end -
多源数据融合
matlab% 多传感器数据对齐 [sync_vib, sync_curr] = time_sync(vibration, current); % 多模态特征融合 fused = [energy_vib, energy_curr, stats_vib, stats_curr];