ARM汇编 —— 中值滤波

ARM汇编 —— 中值滤波

中值滤波原理

中值滤波有什么用?

提到中值滤波,很多人都知道这是一种函数处理方法,但是中值滤波到底有什么用?

中值滤波主要就是用于对脉冲噪声的滤除,特别是再滤除噪声的同时,能够保护信号的边缘,使之不模糊

中值滤波的算法也比较简单,易于用硬件来实现,这些优良特性是线性滤波方法没有的,所以,中值滤波方法一经提出,便在数字信号处理领域得到了广泛的应用

中值滤波该怎么做?

中值滤波方法如下:

对一个数字信号序列 \(X_j(-\infty < j < \infty)\) 进行滤波处理时,首先要定义一个长度为奇数的 \(l\) 长窗口,\(l = 2n + 1\)\(n\) 为正整数。设在某一个时刻,窗口内的信号样本为\(x(i-n),……,x(i),……,x(i+n)\) ,其中 \(x(i)\) 位于窗口中心的信号样本值。对这 \(l\) 个信号样本值按从小到达顺序排列后,其中值在 \(i\) 处的样值,便定义为中值滤波的输出值

在嵌入式实际应用中,在信号采样时如果有瞬间干扰信号,那么采样回来的数据就会有明显的变化,明显偏大或偏小。数据显示是跳跃式的,看起来有明显的问题。由于模拟信号是连续变化的,并且变化一般都是相对缓慢的,这是就可以采用中值滤波(也叫做算数中值滤波),去除干扰数据

在采样时连续采样奇数个 \((2n+1)\) ,并把这些数排序,中间位置那个数 \((n+1位置)\) 作为本次采样的值

中值滤波程序设计

为确保任意 N(N为奇数)个数都能找出中间值,N 值放在 R0 中,原始数据放在内存 0X40000000 开始的地址空间,每个数占 32 位(即 4 个字节),中值滤波的结果放在寄存器 R1 中,本程序中假设 R0 = 9

算法流程如下:

image

程序代码

书中的示例代码:

 AREA SORT, CODE, READONLY
 ENTERY
 
	MOV R0,#9
	LDR r2,=0X40000000
	SUB R1,R0,#1
	MOV R4,#4
	MLA R3,R1,R4,R2	;R3 为原始数据的结束地址
	SUB R4,R3,#4	;R4 为数据的倒数第二个地址
LOOP1	ADD R5,R2,#4	;R5 为内循环的起始地址
LOOP2	LDR R6,[R2]
	LDR R7,[R5]
	CMP R6,R7	;比较交换,从小到大排序
	STRHI R6,[R5]
	STRHI R7,[R2]
	ADD R5,R5,#4	;修改内循环地址
	CMP R5,R3	;内存换结束比较
	BLS LOOP2
	ADD R2,R2,#4	;修改外循环地址
	CMP R2,R4	;外循环结束比较
	BLS LOOP1
	LDR R2,=0X40000000
	MOV R0,R0,LSR,#1
	MOV R4,#4
	MLA R3,R0,R4,R2
	LDR R1,[R3]	;找到中间的那个数并赋给 R1
	MOV R0,#100
	END
	

设计代码:

   AREA EXAMPLE,CODE,READONLY
	ENTRY
	EXPORT __main
		
__main
	LDR SP,=0X40000000
        
        ;ldr r4,=0x40000000
        ;SWAP
        ;ldr r5,[r4]
        ;ldr r6,[r4,#4]
        
        ;str r5,[r4,#4]
        ;str r6,[r4]
        
        ;ldr r5,[r4]
        ;ldr r6,[r4,#4]
        
        ;R0,R2 INNITAIL

	MOV R2,R0

LOOP_1    CMP R1,R0
        BGE LOOP_END
        ADD R1,R1,#1
        SUB    R2,R2,#1
        MOV R3,#0
        LDR R4,=0X40000000
        B    LOOP_2
        
LOOP_2    CMP    R3,R2
        BGE LOOP_1
        ADD R3,R3,#1
        LDR R5,[R4]
        LDR R6,[R4,#4]
        ADD R4,R4,#4
        CMP    R5,R6
        BLS LOOP_2
        SUB R4,R4,#4
        STR R5,[R4,#4]
        STR R6,[R4]
        ADD R4,R4,#4
        B LOOP_2
        
LOOP_END
        MOV R2,R0,LSR#1
        MOV R3,#4
        MUL    R1,R2,R3
        LDR    R1,[SP,R1]
        
        END
posted @ 2022-10-05 10:29  ppqppl  阅读(90)  评论(0编辑  收藏  举报