; Written by Andrew Warren [fastfwd at ix.netcom.com].
A couple days ago, I wrote that an averaging filter of the form:
(WIDTH-1)*AVE + NEW
AVE = -------------------
WIDTH
was "absurdly simple" if WIDTH = 256. A couple of people have asked
in private email for the code; here it is:
AVEHI EQU [ANY FILE REGISTER] ;Holds the average [0-255].
AVELO EQU [ANY FILE REGISTER] ;Holds the fractional part
;of the average.
NEW EQU [ANY FILE REGISTER] ;Holds the new sample.
FILTER256:
MOVF AVEHI,W
SUBWF NEW,W
SKPC
DECF AVEHI
ADDWF AVELO
SKPNC
INCF AVEHI
7 words, 7 instruction cycles, "NEW" is unchanged.
See also:
http://www.htsoft.com/cgi-bin/agnes?PicforumAgnes+PicforumAgnesHTMLArticle+2775.2 Frank Everest mentions very similar idea:temp = (average - new) >> time_value average = average - tis a quick implementation ofaverage = ( (2^time_value - 1)*average + (1)*new ) / 2^time_value.
Questions: