天天看點

學習:通用軟體濾波算法-中值濾波一、處理思想二、C實作四、優缺點

一、處理思想

采集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];
}
           
三、濾波效果
      
學習:通用軟體濾波算法-中值濾波一、處理思想二、C實作四、優缺點

圖1. AD采集土壤濕度傳感器中值濾波效果

學習:通用軟體濾波算法-中值濾波一、處理思想二、C實作四、優缺點

圖2. DS18B20溫度傳感器中值濾波效果

四、優缺點

優點

對變化較慢的資料—如圖2 具有良好的濾波效果

能有效克服因偶然因素引起的波動幹擾

缺點

對于變化較快的資料,會有明顯的“滞後”效果,參見圖1