Sign in

username:

password:



Not a member?

Search matlab



Search tips

Subscribe to matlab



matlab by Keywords

Atanh | Autocorrelation | Bandpass Filter | C++ | Conv | Database | Deconv | Excel | FFT | Filter | Filtering | FIR | Fourier Transfrom | FSK | Gaussian Noise | Haykin | IFFT | Image | Java | LFSR | LMS | LPC | MEX | OFDM | QPSK | Radix | Random | Sampling | Segmentation | Simulink | Visual Basic | Waveform | Wavelet

Sponsor

NEW! TMS320C6474: 3x the performance. 1/3 the cost. Three 1 GHz cores on 1 chip.

Discussion Groups

Discussion Groups | Matlab DSP | hilbert envelopes

Technical discussion about Matlab and issues related to Digital Signal Processing.

  

Post a new Thread

hilbert envelopes - albe...@spiritaero.com - Nov 13 11:24:09 2007



This may be an easy question for some of you:

To find the envelope of a time decay signal, I'm using the modulus of the analytical signal
where the imaginary part is obtained from a hilbert transform such that 

z = x + j*x_hat

To get x_hat, I'm convolving x with 1/pi/t as given in the literature.  The problem I'm having
is that x_hat seems to be scaled by 2 times that of x, but it's not exactly 2 times.  This
causes beating or modulation in the decay signal due to amplitude mismatch between x and x_hat,
which is quite evident when looking at simple sinusoidal decays, but would probably just cause
extra messiness in actual third octave filtered system decays (structural vibration).  This is
not an issue if I know the correct scalar to use, but I'm not seeing it in the literature. Am I
doing something wrong during the convolution?  The code is as follows:

t = linspace(0,2,16000);
x = 1*sin(2*pi*80*t).*exp(-.01*2*pi*80*t);

x_hat = conv(1./(pi*t),x);
x_hat = x_hat(length(x):end);

z = sqrt(x.^2 + x_hat.^2);



(You need to be a member of matlab -- send a blank email to matlab-subscribe@yahoogroups.com )

Re: hilbert envelopes - Mathias - Nov 14 8:43:41 2007

why dont you use the function hilbert() ?
it gives you the x_hat signal..

let me know
bye
mathias

On 12/nov/07, at 22:53, a...@spiritaero.com wrote:

> This may be an easy question for some of you:
>
> To find the envelope of a time decay signal, I'm using the modulus  
> of the analytical signal where the imaginary part is obtained from  
> a hilbert transform such that
>
> z = x + j*x_hat
>
> To get x_hat, I'm convolving x with 1/pi/t as given in the  
> literature. The problem I'm having is that x_hat seems to be scaled  
> by 2 times that of x, but it's not exactly 2 times. This causes  
> beating or modulation in the decay signal due to amplitude mismatch  
> between x and x_hat, which is quite evident when looking at simple  
> sinusoidal decays, but would probably just cause extra messiness in  
> actual third octave filtered system decays (structural vibration).  
> This is not an issue if I know the correct scalar to use, but I'm  
> not seeing it in the literature. Am I doing something wrong during  
> the convolution? The code is as follows:
>
> t = linspace(0,2,16000);
> x = 1*sin(2*pi*80*t).*exp(-.01*2*pi*80*t);
>
> x_hat = conv(1./(pi*t),x);
> x_hat = x_hat(length(x):end);
>
> z = sqrt(x.^2 + x_hat.^2);
> 



(You need to be a member of matlab -- send a blank email to matlab-subscribe@yahoogroups.com )