116 lines
3.5 KiB
Plaintext
116 lines
3.5 KiB
Plaintext
****************************************************************************
|
|
|
|
IIR.asm Infinite impulse response filter (IIR)
|
|
|
|
Analog Devices, Inc.
|
|
DSP Division
|
|
Three Technology Way
|
|
P.O. Box 9106
|
|
Norwood, MA 02062
|
|
|
|
23-JUNE-2001 BJM
|
|
|
|
This directory contains an example ADSP-2191, single-core Infinite
|
|
Impulse Response (IIR) filter.
|
|
The IIR code uses coefficients, in an ordered array and applies them to
|
|
the filter. A detailed discussion of the IIR algorithm can be found
|
|
in the source header comments of "IIR.ASM".
|
|
|
|
Files contained in this directory:
|
|
|
|
iir.asm ADSP-2191 source for an example IIR filter
|
|
iir_test.asm ADSP-2191 source to call iir.asm
|
|
adsp-2191.ldf Linker description file for the IIR example
|
|
iir.dpj The VDSP project file for the IIR example.
|
|
inreal_256.dat Input data for IIR example in 1.15 format.
|
|
coefs_hex.dat Coefficients for IIR example in 1.15 format.
|
|
_________________________________________________________________
|
|
|
|
CONTENTS
|
|
|
|
I. FUNCTION/ALGORITHM DESCRIPTION
|
|
II. IMPLEMENTATION DESCRIPTION
|
|
III. DESCRIPTION OF INPUT DATA
|
|
|
|
I. FUNCTION/ALGORITHM DESCRIPTION
|
|
|
|
The IIR filter code executes a canonical form (also called direct form II)
|
|
realization structure. The equation of the canonical form is
|
|
|
|
w(n)=x(n) + b1*w(n-1) + b2*w(n-2)
|
|
y(n)=w(n) + a1*w(n-1) + a2*w(n-2)
|
|
|
|
The input sample is x(n) and the output is y(n). The term w(n) is the
|
|
intermediate value; w(n-1) is the previous value and w(n-2) the one before
|
|
that. The variables a and b are the coefficients for the filter.
|
|
|
|
This example of canonical equation uses a variant that limits the summation
|
|
in the canonical form to two. This type of IIR is called a biquad and is a
|
|
second order filter. Higher order filters can be achieved by cascading several
|
|
sections of biquads together.
|
|
|
|
|
|
II. IMPLEMENTATION DESCRIPTION
|
|
|
|
The assembly language module IIR_TEST.ASM initializes the input and
|
|
coefficient buffers and then calls IIR.ASM.
|
|
|
|
The first buffer declared, INBUF, is N_samp sample locations long.
|
|
|
|
The next buffer declared, OUTBUF, is also N_samp samples long, and stores the
|
|
output of the filter.
|
|
|
|
DLINE is the third buffer declared. This buffer holds the delay line for each
|
|
biquad. That is w(n-1) and w(n-2) for each biquad section of the filter. Since
|
|
there are two past intermediate vales for each stage of the biquad, the length of
|
|
this buffer is twice as long as the stages.
|
|
|
|
The coefficient buffer, COEFS, contains the IIR filter coefficients. The
|
|
coefficients are typically generated by a filter
|
|
design software package.
|
|
|
|
The linker descriptive file is ADSP-2191.LDF, which describes the hardware in
|
|
terms of memory spaces and peripherals.
|
|
|
|
Because there is no data dependency between DSP cores, it is possible
|
|
to do perform an IIR in DSP core 1, while also performing an IIR in DSP core 2
|
|
on separate input data, using different coefficients.
|
|
|
|
|
|
III. DESCRIPTION OF INPUT DATA
|
|
|
|
1. INPUT SAMPLES:
|
|
-----------------
|
|
This IIR routine expects input data which conforms to the following criteria:
|
|
|
|
Generate input data such that an array of input fixed point values are
|
|
in 1.15 format, with the data being arranged in the following order:
|
|
|
|
INPUT DATA
|
|
|
|
indata(0)
|
|
indata(1)
|
|
indata(2)
|
|
indata(3)
|
|
etc...
|
|
|
|
|
|
2. COEFFICIENT DATA:
|
|
-----------------------
|
|
This IIR routine expects [Biquad_secs*4] fixed point values to be used as coefficients.
|
|
|
|
|
|
COEFFICIENT DATA
|
|
|
|
A2(0)
|
|
A1(0)
|
|
B2(0)
|
|
B1(0)
|
|
...
|
|
...
|
|
...
|
|
|
|
|
|
|
|
|