【C语言学习】(1)冒泡法排序在ADC采样数据中的使用

复习冒泡排序,学习ADC采样数据滤波

目录

前言

一、使用场景

二、使用步骤

2.冒泡法排序

总结


前言

排序是C语言经常使用的基础算法,最简单的就是使用冒泡法对数组进行排序。

一、使用场景

        在ADC采集到一次数据时,可能会因为干扰导致单次的数据产生很大的误差,就需要多次采样,对数据进行处理滤波后再进行使用,这样处理后的数据就能更准确的表达真实场景。

        ADC滤波通常使用的是:中位值平均滤波法(又称防脉冲干扰平均滤波法),其具体操作是连续采样N个数据,去掉一个最大值和一个最小值,然后计算N-2个数据的算术平均值,这样处理时,对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。 

二、使用步骤

代码如下(示例):

char filter()
{
     char count,i,j;
     char ADValue_buf[N];
     int sum=0;
     for(count=0;count<N;count++)//获取多次ad采样的值
     {
 	    ADValue_buf[count]= Get_AdValue();//存取AD采样值至缓存区
     } 
//将ad缓存区的值通过冒泡法进行从小到大排序
     for(j=0;j<(N-1);j++)//排序次数=N-1,最后一个数不需要排序
     {
 	    for(i=0;i<(N-j);i++)//每次交换排序完成后,下次交换次数都会少1
         {
 	       if(ADValue_buf[i]>ADValue_buf[i+1])//判断前一个元素和后一个元素大小
	       {
     	       temp = ADValue_buf[i];
    	       ADValue_buf[i]= ADValue_buf[i+1];
	           ADValue_buf[i+1]=temp;
	       }
        }		
     }
//去掉一个最大值和一个最小值后求和   
     for(count =1;count<N-1;count++)
     {
         sum += ADValue_buf[count];
     }
//将求和后的值取平均
      return (char)(sum/(N-2));
}

2.冒泡法排序

uint8_t arr[4]={4,5,7,3};
uint8_t i,j,temp,Swith_Flag=1;


if(Swith_Flag)//判断排序过程中是否提前完成
{
    for(i=0;i<3;i++)//遍历一次时的最大交换次数为N-1次
    {
        Swith_Flag=0;//提前完成标志位
        for(j=0;j<(3-i);j++)//3-i表示每遍历一次,下次需要排序的数位少一
        {
            if(arr[i]<arr[i+1])
            {
                temp=arr[i];
                arr[i]=arr[i+1];
                arr[i+1]=temp;
                Swith_Flag=1;//表明未完成排序,继续进行交换
            }
        }
    }
}

对于冒泡排序进行优化处理,在排序过程当中提前完成排序时就退出,提高程序运行的效率。


总结

在学习stm32的adc采样滤波处理时,常用的就是中位值平均滤波法,其中需要用到排序,所以在这里复习一下,用于大家进行参考,有不足之处还请指正。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值