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

一、处理思想

设置前后两次数据可允许的最大偏差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。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值