Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed-dsp
Fork of mbed-os-example-blinky by
main.cpp@52:d5c59769e1de, 2017-04-05 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |


