//-------------------------------------------------------------------------------------------------------------------------
//@function : median_filer_bubble
//@parameter :
// @_data : 要滤波的数据
//@return :
//@data_filtered :
//@brief :
//
//-------------------------------------------------------------------------------------------------------------------------
#define MEDIAN_FILTER_NUM_BUBBLE 12 // Â˲¨Æ÷³¤¶È
#define MEDIAN_FILTER_NUM_BUBBLE_RETURN (MEDIAN_FILTER_NUM_BUBBLE/2) // Â˲¨Æ÷ÖмäλÖ㬲ÉÓÃÔ¤´¦ÀíÆ÷½ÚÊ¡¼ÆËãʱ¼ä£¬
// ²»ÒªÔÚ³ÌÐò×îºó²ÉÓóý·¨ÔËËãÀ´½øÐÐÊý¾Ý·µ»ØµÄÒ»¸ö¸³Öµ
float median_filer_bubble( float _data )
{
static float data_not_sorted[MEDIAN_FILTER_NUM_BUBBLE] = {0}, // δsortµÄÊý¾ÝµÄ´æ´¢
data_sorted[MEDIAN_FILTER_NUM_BUBBLE] = {0}; // sort¹ýºóÊý¾ÝµÄ´æ´¢
static unsigned char filter_cnt = 0 ; // ÊäÈëÊý¾Ýµ±Ç°µ½ÁËÄǸöλÖüǼ
unsigned char i = 0 , j = 0;
// ½«Êý¾Ý´æµ½Î´ÅÅÐòµÄ±íÖÐ
data_not_sorted[filter_cnt] = _data ;
if( filter_cnt == MEDIAN_FILTER_NUM_BUBBLE - 1 ){ // ´æ´¢¿Õ¼ä»¹Î´Âú
filter_cnt = 0 ;
}
else
filter_cnt ++ ;
//½«Êý¾ÝÈ¡µ½Òª½øÐÐÅÅÐòµÄ±íÖÐ
for( i = 0 ; i < MEDIAN_FILTER_NUM_BUBBLE ; i++ ){
data_sorted[i] = data_not_sorted[i] ; // ½«Êý¾Ý·ÅÈëÒª½øÐÐÅÅÐòµÄ±íÖÐ
}
//ÏÂÃ濪ʼðÅÝÅÅÐò
for( i = 0 ; i < MEDIAN_FILTER_NUM_BUBBLE ; i ++ ){
for( j = MEDIAN_FILTER_NUM_BUBBLE - 1 ; j > i ; j -- ){
float swap_a,swap_b ; // ½»»»Êý¾Ý
if( data_sorted[j] < data_sorted[j-1] ){ //Èç¹ûСµÄÊý¾ÝÔÚºóÃ棬ÄÇô¾Í½»»»Êý¾ÝλÖÃ
swap_a = data_sorted[j] ;
swap_b = data_sorted[j-1] ;
data_sorted[j-1] = swap_a ;
data_sorted[j] = swap_b ;
}
}
}
return data_sorted[MEDIAN_FILTER_NUM_BUBBLE_RETURN] ;
}
//@function : median_filer_bubble
//@parameter :
// @_data : 要滤波的数据
//@return :
//@data_filtered :
//@brief :
//
//-------------------------------------------------------------------------------------------------------------------------
#define MEDIAN_FILTER_NUM_BUBBLE 12 // Â˲¨Æ÷³¤¶È
#define MEDIAN_FILTER_NUM_BUBBLE_RETURN (MEDIAN_FILTER_NUM_BUBBLE/2) // Â˲¨Æ÷ÖмäλÖ㬲ÉÓÃÔ¤´¦ÀíÆ÷½ÚÊ¡¼ÆËãʱ¼ä£¬
// ²»ÒªÔÚ³ÌÐò×îºó²ÉÓóý·¨ÔËËãÀ´½øÐÐÊý¾Ý·µ»ØµÄÒ»¸ö¸³Öµ
float median_filer_bubble( float _data )
{
static float data_not_sorted[MEDIAN_FILTER_NUM_BUBBLE] = {0}, // δsortµÄÊý¾ÝµÄ´æ´¢
data_sorted[MEDIAN_FILTER_NUM_BUBBLE] = {0}; // sort¹ýºóÊý¾ÝµÄ´æ´¢
static unsigned char filter_cnt = 0 ; // ÊäÈëÊý¾Ýµ±Ç°µ½ÁËÄǸöλÖüǼ
unsigned char i = 0 , j = 0;
// ½«Êý¾Ý´æµ½Î´ÅÅÐòµÄ±íÖÐ
data_not_sorted[filter_cnt] = _data ;
if( filter_cnt == MEDIAN_FILTER_NUM_BUBBLE - 1 ){ // ´æ´¢¿Õ¼ä»¹Î´Âú
filter_cnt = 0 ;
}
else
filter_cnt ++ ;
//½«Êý¾ÝÈ¡µ½Òª½øÐÐÅÅÐòµÄ±íÖÐ
for( i = 0 ; i < MEDIAN_FILTER_NUM_BUBBLE ; i++ ){
data_sorted[i] = data_not_sorted[i] ; // ½«Êý¾Ý·ÅÈëÒª½øÐÐÅÅÐòµÄ±íÖÐ
}
//ÏÂÃ濪ʼðÅÝÅÅÐò
for( i = 0 ; i < MEDIAN_FILTER_NUM_BUBBLE ; i ++ ){
for( j = MEDIAN_FILTER_NUM_BUBBLE - 1 ; j > i ; j -- ){
float swap_a,swap_b ; // ½»»»Êý¾Ý
if( data_sorted[j] < data_sorted[j-1] ){ //Èç¹ûСµÄÊý¾ÝÔÚºóÃ棬ÄÇô¾Í½»»»Êý¾ÝλÖÃ
swap_a = data_sorted[j] ;
swap_b = data_sorted[j-1] ;
data_sorted[j-1] = swap_a ;
data_sorted[j] = swap_b ;
}
}
}
return data_sorted[MEDIAN_FILTER_NUM_BUBBLE_RETURN] ;
}