通用软件滤波算法-中值滤波

一、处理思想

采集N个数据(N为奇数),排序后取中值,作为本次采集的有效值。

排序算法此处采用快速排序。

二、C实现

#include<stdio.h>
#include<stdlib.h>
#include <time.h>

#define TARGET_tYPE int


//数据采集函数
TARGET_tYPE get_data()
{
    //随机数
    srand(time(NULL));
    return rand()%31;
}

//中位值滤波法
#define N 101
TARGET_tYPE Data_Set[N];

//快速排序
void Quite(int left,int right)
{
	if(left >= right)
	return;

	int t = 0, l = left-1, r = right-1;
	//基值
	int A = Data_Set[l];

	while(l != r)
	{
	    while (Data_Set[r] >= A && l < r)
                r--;
	    while (Data_Set[l] <= A && l < r)
		l++;

   	    if(l < r)
    	    {
     	         //交换r,l指向数据
     	         t = Data_Set[r];
     	         Data_Set[r] = Data_Set[l];
      	        Data_Set[l] = t;
    	    }
  	}

  	//基值归位
  	Data_Set[left-1] = Data_Set[l];
  	Data_Set[r] = A;

  	Quite(left,l);
  	Quite(r+2,right);
}

TARGET_tYPE Medians_FILTER()
{
	//采集一组数据
  	for(int i = 0; i < N; i++)
        Data_Set[i] = get_data();
  	//快速排序
  	Quite(1,N);
  	return Data_Set[(N-1)/2];
}

三、滤波效果

图1. AD采集土壤湿度传感器中值滤波效果

 

图2. DS18B20温度传感器中值滤波效果

四、优缺点

优点

对变化较慢的数据—如图2 具有良好的滤波效果

能有效克服因偶然因素引起的波动干扰

缺点

对于变化较快的数据,会有明显的“滞后”效果,参见图1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值