[psas-avionics] Digital filters

I kirkpad at pdx.edu
Mon Nov 2 14:05:16 PST 2009

Hey All,
I'm looking for advice from someone who's DSP foo is stronger than  
mine to help with a filter applied to the roll control system..

Implement a 2nd-order low-pass filter (butterworth would be fine) with  
a 1Hz cutoff frequency and a sampling rate of 1000Hz. Input is uint16,  
0-65535 from an ADC.

My usual solution:
Create the appropriate transfer function, then use Matlab c2d command  
to obtain the coefficients. Finally, build the filter as a series of  
first order difference equations. This is working in several products  
in production, but isn't quite right for our rocket roll-controller.

The reason this isn't working:
1) Matlab c2d gives only 4 significant figures, regardless of the  
format setting.
2) Using only 4 significant figures propagates errors in the filter  
which make it unstable.
3) When the coefficients are obtained by calculation (float-doubles),  
the DC offset is too big to make the filter useful when converted to  
fixed point math.
4) The fixed point data sizes get kind-of big for such a simple filter  
(long long) if I want to keep my resolution.
5) Filter coefficients for a 1000Hz sample rate and a 1Hz cutoff are  
so far apart in size (1 vs. 0.00000009808) that 64 bit math or slower  
sampling are likely the only solutions.

A couple of questions:
1) Is there another way to realize a discrete fixed-point filter that  
has little (1-2 LS bits) offset and full resolution on a 16 bit input?

2) Can another filter be designed more easily ( I had to derive the  
filter using a bilinear transform. Frequency warping wasn't used  
because the sampling frequency is much faster than the corner  
frequency. )?

Anyone have any thoughts?

More information about the psas-avionics mailing list