Side-by-side comparison
| Parameter | Causal | Non-Causal System |
|---|---|---|
| Dependence on future input | No — output y(n) depends only on x(n), x(n−1), … | Yes — output y(n) depends on x(n+1), x(n+2), … etc. |
| Physical realisability | Realisable in real time | Not realisable in real time; requires stored data |
| Impulse response | h(n) = 0 for n < 0 | h(n) ≠ 0 for some n < 0 |
| ROC of H(s) or H(z) | Right-half s-plane or outside a circle in z-plane | Left-half s-plane or inside a circle in z-plane |
| Filter type | IIR filters (Butterworth, Chebyshev) in real-time DSP | Zero-phase FIR used in offline ECG post-processing |
| Group delay | Non-zero; introduces phase distortion | Zero phase possible (linear phase FIR with future taps) |
| Example hardware | STM32 running a real-time IIR filter at 1 kHz loop rate | MATLAB filtfilt() function used on recorded EEG data |
| Step response | Response starts at t = 0 for unit step applied at t = 0 | Response can start before t = 0 (anticipatory) |
| Stability condition | BIBO stable if poles inside unit circle (discrete) | Stability defined differently; ROC must include unit circle |
| Typical exam scenario | Check if h[n] = 0 for n < 0 | h[n] = (0.5)^|n| is non-causal as it is non-zero for n < 0 |
Key differences
The key test for causality is whether h[n] = 0 for all n < 0. The sequence h[n] = (0.5)^|n| fails this because it is non-zero for negative n. In the Laplace domain, a causal system's ROC is a right-half plane (Re{s} > σ0), while a non-causal system's ROC may be a left-half plane. Real-time DSP on an STM32 is always causal; the filtfilt() function in MATLAB uses the entire data record to achieve zero-phase, making it non-causal. GATE consistently tests the impulse response condition.
When to use Causal
Use a causal system whenever the application runs in real time — for example, a digital hearing aid that must process speech with a latency under 5 ms cannot look at future samples.
When to use Non-Causal System
Use a non-causal approach when data is available in full before processing — for example, applying a zero-phase Butterworth filter with MATLAB's filtfilt() to a 30-second ECG recording to remove baseline wander without distorting P-wave timing.
Recommendation
For both exams and placements, choose causal for any real-time or hardware-embedded context. Non-causal appears in offline signal processing questions. In GATE, if the ROC or impulse response is given, check causality before anything else — it unlocks the stability analysis.
Exam tip: Examiners ask you to determine causality from h[n]: state the rule h[n] = 0 for n < 0, then verify it with the given sequence — do not just say "it depends on time"; show the check explicitly.
Interview tip: An interviewer at a DSP company will ask the difference between filter() and filtfilt() in MATLAB — explain that filter() is causal (real-time usable) while filtfilt() is non-causal (zero-phase, offline only).