Computes the extension of a real valued signal to an analytic signal.
hilbert(x, n = ifelse(is.vector(x), length(x), nrow(x)))
Arguments
x: Input array, specified as a vector or a matrix. In case of a matrix, the Hilbert transform of all columns is computed.
n: use an n-point FFT to compute the Hilbert transform. The input data is zero-padded or truncated to length n, as appropriate.
Returns
Analytic signal, of length n, returned as a complex vector or matrix, the real part of which contains the original signal, and the imaginary part of which contains the Hilbert transform of x.
Details
The function returns returns a complex helical sequence, sometimes called the analytic signal, from a real data sequence. The analytic signal has a real part, which is the original data, and an imaginary part, which contains the Hilbert transform. The imaginary part is a version of the original real sequence with a 90 degrees phase shift. Sines are therefore transformed to cosines, and conversely, cosines are transformed to sines. The Hilbert-transformed series has the same amplitude and frequency content as the original sequence. The transform includes phase information that depends on the phase of the original.
Examples
## notice that the imaginary signal is phase-shifted 90 degreest <- seq(0,10, length =256)z <- hilbert(sin(2* pi *0.5* t))plot(t, Re(z), type ="l", col="blue")lines (t, Im(z), col ="red")legend('topright', lty =1, legend = c("Real","Imag"), col = c("blue","red"))## the magnitude of the hilbert transform eliminates the carriert <- seq(0,10, length =1024)x <-5* cos(0.2* t)* sin(100* t)plot(t, x, type ="l", col ="green")lines (t, abs(hilbert(x)), col ="blue")legend('topright', lty =1, legend = c("x","|hilbert(x)|"), col = c("green","blue"))