Implementation
To implement the fourth-order filter, start with a single set
of second-order coefficients and implement a single
second-order section. Make sure you write and review
pseudo-code before you begin programming.
Once your single second-order IIR is working properly you can
then proceed to code the entire fourth-order filter.
Large coefficients
You may have noticed that some of the coefficients you have
computed for the second-order sections are larger than 1.0
in magnitude. For any stable second-order IIR section, the
magnitude of the "0" and "2" coefficients
(
a
0
a
0
and
a
2
a
2
, for example) will always be less than or equal to
1.0. However, the magnitude of the "1" coefficient can be
as large as 2.0. To overcome this problem, you will have to
divide the
a
1
a
1
and
b
1
b
1
coefficients by two prior to saving them for your
DSP code. Then, in your implementation, you will have to
compensate somehow for using half the coefficient value.
Repeating code
Rather than write separate code for each second-order
section, you are encouraged first to write one section, then
write code that cycles through the second-order section code
twice using the repeat structure below. Because the IIR
code will have to run inside the block I/O loop and this
loop uses the
block repeat counter
(
BRC), you must use another looping structure
to avoid corrupting the
BRC.
Note: You will have to make sure that your code uses
different coefficients and states during the second cycle of
the repeat loop.
stm (num_stages-1),AR1
start_stage
; IIR code goes here
banz start_stage,*AR1-
Gain
It may be necessary to add gain to the output of the system.
To do this, simply shift the output left (which can be done
using the ld opcode with its optional
shift parameter) before saving the output to
memory.
Grading
Your grade on this lab will be split into three parts:
- 1 point: Prelab
- 4 points: Code. Your DSP code implementing the
fourth-order IIR filter is worth 3 points and the MATLAB
exercise is worth 1 point.
- 5 points: Oral quiz. The quiz may cover differences
between FIR and IIR filters, the prelab material, and the
MATLAB exercise.