The Causal Wiener Filter

Real-Time Filtering: You Cannot Look Into the Future

In any real-time system β€” a radio receiver, a noise-cancelling headphone, a Kalman-filter navigation unit β€” the estimate X^n\hat{X}_n must be computed from observations up to time nn. We must restrict the filter support to K=Zβ‰₯0\mathcal{K} = \mathbb{Z}_{\geq 0}. The Wiener-Hopf equation βˆ‘kβ‰₯0h[k] ryy[β„“βˆ’k]=rxy[β„“],β„“β‰₯0,\sum_{k \geq 0} h[k]\, r_{yy}[\ell - k] = r_{xy}[\ell], \qquad \ell \geq 0, is not a plain convolution: it holds only on the non-negative half-line. Taking the Fourier transform of both sides leaves the right-hand side unconstrained on β„“<0\ell < 0, so we cannot simply divide. The strategy is to pre-whiten the observation using the innovations representation of Section 9.3, solve the easy problem in innovations space, then map back.

Theorem: Causal Wiener Filter

Let (Xn,Yn)(X_n, Y_n) be jointly WSS with PyP_y satisfying Paley-Wiener, and let Py(f)=Py+(f)Pyβˆ’(f)P_y(f) = P_y^+(f) P_y^-(f) be the spectral factorization of the observation. The MMSE causal linear estimator X^n=βˆ‘kβ‰₯0hc[k]Ynβˆ’k\hat{X}_n = \sum_{k \geq 0} h_c[k] Y_{n-k} has transfer function β€…β€ŠhΛ‡c(f)=1Py+(f)[Pxy(f)Pyβˆ’(f)]+β€…β€Š\boxed{\;\check{h}_c(f) = \frac{1}{P_y^+(f)}\left[\frac{P_{xy}(f)}{P_y^-(f)}\right]_{+}\;} where [β‹…]+[\cdot]_+ is the causal projection operator: if G(f)=βˆ‘n∈Zg[n]eβˆ’j2Ο€fnG(f) = \sum_{n \in \mathbb{Z}} g[n] e^{-j 2\pi f n}, then [G(f)]+=βˆ‘nβ‰₯0g[n]eβˆ’j2Ο€fn[G(f)]_+ = \sum_{n \geq 0} g[n] e^{-j 2\pi f n}. The causal MMSE is Οƒc2=βˆ«βˆ’1/21/2[Px(f)βˆ’hΛ‡c(f) Pxyβˆ—(f)]df.\sigma_c^2 = \int_{-1/2}^{1/2}\left[P_x(f) - \check{h}_c(f)\, P_{xy}^*(f)\right] df.

Read the formula from right to left, as a three-step recipe. (1) Whiten the observation by dividing the cross-spectrum by the anti-causal factor Pyβˆ’(f)P_y^-(f) β€” this effectively re-expresses PxyP_{xy} in terms of the innovations JnJ_n. (2) Discard the anti-causal components of the result: that is what [β‹…]+[\cdot]_+ does. (3) Color the output back by dividing by the causal factor Py+(f)P_y^+(f). The filter is the composition of a whitener, a causal truncator, and a recoloring stage.

,

Causal MMSE Is Never Smaller Than Non-Causal MMSE

For any jointly WSS pair (X,Y)(X, Y), Οƒnc2≀σc2≀σp2,\sigma_{\text{nc}}^2 \leq \sigma_c^2 \leq \sigma_p^2, where Οƒp2\sigma_p^2 is the one-step prediction MMSE of YY (Section 9.5). The first inequality reflects the fact that the causal filter is a special case of the non-causal filter (with zero taps for k<0k < 0), so its MSE cannot be smaller. The second inequality is less obvious and requires the observation that the prediction problem is the causal Wiener problem for the specific target Xn=YnX_n = Y_n. The gap Οƒc2βˆ’Οƒnc2\sigma_c^2 - \sigma_{\text{nc}}^2 quantifies the price of real-time causality and depends on how much future information carries useful signal about XnX_n.

Example: Closed-Form Causal Wiener Filter for AR(1)+Noise

Using the spectral factors from ESpectral Factorization of the AR(1)+Noise PSD, derive the causal Wiener filter for the AR(1)+noise problem in closed form.

Causal vs Non-Causal MMSE Ratio

For three AR(1) coefficients, the ratio Οƒc2/Οƒnc2\sigma_c^2 / \sigma_{\text{nc}}^2 as a function of SNR. The ratio is always at least 1; it measures how much the causal constraint costs. For weakly correlated signals (aa small) the ratio stays near 1 because the past contains most of the information; for strongly correlated signals the gap opens at moderate SNRs.

Parameters
-10
30

Design Flow for the Causal Wiener Filter (Rational PSDs)

Complexity: Spectral factorization is O(d^3) for degree-d rational PSDs. Projection and recoloring are O(d).
Input: rational PSDs P_x(f), P_y(f), P_xy(f)
Output: causal Wiener filter h_c[n]
1. Check Paley-Wiener: verify int log P_y(f) df > -infty
2. Spectral factorization:
factor numerator and denominator of P_y(z)
collect all roots with |z| < 1 into P_y^+(z)
set P_y^-(z) = conj(P_y^+(1/z^*))
3. Whiten cross-spectrum:
G(f) = P_xy(f) / P_y^-(f)
4. Causal projection:
G_+(f) = [G(f)]_+ (partial fractions: keep causal terms)
5. Recolor:
H_c(f) = G_+(f) / P_y^+(f)
6. Invert DTFT to obtain h_c[n] (or keep H_c for frequency-domain use)

For non-rational PSDs, step 2 becomes a numerical integration (of log⁑Py\log P_y) followed by cepstral recovery of the coefficients cnc_n. This is the standard numerical route in real codes.

Non-Causal vs Causal Wiener Filter

AspectNon-CausalCausal
Support of h[k]h[k]k∈Zk \in \mathbb{Z} (all lags)kβ‰₯0k \geq 0
Transfer functionPxy(f)/Py(f)P_{xy}(f)/P_y(f)(1/Py+(f))β‹…[Pxy(f)/Pyβˆ’(f)]+(1/P_y^+(f)) \cdot [P_{xy}(f)/P_y^-(f)]_+
Requires spectral factorization?NoYes
Requires Paley-Wiener?No (only Py(f)>0P_y(f) > 0)Yes
MMSE∫(Pxβˆ’βˆ£Pxy∣2/Py) df\int (P_x - |P_{xy}|^2/P_y)\,df∫(Pxβˆ’hΛ‡cPxyβˆ—) df\int (P_x - \check{h}_c P_{xy}^*)\,df
OrderingΟƒnc2≀σc2\sigma_{\text{nc}}^2 \leq \sigma_c^2 alwaysequal iff Pxy/Pyβˆ’P_{xy}/P_y^- is already causal
Real-time?No (batch)Yes
ImplementationFFT blockRecursive (IIR) or FIR truncation

Common Mistake: [β‹…]+[\cdot]_+ Is Not the Same as the Real Part

Mistake:

Replacing the causal projector [G(f)]+[G(f)]_+ with Re G(f)\mathrm{Re}\,G(f) or with a zero-phase truncation.

Correction:

The causal projector keeps the Fourier coefficients g[n]g[n] for nβ‰₯0n \geq 0 and throws away those for n<0n < 0. In the frequency domain this is not a linear-phase operation β€” it produces a complex function even when G(f)G(f) is real. The only exact way to compute [G(f)]+[G(f)]_+ is to take the inverse DTFT, multiply by the unit step, and take the DTFT back (or do partial fractions for rational GG).

⚠️Engineering Note

Stability of the Causal Wiener IIR Implementation

Because the causal Wiener filter involves 1/Py+(f)1/P_y^+(f), its impulse response may be IIR. The filter is guaranteed stable (all poles inside the unit circle) precisely because Py+(f)P_y^+(f) is minimum-phase. In finite-precision arithmetic, however, poles close to the unit circle can produce numerically unstable recursions; in DSP practice one often uses a second-order cascade implementation and monitors the pole radii. For very-high-order rational PSDs, balanced-truncation model reduction can yield a lower-order filter with negligible loss in MMSE.

Practical Constraints
  • β€’

    Minimum-phase spectral factor guarantees mathematical stability.

  • β€’

    Numerical stability requires care when poles approach the unit circle.

Key Takeaway

The causal Wiener filter is obtained by a three-stage procedure: whiten the observation with the inverse minimum-phase factor 1/Py+(f)1/P_y^+(f), project onto the causal subspace, then recolor. The resulting filter is causal, stable, and minimum-MSE over all causal linear estimators. Its recursive implementation coincides with the steady-state Kalman filter for rational spectra.

Quick Check

Which of the following is always TRUE about the causal and non-causal Wiener MMSE?

Οƒc2β‰₯Οƒnc2\sigma_c^2 \geq \sigma_{\text{nc}}^2 with equality iff Pxy(f)/Pyβˆ’(f)P_{xy}(f)/P_y^-(f) is already causal.

Οƒc2≀σnc2\sigma_c^2 \leq \sigma_{\text{nc}}^2 because the causal filter uses less information.

Οƒc2=Οƒnc2\sigma_c^2 = \sigma_{\text{nc}}^2 whenever the signal is white.