# fixed point digital low pass filters

Discussion in 'Electronic Design' started by Jamie Morken, Jan 6, 2008.

1. ### Jamie MorkenGuest

Hi,

I used this digital filter design tool:
http://www-users.cs.york.ac.uk/~fisher/mkfilter/

to generate code for a first order Butterworth floating point
low pass filter with 250kHz sampling frequency, and a 100kHz
corner frequency.

This would require a DSP to run on, since I need 6 of these
filters running in parallel, so is there a way to do the same
filtering with fixed point code to run on a microcontroller?
The input values to the filters are fixed point 16bit ADC values.

Can I convert the floating point code to fixed point?

Here's the floating point code that mkfilter generates:

//filter code
#define NZEROS 1
#define NPOLES 1
#define GAIN 1.324919696e+00

static float xv[NZEROS+1], yv[NPOLES+1];

static void filterloop()
{ for (;
{ xv[0] = xv[1];
xv[1] = next input value / GAIN;
yv[0] = yv[1];
yv[1] = (xv[0] + xv[1])
+ ( -0.5095254495 * yv[0]);
next output value = yv[1];
}
}
//end of filter code

cheers,
Jamie

The first order filter is just the first order filter. It can't be worth
butter or anything.
Probably even MSP430 or 68HCS12 could be sufficient.
The real question is what are you trying to accomplish by this filtering. A
first order corner at 100kHz at a sample rate of 250kHz doesn't seem to make
much sense.
It is certainly possible, however I don't know if you can
[...]

What a horrid code.

VLV

3. ### Tim WescottGuest

IIRC both of these processors top out at about 40MHz clock speed. So
you're saying he can run six second-order, 32-bit precision filters in
160 clock ticks on a 16-bit processor?

Interesting.
One can make this conversion with proper guidance; I don't know if anyone
could with Vladimir as his only source of information.
And thank you for increasing world knowledge by saying why.

--
Tim Wescott
Control systems and communications consulting
http://www.wescottdesign.com

Need to learn how to apply control theory in your embedded system?
"Applied Control Theory for Embedded Systems" by Tim Wescott
Elsevier/Newnes, http://www.wescottdesign.com/actfes/actfes.html

4. ### Tim WescottGuest

I find it odd that your corner frequency is only 80% of your Nyquist
rate. You really aren't going to be achieving much by filtering this
data.

Perhaps you should go over exactly what you're planning to achieve, and
with what data.
This is going to consume a lot of clock ticks on either a microprocessor
or a DSP chip. Expect to need to use 32-bit arithmetic (or 24, if you
like old Motorola DSP chips). Plan on benchmarking this, and don't
expect to do it on a cruddy old PIC.
Yes you can. Search around on the web, see if you can find an article
about fixed-point or fractional arithmetic. All the processors that I've
used support some sort of fractional arithmetic, at least indirectly --
DSP chips support it directly, and 'regular' processors support it by
coughing up both (or selectable) parts of the double-precision result you
get when multiplying two single-precision numbers (I.e. if the processor
is a 16-bit one, an integer multiply will either fill two registers with
the high and low parts, or there will be two integer multiplies, one for
each part).

Otherwise Really Fast Processors can take multiple clock ticks to do
multiplication (never mind divide), so remember to benchmark or count
clock ticks when you investigate doing this in fractional arithmetic.
This is _not_ the best code, although I presume it works. Here again,
you could do well to search the web for IIR filter information. I'd
suggest you think about getting a copy of "Understanding Digital Signal
Processing" by Rick Lyons as well -- there's a whole chapter on choosing
which IIR filter is the right one in what circumstance.

--
Tim Wescott
Control systems and communications consulting
http://www.wescottdesign.com

Need to learn how to apply control theory in your embedded system?
"Applied Control Theory for Embedded Systems" by Tim Wescott
Elsevier/Newnes, http://www.wescottdesign.com/actfes/actfes.html

Where did the second order and 32 bit precision come from?
What I said that it could be possible to fit six first order filters @ 16
bits @ 250kHz into HCS12 or MSP430.
"If you give me \$1000, I will do it much better and more efficiently" (tm)