提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


文章目录

  • 前言
  • 一、滤波的概念及种类
  • 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_02

总结

本文介绍了如何在嵌入式系统的数据采样应用中,采集数据收到噪声影响会出现起伏变化,采取中值滤波算法将干扰数据去除掉。再写一段 ARM 汇编程序,演示中值滤波算法。