; 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: