I'm coming from a math background with no prior knowledge in physics or engineering and currently teaching myself signals processing. Upon learning the definition of a Hilbert transform for a real signal $s(t)$ I find it difficult to determine exactly what the Hilbert transform is doing.

The source I am reading describes the Hilbert transform in a tautological way: "The Hilbert transform of a real signal $s(t)$ is the output $\hat{s}(t)$ of a Hilbert transformer when $s(t)$ is the input".

Apparently the Hilbert transform arises from some sort of "phase splitter" $\Phi(f)$ where $f$ is the frequency of something and we can represent $\Phi(f) = \frac{1}{2}(1 + H(f))$ where $H(f)$ is the Hilbert transform.

With these definitions I'm unsure of how I would compute $\hat{s}(t)$, especially when one is a function of time and the other is a function of frequency.

Any help in understanding this concept would be greatly appreciated.


2 Answers 2


The Hilbert transform is so heavily used that you'll find each author using their favorite definition, or the definition that they think is best for the task at hand. If you really want to find the original meaning you may want to chase down it's history starting from Hilbert's work in 1905 -- from the Wikipedia article, though, it looks like the concept has undergone considerable expansion since Hilbert's original conception.

The definition I carry in my head is that for a given time-domain signal $x(t)$ with Fourier transform $X(\omega) = \mathscr F \{x(t)\}$, it shifts all positive-frequency components of a signal by $-90^\circ$, and all negative-frequency components of a signal by $+90^\circ$.

In the frequency domain, this can be expressed as $\hat X(\omega) = H(\omega) X(\omega)$, where $H(\omega)$ is $$H (\omega) = \begin{cases} \phantom{-}j & \omega < 0 \\ \phantom{-}0 & \omega = 0 \\ -j & \omega > 0 \end{cases} \tag 1$$

If you take the inverse Fourier transform of (1), you'll get $$h(\tau) = \frac 1 {\pi \tau} \tag 2$$ (I'm not taking responsibility for scaling here -- I'm just parroting what Wikipedia says. In practice you end up scaling and filtering and committing all sorts of other Crimes Against Pure Mathematics to get things working - read on).

In theory, you can just compute $\hat x(t)$ by convolving it with $h(\tau)$: $\hat x(t) = x(t) * h(\tau)$. In practice, $h(\tau)$ is infinite in extent and has unbounded magnitude as $\tau \to 0$. Each of these properties means that you cannot, in practice, perform a "full" Hilbert transform on a signal.

In practice, you're almost always doing a Hilbert transform to get an inphase/quadrature pair (i.e., an analytic signal) from a real-valued signal, usually with the goal of halving the bandwidth (see Marcus Müller's answer).

The answer to how to perform a practically useful approximation to a Hilbert transform is to determine your frequency range of interest and design a low-pass filter in the frequency domain. Then multiply that filter by $H(\omega)$ and find a best-fit FIR filter. You'll find that there's a trade off between low-frequency performance and both filter length and the magnitude of the filter around its center point -- the practicalities of your problem at hand will determine how you deal with that trade off.

As a historical note, in the 1940's and 1950's, it was popular to transmit and receive single-sideband audio by using "phasing networks". These were real capacitor-resistor-inductor networks, sometimes with tube or transistor amplifying elements, that implemented a pair of all-pass filters whose outputs would be 90 degrees apart from each other over the audio frequency range. These two outputs would then be used as an electronic analog of an analytical signal to generate or demodulate an SSB signal.

This method is still in use today by hobbyists, using op-amp active filters for the phase-shift networks (or software): search on "the phasing method" and "the Weaver method" if you're interested.


The Fourier transform of a real-valued function $s(t)$ is a conjugate symmetric function $S(f)$ of frequency $f$.

It is an engineering wish to use as little bandwidth, that is, to have the smallest possible support for $S(f)$, to transport the information in $s(t)$. (you might have noticed what you're reading is mostly from a communications engineering context – and having less support for any particular $S$ means we can put more information into the same bandwidth; and getting information across is the goal of communications engineering.)

The problem here is that a symmetrical $S$ implies that we're redundant; we could completely omit the negative half of the spectrum (that is, let $\tilde S(f) := \begin{cases} 2S(f) & f> 0\\S(f) & f=0 \\ 0 &f<0\end{cases}$) and not lose any information (whoever observes that $\tilde S$ can just "mirror" the positive frequencies to reconstruct the original $S$).

The Hilbert Transform $\mathscr H$ is an operator mapping functions to functions, both of a single real variable:

$$\mathscr H(u)(t):\quad(u:\mathbb R\mapsto \mathbb C) \mapsto (H(u):\mathbb R\mapsto \mathbb C),$$

such that

$$ s(t) + \mathscr H(s)(t) = \tilde s(t),$$

where $\tilde s(t)$ is the inverse Fourier transform of the $\tilde S(f)$ above. We call it the analytic signal.

In other words, what the Hilbert transform does, is to map $s$ to exactly that complex-valued function that "erases" the negative frequency content from $s$ when added to it.

How would you compute it? That really depends. Usually, you don't. It's a mathematically illustrative tool to show that we can convert any real-valued signal to a complex-valued signal that contains only positive frequencies, and you care about that, not about the Hilbert transform itself.

There's actually an explicit notation for the Hilbert transform, but it will require you to find the Cauchy principal value of an integral which usually involves at least one application of the Residue Theorem; not sure it's any more explicit saying "it's the thing that swaps the sign of the negative half of the frequency-space function", to be honest; anyways, it formally reads

$$\mathscr H(u)(t) = \frac1\pi \overline{\int\limits_{-\infty}^{+\infty}} \frac{u(v)}{t-v}\, \mathrm dv,$$

with $\overline{\int\limits_\cdot^\cdot}$ should be read as "the Cauchy principal value of this integral". You'll notice the singularity for $v=t$ in the integrand.

Technically, as alluded to, the actual Hilbert transform is never actually computed in application; you'd either help yourself to an approximation of the analytic signal simply by applying a complex high-pass filter that erases negative frequencies (which sadly isn't a nice system and comes with a bunch of hairy properties), or you combine finding the analytic signal with a frequency shift (i.e., what would be a multiplication with $e^{\sqrt{-1}\Delta_\omega t}$ of $\tilde s(t)$), to a quadrature mixer.

  • $\begingroup$ Why do we want the factor 2 in the spectrum of the analytic signal $\tilde{S}(f) = 2S(f)$ for $f > 0$? I mean why not simply $\tilde{S}(f) = S(f)$, or $\tilde{S}(f) = \sqrt2S(f)$ for an equal energy? $\endgroup$ Jan 27 at 22:51
  • $\begingroup$ @CathMaillon definition, probably with the intent of keeping the power equal. Don't get hung up on definitions. $\endgroup$ Jan 27 at 22:54
  • $\begingroup$ For keeping the power equal, shouldn't it be $\sqrt 2$? $\endgroup$ Jan 27 at 22:55
  • $\begingroup$ no, it shouldn't, otherwise the Hilbert transform would need to incorporate a factor of $\sqrt2-1$… $\endgroup$ Jan 27 at 22:56
  • $\begingroup$ Sorry for keep asking. The energy of the analytic signal $\tilde{s}(t)$ is the integral $\int |\tilde{S}(f)|^2df=\int_{f>0}|2 S(f)|^2 df = 4 \int_{f>0}| S(f)|^2 df$. The energy of the real-valued $s(t)$ is $\int |S(f)|^2df=2\int_{f>0}|S(f)|^2 df$ because of the conjugate symmetric property. The analytic signal has twice the energy of the real-valued signal. Could you show me where I am wrong? Thanks. $\endgroup$ Jan 27 at 23:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.