Hallo,
ich möchte gern einen Ringpuffer benutzen um einen gleitenden Mittelwert
zu bilden. Mach ich das so richtig?
Prototyp:
1 | unsigned int calc_floating_average (unsigned int new_value);
|
Puffer:
1 | volatile unsigned int floating_average[16];
|
Auswertung Puffer:
1 | unsigned int calc_floating_average (unsigned int new_value)
|
2 | {
|
3 | unsigned long average_sum=0;
|
4 | /* rotate value storage */
|
5 | for(unsigned char i=15; i>1;i--)
|
6 | {
|
7 | floating_average[i]=floating_average[i-1];
|
8 | }
|
9 |
|
10 | /* apply new value into buffer */
|
11 | floating_average[0] = new_value;
|
12 |
|
13 | /* sum all values */
|
14 | for (unsigned char j=0;j<15;j++)
|
15 | {
|
16 | average_sum+= floating_average[j];
|
17 | }
|
18 |
|
19 | /* calc middle */
|
20 | average_sum/=16;
|
21 | return (unsigned int)average_sum;
|
22 | }
|
Besten Dank,
Gerd