Team S - EDP 2 / Mbed 2 deprecated signal_processing

Dependencies:   mbed

Committer:
2236693B
Date:
Wed Feb 14 11:47:22 2018 +0000
Revision:
3:c9f4c9c84e36
Parent:
2:29c3d03c9231
Child:
4:878821708feb
Normalised signal

Who changed what in which revision?

UserRevisionLine numberNew contents of line
2236693B 1:d1e89afbe50c 1 //Rango says, hey there Conor!
2236693B 0:005922ecb765 2
2236693B 0:005922ecb765 3 #include "mbed.h"
2236693B 0:005922ecb765 4
2236693B 0:005922ecb765 5 DigitalOut myled(LED1);
2236693B 0:005922ecb765 6 AnalogIn Ain(PTB1);
2236693B 0:005922ecb765 7
2236693B 2:29c3d03c9231 8 int const MAX_B = 10;
2236693B 3:c9f4c9c84e36 9 int const alpha = 0.5;
2236693B 2:29c3d03c9231 10 int const AVG_LEN = 160;
2236693B 2:29c3d03c9231 11
2236693B 2:29c3d03c9231 12 int sample_buffer[2*MAX_B] = {};
2236693B 2:29c3d03c9231 13 int local_buffer[2*MAX_B] = {};
2236693B 2:29c3d03c9231 14 int avg_buffer[AVG_LEN] = {};
2236693B 0:005922ecb765 15 int read = 0;
2236693B 0:005922ecb765 16 int write = 0;
2236693B 0:005922ecb765 17
2236693B 2:29c3d03c9231 18 int avg_write = 0;
2236693B 2:29c3d03c9231 19
2236693B 2:29c3d03c9231 20 int avg_sum;
2236693B 3:c9f4c9c84e36 21 bool first;
2236693B 3:c9f4c9c84e36 22 float avg;
2236693B 3:c9f4c9c84e36 23 float pre_avg;
2236693B 2:29c3d03c9231 24
2236693B 2:29c3d03c9231 25 Ticker sampler;
2236693B 2:29c3d03c9231 26
2236693B 2:29c3d03c9231 27 void sampling () {
2236693B 2:29c3d03c9231 28 unsigned int sample = Ain.read_u16();
2236693B 2:29c3d03c9231 29 sample_buffer[write++] = sample;
2236693B 2:29c3d03c9231 30 write = write%(2*MAX_B);
2236693B 2:29c3d03c9231 31
2236693B 2:29c3d03c9231 32 }
2236693B 2:29c3d03c9231 33
2236693B 3:c9f4c9c84e36 34 float scale (float point) {
2236693B 3:c9f4c9c84e36 35 return point*7 ;
2236693B 3:c9f4c9c84e36 36 }
2236693B 3:c9f4c9c84e36 37
2236693B 3:c9f4c9c84e36 38 float filter (float output) {
2236693B 3:c9f4c9c84e36 39 float point = alpha*output + (1- alpha)*pre_avg;
2236693B 3:c9f4c9c84e36 40 point = scale(point);
2236693B 3:c9f4c9c84e36 41 return point;
2236693B 3:c9f4c9c84e36 42 }
2236693B 3:c9f4c9c84e36 43
2236693B 3:c9f4c9c84e36 44 float get_trend(){
2236693B 3:c9f4c9c84e36 45 float point;
2236693B 3:c9f4c9c84e36 46 pre_avg = avg;
2236693B 3:c9f4c9c84e36 47 avg = avg_sum/AVG_LEN;
2236693B 3:c9f4c9c84e36 48 int output = avg_buffer[avg_write-1] - avg;
2236693B 3:c9f4c9c84e36 49 point = filter(output);
2236693B 3:c9f4c9c84e36 50
2236693B 3:c9f4c9c84e36 51 return point;
2236693B 3:c9f4c9c84e36 52
2236693B 3:c9f4c9c84e36 53
2236693B 3:c9f4c9c84e36 54 }
2236693B 3:c9f4c9c84e36 55
2236693B 3:c9f4c9c84e36 56 float average() {
2236693B 3:c9f4c9c84e36 57 float point ;
2236693B 2:29c3d03c9231 58 if (first) {
2236693B 2:29c3d03c9231 59 for (int i =0; i <MAX_B; i++) {
2236693B 2:29c3d03c9231 60 avg_buffer[avg_write] = local_buffer[i];
2236693B 2:29c3d03c9231 61 avg_write = (++avg_write) % AVG_LEN;
2236693B 2:29c3d03c9231 62 }
2236693B 2:29c3d03c9231 63 if (write == 0) {
2236693B 2:29c3d03c9231 64 first = false;
2236693B 2:29c3d03c9231 65 }
2236693B 2:29c3d03c9231 66 }
2236693B 2:29c3d03c9231 67 else {
2236693B 2:29c3d03c9231 68 for (int i =0; i <MAX_B; i++) {
2236693B 2:29c3d03c9231 69 int data = local_buffer[i];
2236693B 2:29c3d03c9231 70 avg_sum = avg_sum + data - avg_buffer[avg_write];
2236693B 2:29c3d03c9231 71
2236693B 2:29c3d03c9231 72 avg_buffer[avg_write] = data;
2236693B 2:29c3d03c9231 73 avg_write = (++avg_write) % AVG_LEN;
2236693B 3:c9f4c9c84e36 74 point = get_trend();
2236693B 2:29c3d03c9231 75
2236693B 2:29c3d03c9231 76 }
2236693B 2:29c3d03c9231 77 }
2236693B 3:c9f4c9c84e36 78 return point;
2236693B 2:29c3d03c9231 79
2236693B 2:29c3d03c9231 80 }
2236693B 2:29c3d03c9231 81
2236693B 0:005922ecb765 82 void data_process() {
2236693B 3:c9f4c9c84e36 83 average();
2236693B 0:005922ecb765 84 }
2236693B 0:005922ecb765 85
2236693B 0:005922ecb765 86 int main() {
2236693B 0:005922ecb765 87 sampler.attach(&sampling, 0.0125); //Sample at 80Hz
2236693B 0:005922ecb765 88
2236693B 0:005922ecb765 89 while(1) {
2236693B 2:29c3d03c9231 90 if (write-read > MAX_B || read-write > MAX_B) { // |write-read| > MAX_B/2
2236693B 0:005922ecb765 91 for(int i = 0; i < MAX_B/2; i++) {
2236693B 0:005922ecb765 92 local_buffer[i] = sample_buffer[read];
2236693B 0:005922ecb765 93 read = (++read) % MAX_B;
2236693B 0:005922ecb765 94 }
2236693B 0:005922ecb765 95 }
2236693B 0:005922ecb765 96 data_process();
2236693B 0:005922ecb765 97 }
2236693B 0:005922ecb765 98 }
2236693B 0:005922ecb765 99
2236693B 0:005922ecb765 100
2236693B 0:005922ecb765 101