Dependencies:   mbed

Committer:
simon
Date:
Tue Nov 03 05:46:18 2009 +0000
Revision:
0:1237894bf4b5

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 0:1237894bf4b5 1 // mean and median averaging examples, sford
simon 0:1237894bf4b5 2
simon 0:1237894bf4b5 3 #include "mbed.h"
simon 0:1237894bf4b5 4
simon 0:1237894bf4b5 5 AnalogIn input(p20);
simon 0:1237894bf4b5 6
simon 0:1237894bf4b5 7 int compare(const void *a, const void *b) {
simon 0:1237894bf4b5 8 return (int)(*(float*)a - *(float*)b);
simon 0:1237894bf4b5 9 }
simon 0:1237894bf4b5 10
simon 0:1237894bf4b5 11 float median(float *samples, int n) {
simon 0:1237894bf4b5 12 qsort(samples, n, sizeof(float), compare);
simon 0:1237894bf4b5 13 if(n % 2) { // odd number of samples
simon 0:1237894bf4b5 14 return samples[(n - 1)/2];
simon 0:1237894bf4b5 15 } else { // even number of samples
simon 0:1237894bf4b5 16 return (samples[(n/2)-1] + samples[n/2]) / 2.0;
simon 0:1237894bf4b5 17 }
simon 0:1237894bf4b5 18 }
simon 0:1237894bf4b5 19
simon 0:1237894bf4b5 20 float mean(float *samples, int n) {
simon 0:1237894bf4b5 21 float sum = 0.0;
simon 0:1237894bf4b5 22 for (int i=0; i<n; i++) {
simon 0:1237894bf4b5 23 sum += samples[i];
simon 0:1237894bf4b5 24 }
simon 0:1237894bf4b5 25 return sum / (float)n;
simon 0:1237894bf4b5 26 }
simon 0:1237894bf4b5 27
simon 0:1237894bf4b5 28 int main() {
simon 0:1237894bf4b5 29
simon 0:1237894bf4b5 30 float samples[9];
simon 0:1237894bf4b5 31
simon 0:1237894bf4b5 32 // take some samples
simon 0:1237894bf4b5 33 for(int i=0; i<9; i++) {
simon 0:1237894bf4b5 34 samples[i] = input;
simon 0:1237894bf4b5 35 wait(0.01);
simon 0:1237894bf4b5 36 }
simon 0:1237894bf4b5 37
simon 0:1237894bf4b5 38 // show the samples
simon 0:1237894bf4b5 39 for(int i=0; i<9; i++) {
simon 0:1237894bf4b5 40 printf("%f\n", samples[i]);
simon 0:1237894bf4b5 41 }
simon 0:1237894bf4b5 42
simon 0:1237894bf4b5 43 // show the averages
simon 0:1237894bf4b5 44 printf("mean = %f\n", mean(samples, 9));
simon 0:1237894bf4b5 45 printf("median = %f\n", median(samples, 9));
simon 0:1237894bf4b5 46 }