Simon Ford
/
average
main.cpp@0:1237894bf4b5, 2009-11-03 (annotated)
- Committer:
- simon
- Date:
- Tue Nov 03 05:46:18 2009 +0000
- Revision:
- 0:1237894bf4b5
Who changed what in which revision?
User | Revision | Line number | New 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 | } |