[psas-avionics] Digital filters
kirkpad at pdx.edu
Mon Nov 2 23:46:09 PST 2009
Thanks for the replies. I thought I would touch on all of them in one
email to keep the reading shorter.
It was suggested off the list that I consider a decimation filter to
downsample the sample rate. This sounds reasonable, but I implemented
the iir filter at a 100 Hz sample rate and still saw a significant
offset (500 lsb), with many of the same fixed point scaling problems
(resolution less than 16 bits). I would guess that I could get close
by cutting the sample rate to 10 Hz. I think that leads me to
pre-warping the coefficients since 2*PI is not << 10Hz, but that's
I 'think' the decimation filter needs to remove content above 5 Hz
(nyquist), then cut the samples to 10 Hz. Wouldn't that be about a 1Hz
I think the FIR structure has the most promise, but I have no
experience with those, especially on a fixed point machine.
Quoting rq17zt at q7.com:
> I don't know much about this sort of thing.
But likely more than I know ;)
> I'm guessing that a different implementation could have better numeric
> stability properties.
> Your key-phrase seems to be, "Series of first order difference
> equations." Is that different than MAC-ing a polynomial equation?
That is exactly MAC-ing a polynomial equation:
y = b1 * x + z1;
z1 = b2 * x + z2 - a2 * y;
z2 = b3 * x + 0 - a3 * y;
> I've done similar type things with the latter without trouble, but never
> as low as 1 Hz.
So have I, but the goal was usually a much higher cutoff frequency,
and some DC offset and minor loss of resolution was not a problem.
Here, the offset is a major issue.
Quoting Barton C Massey <bart at cs.pdx.edu>:
> Caveat: I have no idea what I'm talking about. Act
I have no idea how to interpret this response :) This could be
sarcasm, and you *do* know what you are talking about, but I simply
don't understand. This could be truth, and I should go another route.
> You can't do a 1Hz cutoff against a 1000Hz sampling rate
> with any sane single-stage design, AFAIK.
I'm not sure what you mean by a single stage... I think of a stage as
a memory element when using an IIR filter, in which case I think I'm
using 3 stages.
> The usual plan
> would be to downsample the signal in a series of stages;
> maybe 5 downsample-by-four stages, which would get you to
> about 1Hz very nicely.
Again I'm not up to speed on your terminology, and my googling is not
clearing things up. I see some stuff on downsampling, but I've thought
of this in the context of throwing out data, not combining it. Perhaps
more akin to down-conversion.
> (It also tells you that as a rule of thumb you'd
> need about a 10-pole Butterworth to do this directly; ...
Did you mean 10 *tap* Butterworth? I was originally only trying to get
2 poles, so 10 poles would be overkill?!?!
> still wouldn't recommend it, though, as the numerical
> instability problems will be very real with such high-order
This is the problem I have now.
I'll have to show off (Tuesday) an integrating device I'm running now.
It has zero offset, and filter-like response.
> (2009.11.02) kirkpad at pdx.edu:
>> 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
>> 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
>> 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?
> psas-avionics mailing list
> psas-avionics at lists.psas.pdx.edu
More information about the psas-avionics