Question on pole-zero cancellation



Hi,

I have a conundrum which I'm tying myself in knots thinking about; if anyone can shed any light it would be much appreciated!

Take as a simple example the moving-sum filter:

L-1
H(z) = Sum { z^-n }
n=0

= 1 - z^-L
--------
1 - z^-1

The numerator includes a zero at DC, the denominator gives a pole at DC, and so these cancel, giving non-zero response at DC.

However, if we implement the filter recursively:
(I hope my ASCII art comes out ok...)

+------+
---+--->| z^-L |------+
| +------+ | -
| v
+----------------->0-----------------+----->
^ |
| +------+ |
+-----| z^-1 |<---+
+------+

This is equivalent to:

+------+
---+--->| z^-L |------+
| +------+ | -
| v
+----------------->0--->0-----------------+----->
^ |
| +------+ |
+-----| z^-1 |<---+
+------+

i.e. implementing the feedforward section before the feedback section, and doing the two additions separately.

The feedforward section has already killed the DC component, so we can't recover it.

So my question is, how does the recursive moving-sum filter manage to work (and we know it does), if it appears to be exactly equivalent to something that blocks DC?


--
Oli
.