参考“芳季”提出的滤波设想,提出以下中值滤波方案:
建立一个循环表。D0为当前指针。D4为表长(数据区长度最小为4,最大为64)、B8为状态位,B8.0大值标志位,B8.1小值标志位。W10为当前最大值,W12为当前最小值,W14为前值,W16-Wn数据区,表指针下移至表尾后回到数据区首。
读入的数字当前值在最大值与最小值之间,写入表,如果当前指针在表尾,令指针指向表首,否则指针下移。
读入的数字当前值如果比最大的大,且大值位=1,置大值位=0,写入表,表指针下移。否则不写入表,大值位置位,前值直接输出。
读入的数字当前值如果比最小的小,且小值位=1,置小值位=0,写入表,表指针下移。否则不写入表,小值位置位,前值直接输出。
循环读取数据区,同时找出最大值、最小值,累加数据区所有数据后减去最大值、减去最小值后取平均值,送前值及输出。
该方案已经在226上验证过,数据个数为20时,耗时17ms。数据个数为64时,耗时34ms。