打印
[其它应用]

多次采样求平均

[复制链接]
1714|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
冰清玉洁|  楼主 | 2015-4-2 22:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我现在用 79F082的 ,用10位的 AD ,然后我想采样得到的结果先加起来,放在一起,然后多次采样求平均,不知道这样对不对?
INT16U average ;
    EA = 0;
    EADC = 0;
     ADCON &=0XBE;                 //ADCIF = go= 0

    average = ADDL + ADDH<<2
if(++g == 4)
{
   retuslt = average/4;
   average = 0;
}

4次采样求平均,不知道对不对 ,感觉ADDH是8位,左移2位不是不对了 ??
沙发
wenfen| | 2015-4-2 22:02 | 只看该作者
不推荐

使用特权

评论回复
板凳
冰清玉洁|  楼主 | 2015-4-2 22:02 | 只看该作者
为什么啊

使用特权

评论回复
地板
wenfen| | 2015-4-2 22:02 | 只看该作者
当被测电压出现毛刺波动时,前后两次测量的结果会有较大波动。

使用特权

评论回复
5
冰清玉洁|  楼主 | 2015-4-2 22:02 | 只看该作者
有什么好的办法

使用特权

评论回复
6
wenfen| | 2015-4-2 22:03 | 只看该作者
冒泡排序、中间值取平均数法

使用特权

评论回复
7
wenfen| | 2015-4-2 22:03 | 只看该作者
采集一定次数的AD数据,比如说6次,将6次数据进行排序。
     使用冒泡法进行排序,相邻的两个进行比较,第一轮是6与5、5与4、4与3、3与2、2与1,大的排在高位,小的在低位;经过第一轮后,虽然最大数无法求出,但是最小数已经得出。从第二轮开始,不需要将最小数加入比较,只需6与5、5与4、4与3、3与2即可,第二轮完成后可以得到第二小数。以此类推。。。。假设有X个数,需要比较X-1轮,每一轮比较的次数依次减少。
     完成排序后,去除最大和最小数,再将中间数据相加再求平均值。

使用特权

评论回复
8
zhuhuis| | 2015-4-2 22:03 | 只看该作者
类堆栈法:此处说的堆栈,并非真的是使用堆栈来进行采样求值,而是说工作原理同堆栈类似。
     此方法中,使用数组来存放采集的数据,我以6个数据为一个数组来说明。首次计算,先一次性采集一定次数的AD数据,每采集1个数据就移入数组,最早采集的数据位于数组底部,而最新采集到得数据位于数组顶部。采样6次后进行第一次求平均值,这样就完成了第一次的AD去抖求稳定值了。之后每次进行AD去抖求稳定值,只需要采集一次AD值,将前一次去抖求稳定值数组中最底层的数据推出,再将新采集得到的AD值移入数组并求平均值即可。

使用特权

评论回复
9
zhuhuis| | 2015-4-2 22:03 | 只看该作者
    简单的说,就是第1次计算采集6次,第2次计算采集1次,第3次计算采集1次。。。。。。第N次计算采集1次。

使用特权

评论回复
10
冰清玉洁|  楼主 | 2015-4-2 22:03 | 只看该作者
写了个冒泡排序,不知道对不对?
void maopao(INT8U r[],n)
{
        INT8U i,j;
         INT8U temp;

        for(i=1;i<n,i++)
                {
                      j = 7;
               for(j=j-i;j=0;j--)
                         {
                                  if(r[j]<r[j-1])
                                 {
                              
                                        temp = r[j];
                                           r[j] = r[j-1];                                         
                                           r[j-1] = temp;
                                }
                        
               }  
               
     
            }


}

对INT8U r[6]的6个数据排序,正确吗 ??

使用特权

评论回复
11
tian111| | 2015-4-2 22:04 | 只看该作者
非常规做法啊。呵呵

使用特权

评论回复
12
冰清玉洁|  楼主 | 2015-4-2 22:04 | 只看该作者
average = ADDL + ADDH<<2

另外ADDH是8位的,左移2位 感觉不对 ??

使用特权

评论回复
13
宋倩2010| | 2015-4-2 22:04 | 只看该作者
adl=ADDL&0x03;
               adh=ADDH*4;
               adc_result1=(adh+adl);

使用特权

评论回复
14
chenho| | 2015-4-2 22:04 | 只看该作者
这个,你在keil里面试试看就知道了。

使用特权

评论回复
15
chenho| | 2015-4-2 22:05 | 只看该作者
我觉得不一定行。ADDH<<2好像会溢出的

使用特权

评论回复
16
冰清玉洁|  楼主 | 2015-4-2 22:05 | 只看该作者
嗯,好的,知道了,多谢大家

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

307

主题

3250

帖子

5

粉丝