打印

怎么算一段时间内的平均电流的算法

[复制链接]
2937|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hyf610009776|  楼主 | 2014-7-31 15:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   我现在在做一个测电压的工具,因为要测开发板工作时的电压(工作电压一般是30mv-300mv),我想像fluke的万用表一样,当测量电压时,能不停的算平均值。我现在的做法是averg_temp += ((temp - averg_temp) / cnt);  averg_temp :是之前的平均电压,temp是最新测出来的电压。cnt是表示得到几个电压数据了。 我发现如果越到后面cnt越大,哪怕电压有较大的变化,平均电压还是不会变。因此我把cnt最大改成只能到20. 还有我发现如果测得时候突然间有比较大的电压尽量,比如测70mv的时候,突然间测到100mv的瞬时电压,平均电压变化就比较大。可是我看fluke万用表他测平均电压就不会有太大的变化,哪怕我加上条件过滤掉跟当前平均值电压差+-10%的数据,发觉到后期变化幅度也比fluke万用表的来的大。。。。
    所以想请教一下各位,谁有做过这个类似的算法,给我一点提醒也好。。谢谢了

相关帖子

沙发
nethopper| | 2014-7-31 16:48 | 只看该作者
本帖最后由 nethopper 于 2014-7-31 17:01 编辑

公式不大对,若做N点移动平均, Pseudocode 为:

//初始化:
i=0;
j=0;
flag=false;
averg_temp=0;
定义数组temp[N];
sum=0;

//每次采集到一个ADC数据:
temp[ i ]=ADC;
j=i+1;
if(j>N-1) j=0;

if(flag) averg_temp =(averg_temp*N-temp[ j ]+temp [ i ])/N,
else
{
   sum + = temp [ i ];
   averg_temp =sum / (i+1);
}

if(i<N-1) i++;
else
{
    i=0;
    flag=true;
}

使用特权

评论回复
板凳
lymex| | 2014-7-31 17:11 | 只看该作者
averg_temp += ((temp - averg_temp) / cnt),这个公式是对的。
把cnt最大改成只能到20,这个不对了,cnt该多少就是多少,cnt大了以后,当然某个值对平均值贡献就小。

使用特权

评论回复
地板
nethopper| | 2014-7-31 17:34 | 只看该作者
本帖最后由 nethopper 于 2014-7-31 17:36 编辑

由于lymex在上面肯定了公式,害得我重新分析了一下该公式:lol,揣测了一下楼主的本来的移动平均方案,现在俺的看法如下:
(1)若采用普通N点移动平均(FIR),俺二楼的做法对
(2)若采用指数平均(IIR),楼主的公式是对的。alfa=1/CNT应采用常数。(差点把CNT当作CNY = ¥了:lol)

使用特权

评论回复
5
hyf610009776|  楼主 | 2014-7-31 17:50 | 只看该作者
lymex 发表于 2014-7-31 17:11
averg_temp += ((temp - averg_temp) / cnt),这个公式是对的。
把cnt最大改成只能到20,这个不对了,cnt该 ...

谢谢。

使用特权

评论回复
6
hyf610009776|  楼主 | 2014-7-31 17:51 | 只看该作者
nethopper 发表于 2014-7-31 17:34
由于lymex在上面肯定了公式,害得我重新分析了一下该公式,揣测了一下楼主的本来的移动平均方案,现在 ...

谢谢。

使用特权

评论回复
7
hyf610009776|  楼主 | 2014-7-31 17:57 | 只看该作者
lymex 发表于 2014-7-31 17:11
averg_temp += ((temp - averg_temp) / cnt),这个公式是对的。
把cnt最大改成只能到20,这个不对了,cnt该 ...

那请问一下,那对本来一般测试数据时70mv时,突然有90mv的数据,这个数据我要认为的除掉吗?还是也加入平均当中

使用特权

评论回复
8
lymex| | 2014-7-31 18:06 | 只看该作者
hyf610009776 发表于 2014-7-31 17:57
那请问一下,那对本来一般测试数据时70mv时,突然有90mv的数据,这个数据我要认为的除掉吗?还是也加入平 ...

如果大部分数据都是70mV左右,突然来了个90mV的,属于粗大误差
传统计量上粗大误差要剔除,但也有人反对,说这就是数据的一部分。
个人倾向与剔除。

使用特权

评论回复
9
hyf610009776|  楼主 | 2014-7-31 18:31 | 只看该作者
lymex 发表于 2014-7-31 18:06
如果大部分数据都是70mV左右,突然来了个90mV的,属于粗大误差。
传统计量上粗大误差要剔除,但也有人反 ...

那能请问一下,如果以70位例,多大以上的范围属于粗大误差,我百度了一下,找不到这个范围

使用特权

评论回复
10
lymex| | 2014-7-31 18:37 | 只看该作者
hyf610009776 发表于 2014-7-31 18:31
那能请问一下,如果以70位例,多大以上的范围属于粗大误差,我百度了一下,找不到这个范围 ...

参考这里:http://jpk.cust.edu.cn/wcll/uploadimg/200891815163540.PDF

使用特权

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

本版积分规则

4

主题

18

帖子

1

粉丝