提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、滤波的概念及种类
- 1、经典滤波
- 2、现代滤波
- 二、中值滤波及程序设计内容
- 1、中值滤波
- 2、中值滤波程序设计
- 3、程序编写
- 总结
前言
提示:在嵌入式系统的数据采样应用中,采集数据收到噪声影响会出现起伏变化,采取中值滤波算法将干扰数据去除掉。本文目的是主要介绍如何写一段 ARM 汇编程序,演示中值滤波算法。
一、滤波的概念及种类
1、经典滤波
经典滤波是基于傅里叶分析和变换提出的一个工程概念。根据高等数学理论,任何一个满足一定条件的信号,都可以被看成由无限个正弦波叠加而成。换句话说,工程信号就是由不同频率的正弦波叠加而成的,组成信号的不同频率的正弦波叫信号的“频率成分”或“谐波成分”。
2、现代滤波
现代滤波是指用模拟电子电路对模拟信号进行滤波操作,其基本原理就是利用电路的频率特性实现对信号中频率成分的选择。滤波时,把信号看成由不同频率正弦波叠加而成的模拟信号,通过选择不同的频率成分来实现信号滤波。在计算机实际应用中,需要将模拟量转换为数字量(即进行A/D转换),为解决干扰问题,常用的方法主要有中值滤波和均值滤波。
二、中值滤波及程序设计内容
1、中值滤波
中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不模糊。此外,中值滤波的算法比较简单,也易于用硬件实现。这些优良特性是线性滤波方法所不具有的。所以,中值滤波方法一经提出后,便在数字信号处理领域得到广泛应用。
中值滤波方法如下:对一个数字信号序列x(-co<i<co)进行滤n外H时)首出典定义一个长度为奇数的/长窗口,l=2n+1,n为正整教。设左其_个时刻空口,的信县样本为x(i-n),…, x(1),…, x(i+n),其中 x(i)为位干窗口中八的信县样大估 团H 已本值按从时到大的顺序排列后,其中值在i处的样值,便定义为中值滤波的输出值。
在嵌入式的实际应用中,如AD采样时,如果有瞬间干扰信号,那么采样回来的数据就有明显的变化,如明显偏大或偏小。如果把这些数据拿来显示,那显示数据就是跳跃式的,看起来明显有问题。因为模拟信号是连续变化的,并且其变化一般都是相对缓慢的,这时就可以采用中值滤波(也叫“算数中值滤波”),把这些干扰数据去除掉,其原理如下:在采样时连续采样奇数个数(2n+1),并把这些数排序,中间位置那个数(nt+1位置)作为本次采样的值。
2、中值滤波程序设计
为了保证程序的通用性,对任意N(N为奇数)个数都能找出中间值,N值放在RO中,原始数据放在内存0X40000000 开始的地址空间,每个数占32位(即4个字节),中值滤波的结果放在寄存器R1中,此处假设R0=9。
中值滤波程序的流程图如图5-16所示。中值滤波的程序如下。
AREA SORT,CODE, READONLY ;定义一个代码段
ENTRY
MOV R0,#9 ;需要排序数的个数,为奇数
LDR R2,=ox408e8e8e ;R2为原始数据的起始地址
SUB R1,Re, #1
MOV R4,#4
MLA R3,R1,R4,R2 ;R3为原始数据的结束地址
SUB R4,R3,#4 ;R4为原始数据的倒数第二个数的地址
LOOP1 ADD R5,R2,#4 ;R5为内循环的起始地址
LO0P2 LDR R6,[R2]
LDR R7,[R5]
CMP R6,R7 ;比较交换,从小到大排序
STRHI R6,[R5]
STRHI R7,[R2]
ADD RS,R5,#4 ;修改内循环地址
CMP R5,R3 ;内循环结束比较
BLS LO0P2
ADD R2,R2,#4 ;修改外循环地址
CMP R2,R4 ;外循环结束比较
BLS LOOP1
LDR R2,=0x40000000
MOV RO,RO,LSR #1
MOV R4,#4
MLA R3,RO,R4,R2
LDR R1,[R3] ;找到中间那个数并赋给R1
MOV RO,#100
MOV R5, #05
END
3、程序编写
总结
本文介绍了如何在嵌入式系统的数据采样应用中,采集数据收到噪声影响会出现起伏变化,采取中值滤波算法将干扰数据去除掉。再写一段 ARM 汇编程序,演示中值滤波算法。