help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Hilbert transform


From: Juan Pablo Carbajal
Subject: Re: Hilbert transform
Date: Fri, 6 Jul 2012 20:42:50 +0200

On Fri, Jul 6, 2012 at 7:53 PM, Ben Abbott <address@hidden> wrote:
>
> On Jul 6, 2012, at 12:44 PM, Sergei Steshenko wrote:
>
>> Hello,
>>
>> i am talking about 'hilbert' function from from 'signal-1.1.3/hilbert.m' 
>> file, so Octave help list purists are welcome to send me with my 
>> uncomfortable questions to octave-dev list.
>>
>> But I'll ask my questions here - from my reading (and recollections of what 
>> I learned a long long time ago) the issue is mathematical/computational.
>>
>> First a couple of references:
>>
>> 1) http://w3.msi.vxu.se/exarb/mj_ex.pdf - I think put together really nicely;
>> 2) http://en.wikipedia.org/wiki/Hilbert_transform
>> .
>>
>> Wherever we look, we find that the definition of Hilbert transform is 
>> through integral of a _real_ function, i.e.
>>
>> hilbert(u(t)) == integral_from_minus_to_plus_inf("u(tau) / (t - tau)", 
>> "dtau")
>>
>> and as such it should be a _real_ function of 't' provided u(t) is a real 
>> function of 't'.
>>
>>
>> Also, it is proven that
>>
>> hilbert(hilbert(u(t))) == -u(t)
>> .
>>
>> Now, here is Octave and its package reality:
>>
>>
>> "
>> octave:1> hilbert([1 2 3 4])
>> ans =
>>
>>    1 + 1i   2 - 1i   3 - 1i   4 + 1i
>>
>> octave:2> hilbert(hilbert([1 2 3 4]))
>> warning: HILBERT: ignoring imaginary part of signal
>> ans =
>>
>>    1 + 1i   2 - 1i   3 - 1i   4 + 1i
>>
>> octave:3>
>> ".
>>
>> Three violations already:
>>
>> 1) output is complex rather than real;
>> 2) the transform is not invertible;
>> 3) since Hilbert transform is linear, complex input should be accepted 
>> according to
>>
>> hilbert(foo + i * bar) == hilbert(foo) + i * hilbert(bar)
>> .
>>
>> To put things politically correctly, Hilbert transform is a canine female to 
>> calculate - because of the above "/ (t -tau)", and it's problematic to 
>> calculate in discrete domain.
>>
>> So, my first practical question is: "What does Matlab do ?".
>>
>> Thanks,
>>   Sergei.
>
> Matlab's online doc for hilbert() is at the link below.
>
> http://www.mathworks.com/help/toolbox/signal/ref/hilbert.html
>
> The example below is included on that page.
>
>         hilbert ([1 2 3 4])
>         ans =   1 + 1i   2 - 1i   3 - 1i   4 + 1i
>
> It appears that the hilbert() function is *not* a direct implementation of 
> the Hilbert Transform, but the version in the signal package does appear to 
> be consistent with the one which is part of the Matlab Signals toolbox.
>
> After a quick look, my impression is that the hilbert() function's output is 
> hilbert(x) = 1i * H(x) + x.  Where, H(x) is the Hilbert Transform.  I don' t 
> know why the author (mathworks?) decided to restrict the input to real values.
>
> Ben
>
> _______________________________________________
> Help-octave mailing list
> address@hidden
> https://mailman.cae.wisc.edu/listinfo/help-octave

The function hilbert returns the analytic signal
http://en.wikipedia.org/wiki/Analytic_signal


-- 
M. Sc. Juan Pablo Carbajal
-----
PhD Student
University of Zürich
http://ailab.ifi.uzh.ch/carbajal/


reply via email to

[Prev in Thread] Current Thread [Next in Thread]