www.piclist.com/techref/microchip/math/filter.htm?key=filter

On Sat, 21 Sep 2002, Bob Ammerman wrote:

{Quote hidden}

Kinda cute, but kinda slow... But that's just the way it is. Perhaps the

dsPic handles this better?

I prefer to work exclusively with unsigned numbers on a PIC. If you're

careful then it's possible to express your data as though if it were

unsigned. If the data is coming from an A2D converter, then it's *always*

possible to treat the input stream as an unsigned number. But in general

you should be able to do this:

signed number = unsigned number - offset

Suppose we were computing the FIR of a vector of signed numbers:

Filt = sum ( w[i] * sdata[i])

where,

w[i] is the i'th filter coefficient

sdata[i] is the i'th signed data element

sum() is the sum-of-products operator

Filt is the result

Note that: sdata[i] = udata[i] + offset

where

udata[i] is the i'th data element represented as an unsigned entity

Substitute this into the FIR:

Filt = sum( w[i] * (udata[i] + offset) )

= sum( w[i] * udata[i] ) + sum(w[i] * offset)

= sum( w[i] * udata[i] ) + offset * sum(w[i])

The sum on the left is the one that can be optimized with the routines

Tony K. and I posted. The sum on the right doesn't depend on the data. If

the FIR weights are constant then so will this sum. If they're not, then

this sum can be precomputed - or at least re-computed only when the

weights change.

In addition, if the w[i]'s are signed a similar transformation can be

performed for them. But you shouldn't need to do this. A better approach

is to treat them (or transform them) as unsigned numbers and then convert

the final value, Filt, to a signed number.

> Of course, in the normal course of events the values of the filter

> coefficients will be known in advance. Then, for maximum performance you can

> unroll the loop, and build in the signedness stuff at least for the filter

> coefficients.

Yep.

Scott

--

http://www.piclist.com hint: The PICList is archived three different

ways. See http://www.piclist.com/#archives for details.

In reply to: <001201c2619e$4145b690$6500a8c0@DELL8100>

See also: www.piclist.com/techref/microchip/math/filter.htm?key=filter