Elektronikprojekt Grupp 13 / Mbed OS test_fft_grp13

Dependencies:   mbed-dsp

Fork of mbed-os-example-blinky by Elektronikprojekt Grupp 13

Committer:
deeza
Date:
Wed Apr 05 15:11:42 2017 +0000
Revision:
52:d5c59769e1de
Parent:
51:837137ab83ed
Child:
53:3187ccbe0cca
fft + xcorr + max

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jonathan Austin 0:2757d7abb7d9 1 #include "mbed.h"
deeza 50:8ce5ed8e208b 2 #include "complex.h"
deeza 50:8ce5ed8e208b 3 #include "fft.h"
Jonathan Austin 0:2757d7abb7d9 4
deeza 51:837137ab83ed 5 Serial pc(USBTX, USBRX);
deeza 51:837137ab83ed 6
Jonathan Austin 0:2757d7abb7d9 7 DigitalOut led1(LED1);
Jonathan Austin 0:2757d7abb7d9 8
deeza 44:7f2c1e8d0761 9 // State machine
deeza 44:7f2c1e8d0761 10 int STATE;
deeza 47:b9abb45fde85 11 //const int NONE = -1;
deeza 48:d147eba868c8 12 const int IDLE = 0;
deeza 48:d147eba868c8 13 const int LISTEN = 1;
deeza 48:d147eba868c8 14 const int CALC = 2;
deeza 48:d147eba868c8 15 const int SEND = 3;
deeza 49:2632e3e89576 16 const int CALC_ERROR = 4;
deeza 47:b9abb45fde85 17 //const int WAIT = 9;
deeza 44:7f2c1e8d0761 18
Jonathan Austin 1:846c97078558 19 // main() runs in its own thread in the OS
Jonathan Austin 0:2757d7abb7d9 20 int main() {
deeza 50:8ce5ed8e208b 21
deeza 50:8ce5ed8e208b 22 /*
deeza 48:d147eba868c8 23 STATE = IDLE;
Jonathan Austin 0:2757d7abb7d9 24 while (true) {
deeza 44:7f2c1e8d0761 25 switch (STATE) {
deeza 44:7f2c1e8d0761 26
deeza 48:d147eba868c8 27 case IDLE:
deeza 46:5ad0d78d045e 28 //code here
deeza 48:d147eba868c8 29 STATE = LISTEN; //next state
deeza 44:7f2c1e8d0761 30 break;
deeza 44:7f2c1e8d0761 31
deeza 48:d147eba868c8 32 case LISTEN:
deeza 48:d147eba868c8 33 //code here
deeza 48:d147eba868c8 34 break;
deeza 48:d147eba868c8 35
deeza 48:d147eba868c8 36 case CALC:
deeza 44:7f2c1e8d0761 37 //code here
deeza 44:7f2c1e8d0761 38 break;
deeza 46:5ad0d78d045e 39
deeza 49:2632e3e89576 40 case CALC_ERROR:
deeza 46:5ad0d78d045e 41 //code here
deeza 46:5ad0d78d045e 42 break;
deeza 44:7f2c1e8d0761 43
deeza 46:5ad0d78d045e 44 case SEND:
deeza 46:5ad0d78d045e 45 // code here
deeza 50:8ce5ed8e208b 46 break;
deeza 44:7f2c1e8d0761 47 }
deeza 50:8ce5ed8e208b 48 }*/
deeza 50:8ce5ed8e208b 49
deeza 50:8ce5ed8e208b 50 //testar complexa tal addering, verkar funka.
deeza 50:8ce5ed8e208b 51 complex c1 = complex(1,2);
deeza 50:8ce5ed8e208b 52 complex c2 = complex(2,3);
deeza 50:8ce5ed8e208b 53 complex c3 = c1 + c2;
deeza 51:837137ab83ed 54 pc.printf("hello \n");
deeza 51:837137ab83ed 55
deeza 52:d5c59769e1de 56
deeza 52:d5c59769e1de 57
deeza 51:837137ab83ed 58 //...Inside your signal processing function
deeza 51:837137ab83ed 59 // Allocate memory for signal data
deeza 52:d5c59769e1de 60 complex *pSignal_1 = new complex[1024];
deeza 52:d5c59769e1de 61 complex *pSignal_2 = new complex[1024];
deeza 51:837137ab83ed 62 //...Fill signal array with data
deeza 51:837137ab83ed 63 // Apply FFT
deeza 52:d5c59769e1de 64 CFFT::Forward(pSignal_1, 1024);
deeza 52:d5c59769e1de 65 CFFT::Forward(pSignal_2, 1024);
deeza 52:d5c59769e1de 66
deeza 51:837137ab83ed 67 //...Utilize transform result
deeza 52:d5c59769e1de 68 complex *corrSignal = new complex[1024];
deeza 52:d5c59769e1de 69 startCorr = corrSignal;
deeza 52:d5c59769e1de 70 for( i=0; i<1024; i++){
deeza 52:d5c59769e1de 71 *corrSignal = (*pSignal_1) * (*pSignal_2);
deeza 52:d5c59769e1de 72 corrSignal++;
deeza 52:d5c59769e1de 73 pSignal_1++;
deeza 52:d5c59769e1de 74 pSignal_2++;
deeza 52:d5c59769e1de 75 }
deeza 52:d5c59769e1de 76
deeza 52:d5c59769e1de 77 int counter = 0;
deeza 52:d5c59769e1de 78 int maxPos = 0; //delay i form av antal sample
deeza 52:d5c59769e1de 79 complex maxValue = (0,0);
deeza 52:d5c59769e1de 80 for(i=0; i<1024; i++){
deeza 52:d5c59769e1de 81 if (*corrSignal > abs(maxValue) ){
deeza 52:d5c59769e1de 82 maxValue = *corrSignal;
deeza 52:d5c59769e1de 83 maxPos = counter;
deeza 52:d5c59769e1de 84 }
deeza 52:d5c59769e1de 85 counter++;
deeza 52:d5c59769e1de 86 corrSignal++;
deeza 52:d5c59769e1de 87 }
deeza 52:d5c59769e1de 88
deeza 51:837137ab83ed 89 // Free memory
deeza 51:837137ab83ed 90 delete[] pSignal;
deeza 51:837137ab83ed 91
deeza 51:837137ab83ed 92
deeza 51:837137ab83ed 93
Jonathan Austin 0:2757d7abb7d9 94 }
deeza 50:8ce5ed8e208b 95
deeza 50:8ce5ed8e208b 96
KlaraBengtsson 39:c92c150c0dd2 97 //Calculating distanse between sound and camera
KlaraBengtsson 37:3bc968f47d9b 98 double calcDis(double t, double v){
KlaraBengtsson 37:3bc968f47d9b 99 double s = t*v;
KlaraBengtsson 37:3bc968f47d9b 100 return s;
KlaraBengtsson 37:3bc968f47d9b 101
KlaraBengtsson 37:3bc968f47d9b 102 }
KlaraBengtsson 39:c92c150c0dd2 103 //Calculating angle in radians, D distanse between mic1 and mic2
KlaraBengtsson 37:3bc968f47d9b 104 double calcAng(double s, double D){
KlaraBengtsson 37:3bc968f47d9b 105 double ang = asin(s/D);
KlaraBengtsson 37:3bc968f47d9b 106 return ang;
KlaraBengtsson 37:3bc968f47d9b 107 }
KlaraBengtsson 37:3bc968f47d9b 108
NicklasNp 38:0eceb5feddc4 109 //Presuming the input value is temp as a nuber and humidity as procent
NicklasNp 38:0eceb5feddc4 110 double speedofsound(double temp, double hum){
NicklasNp 38:0eceb5feddc4 111 //Calculations done in Matlab
NicklasNp 43:d3f8e93d85f0 112
NicklasNp 41:b34a65881a45 113 double speed = 331.1190 + 0.6016*temp + 0.0126*hum;
NicklasNp 43:d3f8e93d85f0 114
NicklasNp 38:0eceb5feddc4 115 return speed;
NicklasNp 38:0eceb5feddc4 116 }