x = hilbert(xr) returns
a complex helical sequence, sometimes called the analytic
signal, from a real data sequence. The analytic signal x = xr + i*xi has a real part, xr,
which is the original data, and an imaginary part, xi,
which contains the Hilbert transform. The imaginary part is a version
of the original real sequence with a 90° phase shift. Sines are
therefore transformed to cosines and vice versa. The Hilbert transformed
series has the same amplitude and frequency content as the original
real data and includes phase information that depends on the phase
of the original data.

If xr is a matrix, x = hilbert(xr) operates columnwise on the matrix,
finding the Hilbert transform of each column.

x = hilbert(xr,n) uses
an n point FFT to compute the Hilbert transform.
The input data xr is zero-padded or truncated to
length n, as appropriate.

The Hilbert transform is useful in calculating instantaneous
attributes of a time series, especially the amplitude and frequency.
The instantaneous amplitude is the amplitude of the complex Hilbert
transform; the instantaneous frequency is the time rate of change
of the instantaneous phase angle. For a pure sinusoid, the instantaneous
amplitude and frequency are constant. The instantaneous phase, however,
is a sawtooth, reflecting the way in which the local phase angle varies
linearly over a single cycle. For mixtures of sinusoids, the attributes
are short term, or local, averages spanning no more than two or three
points.

Reference [1] describes the
Kolmogorov method for minimum phase reconstruction, which involves
taking the Hilbert transform of the logarithm of the spectral density
of a time series. The toolbox function rceps performs
this reconstruction.

For a discrete-time analytic signal, x,
the last half of fft(x) is zero, and the first
(DC) and center (Nyquist) elements of fft(x) are
purely real.

The imaginary part of x is the Hilbert transform of xr, and the real part is xr itself.

imx = imag(x)
rex = real(x)

imx =
1 -1 -1 1
rex =
1 2 3 4

The last half of the DFT of x is zero. (In this example, the last half of the transform is just the last element.) The DC and Nyquist elements of fft(x) are purely real.

The analytic signal for a sequence x has
a one-sided Fourier transform. That is, the transform
vanishes for negative frequencies. To approximate the analytic signal, hilbert calculates
the FFT of the input sequence, replaces those FFT coefficients that
correspond to negative frequencies with zeros, and calculates the
inverse FFT of the result.

In detail, hilbert uses a four-step algorithm:

It calculates the FFT of the input
sequence, storing the result in a vector x.

It creates a vector h whose
elements h(i) have the values:

1 for i = 1, (n/2)+1

2 for i = 2,
3, ... , (n/2)

0 for i = (n/2)+2, ... , n

It calculates the element-wise product
of x and h.

It calculates the inverse FFT of the
sequence obtained in step 3 and returns the first n elements
of the result.

If the input data xr is a matrix, hilbert operates
in a similar manner, extending each step above to handle the matrix
case.

References

[1] Claerbout, Jon F. Fundamentals
of Geophysical Data Processing with Applications to Petroleum Prospecting.
Oxford, UK: Blackwell, 1985, pp. 59–62.

[2] Marple, S. L. "Computing the Discrete-Time
Analytic Signal via FFT." IEEE Transactions on Signal
Processing. Vol. 47, 1999, pp. 2600–2603.

[3] Oppenheim, Alan V., Ronald W. Schafer,
and John R. Buck. Discrete-Time Signal Processing.
2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.