실시간 평균 및 표준편차 수식

N = count

V = value

A = average

D = standard deviation

Average

A_1 = V_1/1

A_2 = (V_1 + V_2)/2

A_3 = (2 V_2 + V_3)/3

…

A_n = ((N - 1) V_ (n - 1) + V_n)/N

Standard Deviation

D_1 = (V_1 - A_1)/1

D_2 = (V_2 - A_2)/2

…

D_n = (V_n - A_n)/N

D_n = ((N - 1) D_ (n - 1) + D_n)/N

Code

CurrAvr = Count>1 ? ((PrevAvr * (Count - 1)) + CurrVal)/Count : CurrVal ;

CurrDev = abs (CurrVal - CurrAvr) ;

CurrDev = Count>1 ? ((PrevDev * (Count - 1)) + CurrDev)/Count : CurrDev ;

PrevAvr = CurrAvr ;

PrevDev = CurrDev ;

Filter

volatile S08 s8i ;

U16 u16Buff[5] = {0,} ;

U16 u16Buff_sum = 0 ;

U16 u16Max, u16Min ;

U16 u16Adc = 0 ;

for (s8i = 0 ; s8i<5 ; s8i ++)

{ GODONE = TRUE ;  while (GODONE) continue ;  u16Buff[s8i] = ADRESH <<8 | ADRESL ; }

u16Max = u16Buff[0] ;

u16Min = u16Buff[0] ;

for (s8i = 0 ; s8i<5 ; s8i ++)

{ u16Buff_sum += u16Buff[s8i] ;  if (u16Max<u16Buff[s8i]) u16Max = u16Buff[s8i] ;  if (u16Min>u16Buff[s8i]) u16Min = u16Buff[s8i] ; }

u16Adc = (u16Buff_sum - u16Max - u16Min)/3 ;