Initial conditions for transposed direct-form II filter implementation

`z`

` = `

filtic(b,a,y,x)

z` = `

filtic(b,a,y)

`z`

finds
the initial conditions, ` = `

filtic(b,a,y,x)`z`

, for the delays in the *transposed direct-form
II* filter implementation given past outputs `y`

and
inputs `x`

. The vectors `b`

and `a`

represent
the numerator and denominator coefficients, respectively, of the filter's
transfer function.

The vectors `x`

and `y`

contain
the most recent input or output first, and oldest input or output
last.

$$\begin{array}{l}x=[x(-1),x(-2),x(-3),\dots ,x(-n)]\\ y=[y(-1),y(-2),y(-3),\dots ,y(-m)]\end{array}$$

where `n`

is `length(b)-1`

(the
numerator order) and `m`

is `length(a)-1`

(the
denominator order). If` length(x)`

is less than `n`

, `filtic`

pads
it with zeros to length `n`

; if `length(y)`

is
less than `m`

, `filtic`

pads it
with zeros to length `m`

. Elements of `x`

beyond `x(n-1)`

and
elements of `y`

beyond `y(m-1)`

are
unnecessary so `filtic`

ignores them.

Output `z`

is a column vector of length equal
to the larger of *n* and *m*. `z`

describes the state of the delays given past inputs `x`

and
past outputs `y`

.

`z`

assumes
that the input ` = `

filtic(b,a,y)`x`

is 0 in the past.

The transposed direct-form II structure is shown in the following illustration.

*n* – 1
is the filter order.

`filtic`

works for both real and complex inputs.

If any of the input arguments `y`

, `x`

, `b`

,
or `a`

is not a vector (that is, if any argument
is a scalar or array), `filtic`

gives the following
error message:

Requires vector inputs.

[1] Oppenheim, A.V., and R.W. Schafer, *Discrete-Time
Signal Processing*, Prentice-Hall, 1989, pp. 296,
301-302.

Was this topic helpful?