[psas-avionics] Digital filters
kirkpad at pdx.edu
Mon Nov 2 14:05:16 PST 2009
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
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
Anyone have any thoughts?
More information about the psas-avionics