Technical discussion about Matlab and issues related to Digital Signal Processing.
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);
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); >