Vibration Classification Visualization: Implementation and Graphical Display in MATLAB

What is Vibration Classification?

Vibration classification is a key technology in fields such as mechanical fault diagnosis and structural health monitoring. By analyzing and classifying vibration signals, we can identify the operational status of equipment and detect anomalies, thereby enabling predictive maintenance.

First, we need to prepare some vibration data. Here, we use simulated bearing vibration data, which includes three conditions: normal state, inner race fault, and outer race fault.

% Clear environment
clear; close all; clc;
% Set parameters
fs = 12000;             % Sampling frequency 12kHz
t = 0:1/fs:1-1/fs;     % 1 second time vector
f_rotor = 30;          % Rotor frequency 30Hz
f_bpfi = 5.2*f_rotor;  % Inner race fault frequency
f_bpfo = 3.6*f_rotor;  % Outer race fault frequency
% Generate simulated vibration signals
% Normal signal - mainly rotor frequency and its harmonics
normal_signal = 0.5*sin(2*pi*f_rotor*t) + 0.2*sin(2*pi*2*f_rotor*t) + 0.1*randn(size(t));
% Inner race fault - rotor frequency + fault frequency modulation
inner_signal = 0.5*sin(2*pi*f_rotor*t) + 0.3*(1+0.5*sin(2*pi*f_bpfi*t)).*sin(2*pi*f_rotor*t) + 0.1*randn(size(t));
% Outer race fault - rotor frequency + fault frequency modulation
outer_signal = 0.5*sin(2*pi*f_rotor*t) + 0.4*(1+0.6*sin(2*pi*f_bpfo*t)).*sin(2*pi*f_rotor*t) + 0.1*randn(size(t));
% Combine dataset
signals = [normal_signal; inner_signal; outer_signal];
labels = {'Normal State', 'Inner Race Fault', 'Outer Race Fault'};

Time Domain Visualization

Time domain analysis is the most intuitive method for analyzing vibration signals, allowing us to directly observe the waveform characteristics of the signals.

% Time domain waveform plotting
figure('Position', [100, 100, 1200, 800])
for i = 1:3
    subplot(3, 1, i)
    plot(t(1:1000), signals(i, 1:1000), 'LineWidth', 1.5)
    title(['Vibration Signal Time Domain Waveform - ' labels{i}], 'FontSize', 12, 'FontWeight', 'bold')
    xlabel('Time (s)')
    ylabel('Amplitude')
    grid on
    set(gca, 'FontSize', 10)
end
% Set overall title
sgtitle('Time Domain Comparison of Vibration Signals Under Different Conditions', 'FontSize', 16, 'FontWeight', 'bold')
% Save image
saveas(gcf, 'Time_Domain_Comparison.png')

Vibration Classification Visualization: Implementation and Graphical Display in MATLAB

Frequency Domain Analysis

Frequency domain analysis can reveal the frequency composition of signals, which is particularly important for fault diagnosis.

% Frequency domain analysis
figure('Position', [100, 100, 1200, 800])
for i = 1:3
    % Calculate FFT
    N = length(signals(i, :));
    f = (0:N-1)*fs/N;
    Y = fft(signals(i, :));
    P2 = abs(Y/N);
    P1 = P2(1:N/2+1);
    P1(2:end-1) = 2*P1(2:end-1);
    f_plot = f(1:N/2+1);
    subplot(3, 1, i)
    plot(f_plot, P1, 'LineWidth', 1.5, 'Color', [0.8500, 0.3250, 0.0980])
    title(['Vibration Signal Spectrum - ' labels{i}], 'FontSize', 12, 'FontWeight', 'bold')
    xlabel('Frequency (Hz)')
    ylabel('Magnitude')
    xlim([0, 1000])
    grid on
    set(gca, 'FontSize', 10)
end
sgtitle('Frequency Spectrum Comparison of Vibration Signals Under Different Conditions', 'FontSize', 16, 'FontWeight', 'bold')
saveas(gcf, 'Frequency_Spectrum_Comparison.png')

Vibration Classification Visualization: Implementation and Graphical Display in MATLAB

Time-Frequency Analysis – Short-Time Fourier Transform

Time-frequency analysis can simultaneously display the changes of signals in time and frequency, making it particularly suitable for analyzing non-stationary signals.

% Time-frequency analysis
figure('Position', [100, 100, 1200, 900])
for i = 1:3
    subplot(3, 1, i)
    % Perform Short-Time Fourier Transform
    [s, f, t] = spectrogram(signals(i, :), 256, 250, 256, fs, 'yaxis');
    % Plot time-frequency map
    imagesc(t, f, 10*log10(abs(s)))
    axis xy
    colorbar
    title(['Time-Frequency Analysis - ' labels{i}], 'FontSize', 12, 'FontWeight', 'bold')
    xlabel('Time (s)')
    ylabel('Frequency (Hz)')
    ylim([0, 1000])
    set(gca, 'FontSize', 10)
end
sgtitle('Time-Frequency Analysis of Vibration Signals', 'FontSize', 16, 'FontWeight', 'bold')
saveas(gcf, 'Time_Frequency_Analysis.png')

Vibration Classification Visualization: Implementation and Graphical Display in MATLAB

Feature Extraction and Visualization

We can extract various features from vibration signals for classification and condition recognition.

% Feature extraction function
function features = extract_features(signal)
    features = zeros(1, 6);
    % Time domain features
    features(1) = rms(signal);        % Root Mean Square
    features(2) = std(signal);        % Standard Deviation
    features(3) = kurtosis(signal);   % Kurtosis
    features(4) = skewness(signal);   % Skewness
    % Frequency domain features
    Y = fft(signal);
    L = length(signal);
    P2 = abs(Y/L);
    P1 = P2(1:L/2+1);
    P1(2:end-1) = 2*P1(2:end-1);
    features(5) = mean(P1);           % Mean of Spectrum
    features(6) = std(P1);            % Standard Deviation of Spectrum
end
% Extract features from all signals
feature_matrix = [];
for i = 1:3
    features = extract_features(signals(i, :));
    feature_matrix = [feature_matrix; features];
end
% Feature visualization
figure('Position', [100, 100, 1400, 600])
feature_names = {'RMS', 'Standard Deviation', 'Kurtosis', 'Skewness', 'Mean of Spectrum', 'Standard Deviation of Spectrum'};
for i = 1:6
    subplot(2, 3, i)
    bar(feature_matrix(:, i), 'FaceColor', [0.3010, 0.7450, 0.9330])
    title(feature_names{i}, 'FontSize', 11, 'FontWeight', 'bold')
    set(gca, 'XTickLabel', labels)
    xtickangle(45)
    grid on
end
sgtitle('Comparison of Vibration Signal Features', 'FontSize', 16, 'FontWeight', 'bold')
saveas(gcf, 'Feature_Comparison.png')

Vibration Classification Visualization: Implementation and Graphical Display in MATLAB

Leave a Comment