学习:通用软件滤波算法-中值滤波
程序员文章站
2022-04-14 21:36:47
...
一、处理思想
采集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
上一篇: 品优购项目(三)