【发布时间】:2012-12-21 20:58:19
【问题描述】:
我目前使用以下函数来计算每个 200ms 发生的温度读数的移动平均值。
uint16_t ntc_average(uint16_t adcdata)
{
static uint8_t first = 1;
static uint16_t t1,t2,t3,t4,t5;
if(first == 1)
{
first = 0;
t1 = t2 = t3 = t4 = t5 = adcdata;
}
t5 = t4;
t4 = t3;
t3 = t2;
t2 = t1;
t1 = adcdata;
adcdata = (t1+t2+t3+t4+t5)/5;
return(adcdata);
}
但是,5 个点是不够的,我可能需要更长的缓冲区才能更平滑。例如,每 10-20 个读数一次或两次,该值可能会向上或向下下降一个点,我需要对其进行平滑处理。增加 tn 变量似乎很难看……我想我可能需要 t1-t50。
谁能建议C 中的另一个函数,我可以用它来平滑温度读数?请注意,这些值是无符号整数,而不是浮点数。
【问题讨论】:
-
循环缓冲区怎么样?
-
我正在寻找一些不使用太多缓冲区的算法。对于循环缓冲区,我需要使用内存。由于我正在研究具有微小内存的微型 MCU,因此减少内存使用会很棒。