Constructs an envelope for arbitrary signals.
The envelope of a a signal is a line tracing the extreme points of the signal. Typically this represents a modulation signal on a carrier.
NOTE: use Method 1 for clean signals, Method 2 for noisy signals, Method 3 when 1 and 2 fail
menu: veeos ==> Signal Processing ==> envelope
library: sigLib
See veeos examples . Typical signal and envelope are shown here:
o_envelope(A,3) returns minima using Method 2
o_envelope(A,0) returns maxima using Method 1
In a typical communication signal, a high frequency (carrier is) modulated by a low frequency (baseband) signal. The baseband signal contains the information to be sent and the carrier is chosen for transmission characteristics. Once modulated the baseband signal itself no longer exists, but rather it is represented by the fluctuations in the carrier. If specific assumptions are made for the modulated signal, then the baseband can be determined by basic signal processing. However for more complex signals- say a chirped carrier or freq hopping carrier- without specific information reconstructing the baseband can be very difficult. This function assumes nothing about the signal but instead looks directly at the time domain signal and ferrets out local extrema as best as it can.
To methods are available in this function, selected by option value
Method 1 uses derivatives so is fragile when it comes to noise but also gives a very good estimate of correct peaks.
Method 2 eliminate derivatives so is more robust but still makes good estimate of correct peaks.
Method 3 is brute force and is quite noise-tolerant but makes only minimal effort to estimate peaks.
Another alternative that may give better results for some signals is decayFilter() which has its own issues but will not fail and is what is commonly used in the real world.
VEE 7.0+, all platforms