[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Hilbert transform
From: |
Ben Abbott |
Subject: |
Re: Hilbert transform |
Date: |
Fri, 06 Jul 2012 13:53:29 -0400 |
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
- Hilbert transform, Sergei Steshenko, 2012/07/06
- Re: Hilbert transform,
Ben Abbott <=
- Re: Hilbert transform, Juan Pablo Carbajal, 2012/07/06
- Re: Hilbert transform, Sergei Steshenko, 2012/07/06
- Re: Hilbert transform, Juan Pablo Carbajal, 2012/07/06
- Re: Hilbert transform, Sergei Steshenko, 2012/07/06
- Re: Hilbert transform, Ozzy Lash, 2012/07/06
- Re: Hilbert transform, Ben Abbott, 2012/07/06
- Re: Hilbert transform, Sergei Steshenko, 2012/07/06
- Re: Hilbert transform, Przemek Klosowski, 2012/07/09
- Re: Hilbert transform, Przemek Klosowski, 2012/07/09