Envelope spectrum analysis is a key technique in rotating machinery fault diagnosis, specifically used for demodulating amplitude-modulated signals. The technical process involves: removing the mean value from the original signal (detrending), applying the Hilbert trensform to obtain the analytic signal, calculating the modulus to extract the envelope, removing the mean again, and finally performing Fourier transform to generate the envelope spectrum.
Signal Generation and Analysis
A modulated signal is constructed using a high-frequency carrier and a modulating signal:
Fs = 512; % Sampling frequency
T = 1/Fs; % Sampling period
L = 2048; % Signal length
t = (0:L-1)*T; % Time vector
% Signal components
carrier = cos(2*pi*100*t); % 100 Hz carrier
modulator = 10*cos(2*pi*0.5*t); % 0.5 Hz modulating signal
signal = (carrier.*modulator + 20)'; % AM signal with DC offset
Frequency domain analysis reveals modulation sidebands at 99.5 Hz and 100.5 Hz, resulting from the 100 Hz carrier modulated by the 0.5 Hz signal.
Envelope Extraction Process
The envelope is extracted using Hilbert transform:
% Remove DC component
signal_detrended = signal - mean(signal);
% Hilbert transform for analytic signal
analytic_signal = hilbert(signal_detrended);
% Extract envelope
envelope = abs(analytic_signal);
% Remove envelope mean
envelope_detrended = envelope - mean(envelope);
% Compute envelope spectrum
[freq, envelope_spectrum] = compute_spectrum(envelope_detrended, Fs);
The envelope spectrum shows a prominent 1 Hz component, corresponding to the modulating signal frequency.
Validation with MATLAB Built-in Function
Results are validated against MATLAB's envspectrum function:
[matlab_spectrum, freq_matlab, matlab_envelope] = envspectrum(signal, Fs, ...
'Method', 'hilbert', 'Band', [freq(2) freq(end-1)]);
% Calculate differences
diff_envelope = sum(abs(matlab_envelope - envelope_detrended)) / length(matlab_envelope);
diff_spectrum = sum(abs(matlab_spectrum(2:end-1) - envelope_spectrum(2:end-1))) / ...
length(matlab_spectrum(2:end-1));
The minor differences between manual and built-in function results confirm the correctness of the implementation.
Importance of Mean Removal
Failure to remove the mean before Hilbert transform significantly impacts envelope extraction quality. Without proper detrending:
- Envelope extraction becomes ineffective
- False spectral components appear at 200 Hz
- Modulation frequencies are not properly resolved
Spectrum Computation Function
function [frequency, magnitude, phase] = compute_spectrum(input_signal, sample_rate)
L = size(input_signal, 1);
NFFT = 2^nextpow2(L);
% FFT computation
Y = fft(input_signal, NFFT);
% Frequency axis
frequency = (0:NFFT/2) * sample_rate / NFFT;
% Magnitude spectrum
magnitude = abs(Y/NFFT);
magnitude = magnitude(1:NFFT/2+1, :);
magnitude(2:end-1, :) = 2 * magnitude(2:end-1, :);
% Phase spectrum
phase = angle(Y(1:NFFT/2+1, :)) / pi;
end
Key Implementation Notes
- Always remove the mean before applying Hilbert transform
- The envelope spectrum bandwidth should be appropriately set
- MATLAB's
envspectrumfunction provides a reliable reference implementation - Verify results by comparing with established functions