Block signal processing
In this section the usual convolution and recursion that implements FIR
and IIR discrete-time filters are reformulated in terms of vectors andmatrices. Because the same data is partitioned and grouped in a variety
of ways, it is important to have a consistent notation in order to beclear. The
${n}^{th}$ element of a data sequence is expressed
$h\left(n\right)$ or, in
some cases to simplify,
${h}_{n}$ . A block or finite length column vector is
denoted
${\underline{h}}_{n}$ with
$n$ indicating the
${n}^{th}$ block or
section of a longer vector. A matrix, square or rectangular, is indicatedby an upper case letter such as
$H$ with a subscript if appropriate.
Block convolution
The operation of a finite impulse response (FIR) filter is described by a
finite convolution as
$$y\left(n\right)=\sum _{k=0}^{L-1}h\left(k\right)\phantom{\rule{0.166667em}{0ex}}x(n-k)$$
where
$x\left(n\right)$ is causal,
$h\left(n\right)$ is causal and of length
$L$ , and the time
index
$n$ goes from zero to infinity or some large value. With a change
of index variables this becomes
$$y\left(n\right)=\sum h(n-k)\phantom{\rule{0.166667em}{0ex}}x\left(k\right)$$
which can be expressed as a matrix operation by
$$\left[\begin{array}{c}{y}_{0}\\ {y}_{1}\\ {y}_{2}\\ \vdots \end{array}\right]=\left[\begin{array}{ccccc}{h}_{0}& 0& 0& \cdots & 0\\ {h}_{1}& {h}_{0}& 0& & \\ {h}_{2}& {h}_{1}& {h}_{0}& & \\ \vdots & & & & \vdots \end{array}\right]\left[\begin{array}{c}{x}_{0}\\ {x}_{1}\\ {x}_{2}\\ \vdots \end{array}\right].$$
The
$H$ matrix of impulse response values is partitioned into
$N$ by
$N$ square sub matrices and the
$X$ and
$Y$ vectors are partitioned into
length-
$N$ blocks or sections. This is illustrated for
$N=3$ by
$${H}_{0}=\left[\begin{array}{ccc}{h}_{0}& 0& 0\\ {h}_{1}& {h}_{0}& 0\\ {h}_{2}& {h}_{1}& {h}_{0}\end{array}\right]\phantom{\rule{72.26999pt}{0ex}}{H}_{1}=\left[\begin{array}{ccc}{h}_{3}& {h}_{2}& {h}_{1}\\ {h}_{4}& {h}_{3}& {h}_{2}\\ {h}_{5}& {h}_{4}& {h}_{3}\end{array}\right]\phantom{\rule{36.135pt}{0ex}}\phantom{\rule{4.pt}{0ex}}\text{etc.}\phantom{\rule{4.pt}{0ex}}$$
$${\underline{x}}_{0}=\left[\begin{array}{c}{x}_{0}\\ {x}_{1}\\ {x}_{2}\end{array}\right]\phantom{\rule{72.26999pt}{0ex}}{\underline{x}}_{1}=\left[\begin{array}{c}{x}_{3}\\ {x}_{4}\\ {x}_{5}\end{array}\right]\phantom{\rule{72.26999pt}{0ex}}{\underline{y}}_{0}=\left[\begin{array}{c}{y}_{0}\\ {y}_{1}\\ {y}_{2}\end{array}\right]\phantom{\rule{36.135pt}{0ex}}\phantom{\rule{4.pt}{0ex}}\text{etc.}\phantom{\rule{4.pt}{0ex}}$$
Substituting these definitions into
[link] gives
$$\left[\begin{array}{c}{\underline{y}}_{0}\\ {\underline{y}}_{1}\\ {\underline{y}}_{2}\\ \vdots \end{array}\right]=\left[\begin{array}{ccccc}{H}_{0}& 0& 0& \cdots & 0\\ {H}_{1}& {H}_{0}& 0& & \\ {H}_{2}& {H}_{1}& {H}_{0}& & \\ \vdots & & & & \vdots \end{array}\right]\left[\begin{array}{c}{\underline{x}}_{0}\\ {\underline{x}}_{1}\\ {\underline{x}}_{2}\\ \vdots \end{array}\right]$$
The general expression for the
${n}^{th}$ output block is
$${\underline{y}}_{n}=\sum _{k=0}^{n}{H}_{n-k}\phantom{\rule{0.166667em}{0ex}}{\underline{x}}_{k}$$
which is a vector or block convolution. Since the matrix-vector
multiplication within the block convolution is itself a convolution,
[link] is a sort of convolution of convolutions and the finite length
matrix-vector multiplication can be carried out using the FFT or otherfast convolution methods.
The equation for one output block can be written as the product
$${\underline{y}}_{2}=\left[{H}_{2},{H}_{1},{H}_{0}\right]\left[\begin{array}{c}{\underline{x}}_{0}\\ {\underline{x}}_{1}\\ {\underline{x}}_{2}\end{array}\right]$$
and the effects of one input block can be written
$$\left[\begin{array}{c}{H}_{0}\\ {H}_{1}\\ {H}_{2}\end{array}\right]{\underline{x}}_{1}=\left[\begin{array}{c}{\underline{y}}_{0}\\ {\underline{y}}_{1}\\ {\underline{y}}_{2}\end{array}\right].$$
These are generalize statements of overlap save and overlap add
[link] ,
[link] . The block length can be longer, shorter, or equal to
the filter length.
Block recursion
Although less well-known, IIR filters can also be implemented with block
processing
[link] ,
[link] ,
[link] ,
[link] ,
[link] . The block form of an IIR
filter is developed in much the same way as for the block convolutionimplementation of the FIR filter. The general constant coefficient
difference equation which describes an IIR filter with recursivecoefficients
${a}_{l}$ , convolution coefficients
${b}_{k}$ , input signal
$x\left(n\right)$ ,
and output signal
$y\left(n\right)$ is given by
$$y\left(n\right)=\sum _{l=1}^{N-1}{a}_{l}\phantom{\rule{0.166667em}{0ex}}{y}_{n-l}+\sum _{k=0}^{M-1}{b}_{k}\phantom{\rule{0.166667em}{0ex}}{x}_{n-k}$$
using both functional notation and subscripts, depending on which is
easier and clearer. The impulse response
$h\left(n\right)$ is
$$h\left(n\right)=\sum _{l=1}^{N-1}{a}_{l}\phantom{\rule{0.166667em}{0ex}}h(n-l)+\sum _{k=0}^{M-1}{b}_{k}\phantom{\rule{0.166667em}{0ex}}\delta (n-k)$$
which can be written in matrix operator form
$$\left[\begin{array}{ccccc}1& 0& 0& \cdots & 0\\ {a}_{1}& 1& 0& & \\ {a}_{2}& {a}_{1}& 1& & \\ {a}_{3}& {a}_{2}& {a}_{1}& & \\ 0& {a}_{3}& {a}_{2}& & \\ \vdots & & & & \vdots \end{array}\right]\left[\begin{array}{c}{h}_{0}\\ {h}_{1}\\ {h}_{2}\\ {h}_{3}\\ {h}_{4}\\ \vdots \end{array}\right]=\left[\begin{array}{c}{b}_{0}\\ {b}_{1}\\ {b}_{2}\\ {b}_{3}\\ 0\\ \vdots \end{array}\right]$$
In terms of
$N$ by
$N$ submatrices and length-
$N$ blocks, this becomes
$$\left[\begin{array}{ccccc}{A}_{0}& 0& 0& \cdots & 0\\ {A}_{1}& {A}_{0}& 0& & \\ 0& {A}_{1}& {A}_{0}& & \\ \vdots & & & & \vdots \end{array}\right]\left[\begin{array}{c}{\underline{h}}_{0}\\ {\underline{h}}_{1}\\ {\underline{h}}_{2}\\ \vdots \end{array}\right]=\left[\begin{array}{c}{\underline{b}}_{0}\\ {\underline{b}}_{1}\\ 0\\ \vdots \end{array}\right]$$
From this formulation, a block recursive equation can be written that will
generate the impulse response block by block.
$${A}_{0}\phantom{\rule{0.166667em}{0ex}}{\underline{h}}_{n}+{A}_{1}\phantom{\rule{0.166667em}{0ex}}{\underline{h}}_{n-1}=0\phantom{\rule{4.pt}{0ex}}\text{for}\phantom{\rule{4.pt}{0ex}}n\ge 2$$
$${\underline{h}}_{n}=-{A}_{0}^{-1}{A}_{1}\phantom{\rule{0.166667em}{0ex}}{\underline{h}}_{n-1}=K\phantom{\rule{0.166667em}{0ex}}{\underline{h}}_{n-1}\phantom{\rule{4.pt}{0ex}}\text{for}\phantom{\rule{4.pt}{0ex}}n\ge 2$$
with initial conditions given by
$${\underline{h}}_{1}=-{A}_{0}^{-1}{A}_{1}{A}_{0}^{-1}\phantom{\rule{0.166667em}{0ex}}{\underline{b}}_{0}+{A}_{0}^{-1}\phantom{\rule{0.166667em}{0ex}}{\underline{b}}_{1}$$