ARM汇编 中值滤波

1 滤波的概念及种类

滤波(Wave Filtering)是将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施。滤波分为经典滤波和现代滤波

1.1 经典滤波

经典滤波是基于傅里叶分析和变换提出的一个工程概念。根据高等数学理论,任何一个满足一定条件的信号,都可以被看成由无限个正弦波叠加而成。换句话说,工程信号就是由不同频率的正弦波叠加而成的,组成信号的不同频率的正弦波叫信号的“频率成分”或“谐波成分”。

1.2 现代滤波

现代滤波是指用模拟电子电路对模拟信号进行滤波操作,其基本原理就是利用电路的频率特性实现对信号中频率成分的选择。滤波时,把信号看成由不同频率正弦波叠加而成的模拟信号,通过选择不同的频率成分来实现信号滤波。在计算机实际应用中,需要将模拟量转换为数字量(即进行A/D转换),为解决干扰问题,常用的方法主要有中值滤波和均值滤波

本文即讲解现代滤波中的中值滤波方法

2 中值滤波及程序设计

2.1 中值滤波

中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不模糊。此外,中值滤波的算法比较简单,也易于用硬件实现。这些优良特性是线性滤波方法所不具有的。所以,中值滤波方法-经提出后,便在数字信号处理领域得到广泛应用。

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

在嵌人式的实际应用中,如A/D采样时,如果有瞬间干扰信号,那么采样回来的数据就有明显的变化,如明显偏大或偏小。如果把这些数据拿来显示,那显示数据就是跳跃式的,看起来明显有问题。因为模拟信号是连续变化的,并且其变化一般都是相对缓慢的, 这时就可以采用中值滤波(也叫“算数中值滤波”),把这些干扰数据去除掉,其原理如下:在采样时连续采样奇数个数 (2n+1) ,并把这些数排序,中间位置那个数 (n+1 位置) 作为本次采样的值。

2.2 中值滤波程序设计

为了保证程序的通用性,对任意N(N为奇数)个数都能找出中间值,N值放在R0中,原始数据放在内存0x40000000开始的地址空间,每个数占32位,中值滤波的结果放在寄存器R1中,此处假设R0=9。

流程图如下
在这里插入图片描述

3 程序实现

3.1 工程的创建

keil下stm32工程的创建过程与之前文章一样,本文将不做介绍,详情参考:

基于Keil MDK 完成对纯汇编语言的STM32工程的建立

3.2 汇编代码实现

	AREA SORT,CODE,READONLY
		ENTRY
		EXPORT __main
__main
		MOV R0,#7
		LDR R2,=0X40000000
		MOV R9,#1
		STR R9,[R2]
		MOV R9,#5
		STR R9,[R2,4]
		MOV R9,#8
		STR R9,[R2,8]
		MOV R9,#7
		STR R9,[R2,12]
		MOV R9,#12
		STR R9,[R2,16]
		MOV R9,#15
		STR R9,[R2,20]
		MOV R9,#18
		STR R9,[R2,24]
		SUB R1,R0,#1
		MOV R4,#4
		MLA R3,R1,R4,R2
		SUB R4,R3,#4
LOOP1	ADD R5,R2,#4
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]
		MOV R0,#100
		END

键入代码后,编译一下,结果如下
在这里插入图片描述

无错误无警告,编译成功

3.3 stm32仿真调试

调试设置在本章开头所提到的文章中也有讲解,本文将不做解释。

设置断点,在数组赋值后,观察对应地址是否赋值成功
在这里插入图片描述

前面进行比较与排序,把大小为中间值的R3寄存器中地址对应的值赋给R1寄存器,运行后,发现对应地址已经赋值

再运行一次,可以看到数组中中间值的大小以存放在寄存器中
在这里插入图片描述

总结

学习使用了keil工具对汇编程序进行编译运行,了解到了keil中调试的各种方式。


参考
https://blog.csdn.net/isyuuun/article/details/120559821?spm=1001.2014.3001.5502

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日常脱发的小迈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值