学习:通用软件滤波算法-中值滤波

it2023-09-08  68

一、处理思想

采集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

最新回复(0)