SX Microcontroller DSP Math Method

8bit 16 step Averageing filter by Dmitry Kiryashov [zews at AHA.RU]


Hi Andrew.

I got some time and tried to rewrite your filter code to optimize it a little bit.

The formula can be rewritten as: Ave' = Ave + ( New - Ave )/16 ;

Used the same names for variables. TEMP cell isn't used.

I having more and more believing that 12 is some magical number for small completed code fragments. ;)

;       Initially written by Andrew Warren (fastfwd at ix.netcom.com).
;       Optimized by Dmitry A. Kiryashov (zews at aha.ru) 06/18/2000
;       12 clocks/words

Filter:
	mov	W, AVE
	sub	NEW, W	;NEW - AVE

	mov	W, <>NEW
	and	W, #$0F	;get /16 int part
	sb	C	;result is neg?
	or	W, #$F0	;yes
	add	AVE, W

	mov	W, <>NEW
	and	W, #$F0	;get /16 frac part
	add	AVFRAC, W
	snb	C
	inc	AVE
;
;       low nibble of AVFRAC isn't used
;       so we can utilize it for other purposes ;)