DSP_iirlat
4-56
All-Pole IIR Lattice Filter
DSP_iirlat
Function void DSP_iirlat(const short * restrict x, int nx, const short * restrict k, int nk, int
* restrict b, short * restrict r)
Arguments x[nx] Input vector (16-bit).
nx Length of input vector.
k[nk] Reflection coefficients in Q.15 format.
nk Number of reflection coefficients/lattice stages. Must be >=4.
Make multiple of 2 to avoid bank conflicts.
b[nk+1] Delay line elements from previous call. Should be initialized to
all zeros prior to the first call.
r[nx] Output vector (16-bit).
Description This routine implements a real all-pole IIR filter in lattice structure (AR lattice).
The filter consists of nk lattice stages. Each stage requires one reflection
coefficient k and one delay element b. The routine takes an input vector x[] and
returns the filter output in r[]. Prior to the first call of the routine, the delay
elements in b[] should be set to zero. The input data may have to be pre-scaled
to avoid overflow or achieve better SNR. The reflections coefficients lie in the
range −1.0 < k < 1.0. The order of the coefficients is such that k[nk−1]
corresponds to the first lattice stage after the input and k[0] corresponds to the
last stage.
Algorithm This is the C equivalent of the assembly code without restrictions. Note that
the assembly code is hand optimized and restrictions may apply.
void iirlat(short *x, int nx, short *k, int nk, int *b,
short *r)
{
int rt; /* output */
int i, j;
for (j=0; j<nx; j++)
{
rt = x[j] << 15;
for (i = nk − 1; i >= 0; i−−)
{