Causal filter

From Wikipedia, the free encyclopedia

In signal processing, a causal system is one whose output depends only on past and present inputs. A causal system that is also linear and time-invariant is a causal filter. A filter whose output also depends on future inputs is acausal. Systems (including filters) that are realizable (i.e. that operate in real time) must be causal because such systems cannot act on a future input. In effect that means the output sample that best represents the input at time t\, comes out slightly later. A common design practice is to create a realizable filter by shortening and/or time-shifting a non-causal impulse response. If shortening is necessary, it is often accomplished as the product of the impulse-response with a window function.

[edit] Example

The following definition is a moving (or "sliding") average of input data s(x)\,. A constant factor of 1/2 is omitted for simplicity:

f(x) = \int_{x-1}^{x+1} s(\tau)\, d\tau\ = \int_{-1}^{+1} s(x + \tau) \,d\tau\,

where x could represent a spatial coordinate, as in image processing. But if x\, represents time (t)\,, then a moving average defined that way is non-causal (also called non-realizable), because f(t)\, depends on future inputs, such as s(t+1)\,. A realizable output is

f(t-1) = \int_{-2}^{0} s(t + \tau)\, d\tau = \int_{0}^{+2} s(t - \tau) \, d\tau\,

which is a delayed version of the non-realizable output.

Any linear filter (such as a moving average) can be characterized by a function h(t) called its impulse response. Its output is the convolution

f(t) = (h*s)(t) = \int_{-\infty}^{\infty} h(\tau) s(t - \tau)\, d\tau. \,

In those terms, causality requires

f(t) = \int_{0}^{\infty} h(\tau) s(t - \tau)\, d\tau

and general equality of these two expressions requires h(t) = 0 for all t < 0.

[edit] Characterization of causal filters in the frequency domain

Let h(t) be a causal filter with corresponding Fourier transform H(ω). Define the function

g(t) = {h(t) + h^{*}(-t) \over 2}

which is non-causal. On the other hand, g(t) is Hermitian and, consequently, its Fourier transform G(ω) is real-valued. We now have the following relation

h(t) = 2\, \operatorname{step}(t) \cdot g(t)\,

where step(t) is the unit step function.

This means that the Fourier transforms of h(t) and g(t) are related as follows

H(\omega) = \left(\delta(\omega) - {i \over \pi \omega}\right) * G(\omega) = G(\omega) - i\cdot \widehat G(\omega) \,

where \widehat G(\omega)\, is a Hilbert transform done in the frequency domain (rather than the time domain).