Envelope Spectrum Analysis for Amplitude Modulation Signals

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

  1. Always remove the mean before applying Hilbert transform
  2. The envelope spectrum bandwidth should be appropriately set
  3. MATLAB's envspectrum function provides a reliable reference implementation
  4. Verify results by comparing with established functions

Tags: signal-processing envelope-spectrum hilbert-transform amplitude-modulation fault-diagnosis

Posted on Wed, 07 Oct 2026 16:06:26 +0000 by Wien