Phương pháp này tích hợp thuật toán tối ưu hóa trừ trừ (SABO) để điều chỉnh tham số phân tích mode biến phân (VMD), sau đó sử dụng mạng nơ-ron tích chập (CNN) để trích xuất đặc trưng sâu và cuối cùng là máy vector hỗ trợ (SVM) để phân loại. Quy trình được kiểm chứng trên bộ dữ liệu vòng bi tiêu chuẩn từ Đại học Case Western Reserve.
1. Quy Trình Xử Lý Dữ Liệu
Dữ liệu thô bao gồm bốn trạng thái hoạt động: bình thường, lỗi vòng trong, lỗi vòng ngoài và lỗi con lăn. Quá trình tiền xử lý thực hiện cắt dữ liệu theo cửa sổ trượt để tạo thành các mẫu huấn luyện.
Các bước thực hiện cụ thể:
- Tải dữ liệu tín hiệu rung động từ bốn trạng thái khác nhau.
- Thiết lập kích thước cửa sổ trượt
window_sizevà số điểm dữ liệu mỗi mẫusample_length. - Lặp qua từng trạng thái để trích xuất đoạn tín hiệu, lưu trữ vào ma trận tổng hợp.
Đoạn mã dưới đây minh họa cách tổ chức lại dữ liệu đầu vào:
clear; clc;
addpath(genpath(pwd));
% Cấu hình tham số cửa sổ trượt
window_size = 1000;
sample_length = 2048;
samples_per_class = 120;
% Khởi tạo ma trận lưu trữ
dataset_matrix = [];
% Danh sách file dữ liệu tương ứng 4 trạng thái
data_files = {'normal.mat', 'inner_fault.mat', 'ball_fault.mat', 'outer_fault.mat'};
for idx = 1:length(data_files)
current_data = load(data_files{idx});
signal = current_data.signal_channel; % Giả sử biến tín hiệu đã được chuẩn hóa
temp_segment = [];
for k = 1:samples_per_class
start_point = 1 + window_size * (k-1);
end_point = start_point + sample_length - 1;
segment = signal(start_point:end_point)';
temp_segment = [temp_segment; segment];
end
dataset_matrix = [dataset_matrix; temp_segment];
end
% Lưu dữ liệu đã tiền xử lý
save('processed_dataset.mat', 'dataset_matrix');
2. Tối Ưu Hóa Tham Số VMD Bằng SABO
Để tách chiết thành phần mode nội tại (IMF) hiệu quả, hai tham số quan trọng của VMD là số lượng mode K và hệ số phạt alpha cần được tối ưu. Thuật toán SABO được sử dụng để tìm kiếm cặp tham số tối ưu dựa trên các hàm mục tiêu khác nhau.
Năm hàm mục tiêu có thể lựa chọn bao gồm: Entropy bao hình cực tiểu, Entropy mẫu cực tiểu, Entropy thông tin cực tiểu, Entropy hoán vị cực tiểu và tỷ lệ Entropy hoán vị trên Entropy tương hỗ.
Mã nguồn thực hiện tối ưu hóa tham số:
%% Cấu hình thuật toán tối ưu SABO cho VMD
clear; clc; close all;
% Lựa chọn hàm mục tiêu (1: Envelope, 2: Sample, 3: Info, 4: Permutation, 5: Composite)
fitness_selection = 1;
objective_func = '';
switch fitness_selection
case 1
objective_func = @calc_envelope_entropy;
case 2
objective_func = @calc_sample_entropy;
case 3
objective_func = @calc_info_entropy;
case 4
objective_func = @calc_permutation_entropy;
case 5
objective_func = @calc_composite_entropy;
end
load('processed_dataset.mat');
data_input = dataset_matrix;
% Giới hạn tham số tối ưu [alpha, K]
lower_bound = [100, 3];
upper_bound = [2500, 10];
max_iter = 20;
population_size = 20;
feature_vectors = [];
optimal_params_log = [];
num_classes = 4;
samples_per_state = 120;
for class_idx = 1:num_classes
fprintf('Đang tối ưu trạng thái thứ %d...\n', class_idx);
start_idx = 1 + samples_per_state * (class_idx - 1);
end_idx = class_idx * samples_per_state;
current_batch = data_input(start_idx:end_idx, :);
% Gọi hàm tối ưu SABO (giả định hàm sabo_optimizer đã được định nghĩa)
[best_params, best_score] = sabo_optimizer(objective_func, lower_bound, upper_bound, max_iter, population_size, current_batch);
% Trích xuất đặc trưng dựa trên tham số tốt nhất
extracted_features = extract_time_domain_features(current_batch, best_params);
feature_vectors = [feature_vectors; extracted_features];
optimal_params_log = [optimal_params_log; best_params];
end
save('vmd_features.mat', 'feature_vectors');
save('optimal_config.mat', 'optimal_params_log');
3. Trích Xuất Đặc Trưng CNN và Trực Quan Hóa
Sau khi có các vector đặc trưng thời gian từ VMD, dữ liệu được đưa qua mạng CNN để học các đặc trưng bậc cao. Để đánh giá hiệu quả, phương pháp PCA (Phân tích thành phần chính) được sử dụng để giảm chiều dữ liệu và trực quan hóa.
Kết quả so sánh cho thấy: Khi chưa qua CNN, các cụm dữ liệu giữa trạng thái bình thường và lỗi con lăn có sự chồng lấn đáng kể. Sau khi đi qua lớp trích xuất đặc trưng của CNN, bốn lớp dữ liệu được phân tách rõ ràng trên không gian 2D, chứng minh khả năng phân biệt đặc trưng của mạng sâu.
4. Phân Loại Sử Dụng SVM
Dữ liệu đặc trưng đầu ra từ CNN được đưa vào máy SVM để phân loại cuối cùng. Mô hình sử dụng thư viện LIBSVM với cơ chế tìm kiếm lưới (Grid Search) và xác thực chéo 5-fold để điều chỉnh tham số phạt C và hệ số kernel gamma.
Quy trình huấn luyện và kiểm tra mô hình:
%% Huấn luyện và đánh giá mô SVM
clear; clc; warning off;
addpath(genpath(pwd));
load('vmd_features.mat');
raw_features = feature_vectors;
samples_per_group = 120;
total_groups = size(raw_features, 1) / samples_per_group;
% Gán nhãn cho dữ liệu
labeled_data = raw_features;
num_features = size(labeled_data, 2);
for grp = 1:total_groups
row_start = 1 + samples_per_group * (grp - 1);
row_end = grp * samples_per_group;
labeled_data(row_start:row_end, num_features + 1) = grp;
end
X = labeled_data(:, 1:num_features);
Y = labeled_data(:, end);
% Chia tập huấn luyện và kiểm tra
train_count = 90;
test_count = samples_per_group - train_count;
X_train = []; Y_train = [];
X_test = []; Y_test = [];
for k = 1:total_groups
idx_start = 1 + samples_per_group * (k - 1);
idx_train_end = idx_start + train_count - 1;
idx_test_end = k * samples_per_group;
X_train = [X_train; X(idx_start:idx_train_end, :)];
Y_train = [Y_train; Y(idx_start:idx_train_end, :)];
X_test = [X_test; X(idx_train_end+1:idx_test_end, :)];
Y_test = [Y_test; Y(idx_train_end+1:idx_test_end, :)];
end
% Chuẩn hóa dữ liệu
[X_train_norm, ps] = mapminmax(X_train');
X_test_norm = mapminmax('apply', X_test', ps);
X_train_norm = X_train_norm';
X_test_norm = X_test_norm';
% Tìm kiếm tham số SVM
param_range = -10:0.5:10;
[C_grid, G_grid] = meshgrid(param_range, param_range);
acc_matrix = zeros(size(C_grid));
cv_folds = 5;
for i = 1:size(C_grid, 1)
for j = 1:size(C_grid, 2)
cmd = ['-v ', num2str(cv_folds), ' -c ', num2str(2^C_grid(i,j)), ' -g ', num2str(2^G_grid(i,j))];
acc_matrix(i,j) = svmtrain(Y_train, X_train_norm, cmd);
end
end
% Chọn tham số tốt nhất và huấn luyện mô hình cuối cùng
[best_acc, idx] = max(acc_matrix(:));
[best_c_idx, best_g_idx] = ind2sub(size(acc_matrix), idx);
optimal_C = 2^C_grid(best_c_idx, best_g_idx);
optimal_G = 2^G_grid(best_c_idx, best_g_idx);
model = svmtrain(Y_train, X_train_norm, ['-c ', num2str(optimal_C), ' -g ', num2str(optimal_G)]);
predicted_labels = svmpredict(Y_test, X_test_norm, model);
Ma trận nhầm lẫn thu được từ quá trình kiểm tra cho thấy tỷ lệ chính xác cao, khẳng định hiệu quả của quy trình kết hợp tối ưu hóa tham số VMD, trích xuất đặc trưng CNN và phân lớp SVM trong bài toán chẩn đoán hỏng hóc máy móc.