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
main.cpp@1:099f1a4c5fc8, 2017-03-29 (annotated)
- Committer:
- rik
- Date:
- Wed Mar 29 08:42:31 2017 +0000
- Revision:
- 1:099f1a4c5fc8
- Parent:
- 0:8c128e047ec9
first compile (full of bugs?)
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| rik | 0:8c128e047ec9 | 1 | #include "mbed.h" |
| rik | 1:099f1a4c5fc8 | 2 | #include "FFT.h" |
| rik | 0:8c128e047ec9 | 3 | #include "LookupTables.h" |
| rik | 0:8c128e047ec9 | 4 | #include "complexmath.h" |
| rik | 0:8c128e047ec9 | 5 | #include <math.h> |
| rik | 0:8c128e047ec9 | 6 | |
| rik | 1:099f1a4c5fc8 | 7 | //TODO right values for the LUT equalizer |
| rik | 0:8c128e047ec9 | 8 | |
| rik | 0:8c128e047ec9 | 9 | //TODO Build all functions in FFT.cpp |
| rik | 0:8c128e047ec9 | 10 | |
| rik | 0:8c128e047ec9 | 11 | //TODO fix main for a test wave and communication to serial |
| rik | 0:8c128e047ec9 | 12 | |
| rik | 0:8c128e047ec9 | 13 | Serial pc(USBTX, USBRX); |
| rik | 1:099f1a4c5fc8 | 14 | float sampleDataIn[512]; |
| rik | 0:8c128e047ec9 | 15 | float sampleDataOut[512]; |
| rik | 1:099f1a4c5fc8 | 16 | complex_num freqValues[512]; |
| rik | 1:099f1a4c5fc8 | 17 | complex_num reordereddata[512]; |
| rik | 0:8c128e047ec9 | 18 | int datalength = 512;//uitrekenen? |
| rik | 0:8c128e047ec9 | 19 | |
| rik | 0:8c128e047ec9 | 20 | int main() |
| rik | 0:8c128e047ec9 | 21 | { |
| rik | 0:8c128e047ec9 | 22 | pc.baud(115200); |
| rik | 0:8c128e047ec9 | 23 | pc.printf ("building input:["); |
| rik | 0:8c128e047ec9 | 24 | for (int i=0; i<511; i++){ |
| rik | 0:8c128e047ec9 | 25 | if (i%128<64){ |
| rik | 0:8c128e047ec9 | 26 | sampleDataIn[i]=1000; |
| rik | 1:099f1a4c5fc8 | 27 | pc.printf ("%f,\t",sampleDataIn[i]); |
| rik | 0:8c128e047ec9 | 28 | } |
| rik | 0:8c128e047ec9 | 29 | else{ |
| rik | 0:8c128e047ec9 | 30 | sampleDataIn[i]=0; |
| rik | 1:099f1a4c5fc8 | 31 | pc.printf ("%f,\t",sampleDataIn[i]); |
| rik | 0:8c128e047ec9 | 32 | } |
| rik | 1:099f1a4c5fc8 | 33 | } |
| rik | 0:8c128e047ec9 | 34 | sampleDataIn[511]=0; |
| rik | 1:099f1a4c5fc8 | 35 | pc.printf("%f]\r\n",sampleDataIn[511]); |
| rik | 1:099f1a4c5fc8 | 36 | //dont performEqualizer(&sampleDataIn, &sampleDataOut, &freqValues, datalength); but seperate functions for testing purposes |
| rik | 1:099f1a4c5fc8 | 37 | // - Calculating and substracting the mean - |
| rik | 1:099f1a4c5fc8 | 38 | subMean(sampleDataIn, datalength); |
| rik | 1:099f1a4c5fc8 | 39 | pc.printf ("zero meaned:["); |
| rik | 1:099f1a4c5fc8 | 40 | for (int i=0; i<511; i++){ |
| rik | 1:099f1a4c5fc8 | 41 | pc.printf ("%f,\t",sampleDataIn[i]); |
| rik | 1:099f1a4c5fc8 | 42 | } |
| rik | 1:099f1a4c5fc8 | 43 | pc.printf("%f]\r\n",sampleDataIn[511]); |
| rik | 1:099f1a4c5fc8 | 44 | // - Applying a hanning window - N multiplications |
| rik | 1:099f1a4c5fc8 | 45 | applyHanningTable(sampleDataIn, datalength); |
| rik | 1:099f1a4c5fc8 | 46 | pc.printf ("hanned:["); |
| rik | 1:099f1a4c5fc8 | 47 | for (int i=0; i<511; i++){ |
| rik | 1:099f1a4c5fc8 | 48 | pc.printf ("%f,\t",sampleDataIn[i]); |
| rik | 1:099f1a4c5fc8 | 49 | } |
| rik | 1:099f1a4c5fc8 | 50 | pc.printf("%f]\r\n",sampleDataIn[511]); |
| rik | 1:099f1a4c5fc8 | 51 | // It then applies a radix-2 Cooley Tukey FFT to create a fourier transform |
| rik | 1:099f1a4c5fc8 | 52 | reverseCooleyTukeyRadix2(sampleDataIn, freqValues, datalength); |
| rik | 1:099f1a4c5fc8 | 53 | |
| rik | 1:099f1a4c5fc8 | 54 | for (int i = 0; i < datalength; i++){ |
| rik | 1:099f1a4c5fc8 | 55 | reordereddata[reversebit_lut_i[i]].real = freqValues[i].real; |
| rik | 1:099f1a4c5fc8 | 56 | reordereddata[reversebit_lut_i[i]].imaginary = freqValues[i].imaginary; |
| rik | 1:099f1a4c5fc8 | 57 | } |
| rik | 1:099f1a4c5fc8 | 58 | pc.printf ("real part of freqValues:["); |
| rik | 1:099f1a4c5fc8 | 59 | for (int i=0; i<511; i++){ |
| rik | 1:099f1a4c5fc8 | 60 | pc.printf ("%f,\t",reordereddata[i].real); |
| rik | 1:099f1a4c5fc8 | 61 | } |
| rik | 1:099f1a4c5fc8 | 62 | pc.printf("%f]\r\n",reordereddata[511].real); |
| rik | 1:099f1a4c5fc8 | 63 | pc.printf ("imaginary part of freqValues:["); |
| rik | 1:099f1a4c5fc8 | 64 | for (int i=0; i<511; i++){ |
| rik | 1:099f1a4c5fc8 | 65 | pc.printf ("%f,\t",reordereddata[i].imaginary); |
| rik | 1:099f1a4c5fc8 | 66 | } |
| rik | 1:099f1a4c5fc8 | 67 | pc.printf("%f]\r\n",reordereddata[511].imaginary); |
| rik | 1:099f1a4c5fc8 | 68 | // It gets equalized |
| rik | 1:099f1a4c5fc8 | 69 | //equalizer(complex_num* freqdata); |
| rik | 1:099f1a4c5fc8 | 70 | // back to time domain |
| rik | 1:099f1a4c5fc8 | 71 | cooleyTukeyBack(sampleDataOut, freqValues, datalength); |
| rik | 0:8c128e047ec9 | 72 | pc.printf ("Equalized data :["); |
| rik | 0:8c128e047ec9 | 73 | for (int i=0; i<511; i++) { |
| rik | 0:8c128e047ec9 | 74 | pc.printf ("%f,\t",sampleDataOut[i]); |
| rik | 0:8c128e047ec9 | 75 | } |
| rik | 0:8c128e047ec9 | 76 | pc.printf("%f]\r\n",sampleDataOut[511]); |
| rik | 0:8c128e047ec9 | 77 | while(1) { |
| rik | 0:8c128e047ec9 | 78 | } |
| rik | 0:8c128e047ec9 | 79 | |
| rik | 0:8c128e047ec9 | 80 | |
| rik | 0:8c128e047ec9 | 81 | |
| rik | 0:8c128e047ec9 | 82 | |
| rik | 0:8c128e047ec9 | 83 | } |