欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

学习:通用软件滤波算法-限幅滤波法

程序员文章站 2022-04-14 21:06:36
...

一、处理思想

设置前后两次数据可允许的最大偏差VARIATION_RANGE,每当有新数据到来时和上一个数据进行比较,若在允许偏差范围内,则本次数据有效,反之则无效,使用上一次数据值代替本次数据。

 

函数设计

输入参数:上一个数据,当前采集数据

函数输出:当前有效数据

二、C语言实现

/*
* 文件名:Filtering_algorithm.c
* 作者:JYU_hsy
* 描述:前10种为常见滤波算法,较为基础;11为论文<基于无线传感网的弱势群体身体信息监测系统的设计>提到的改进。
	    程序默认对int类型数据进行滤波,如使用不同类型请修改宏TARGET_tYPE
		数据采集函数为get_data(),为方便调试,本代码使用的是随机数/事先安排好数据
* 时间:2019-6-13
*/
#include<stdio.h>
#include<stdlib.h>
 
#define TARGET_tYPE int
 
 
int i = 0;
//数据采集函数
TARGET_tYPE get_data()
{
    TARGET_tYPE Data[129] = {1,3,4,4,5,7,6,9,9,9,10,11,13,15,15,17,17,18,18,21,22,21,22,24,25,27,28,29,28,24,22,21,21,26,32,32,29,28,30,30,31,31,28,30,27,31,30,32,29,30,27,30,33,30,20,22,22,26,30,33,30,32,27,29,29,30,32,30,29,28,27,30,28,33,32,33,25,24,31,36,32,32,32,36,26,25,32,31,25,31,36,24,29,25,34,32,26,34,27,31,28,26,32,33,26,28,35,26,31,28,26,25,30,26,20,30,28,23,24,19,27,27,27,24,27,27,27,28,22};
    i++;
    return  Data[i];
    //return ReadTemperature();
}
 
#define VARIATION_RANGE 4		//最大偏差值
TARGET_tYPE Bounds_FILTER(TARGET_tYPE Old_value,TARGET_tYPE Value)
{
	if((Value - Old_value > VARIATION_RANGE)||(Old_value - Value > VARIATION_RANGE))
	{
		return Old_value;
	}
	else 
		return Value;
}
 
 
int main(void)
{
	//保存上一次采集的数据
	TARGET_tYPE Old_value;
	TARGET_tYPE Value;
 
	//The one data
	Old_value  = get_data();
	printf("data = %d\n",Old_value);
	printf("Bounds_FILTER = %d\n",Old_value);
 
	for(int i = 128;i > 0;i--)
	{
		Value = get_data();
		printf("data = %d\n",Value);
 
		Value = Bounds_FILTER(Old_value,Value);
		printf("Bounds_FILTER = %d\n",Value);
		Old_value = Value;
	}
	system("PAUSE");
	return 0;
}
三、滤波效果

学习:通用软件滤波算法-限幅滤波法

图1. VARIATION_RANGE = 2

 

学习:通用软件滤波算法-限幅滤波法

图2. VARIATION_RANGE = 4

四、优缺点

优点

能有效克服因偶然因素引起的单次脉冲干扰;参照图1。

缺点

无法抑制那种周期性的干扰。整体平滑度差;参照图2。