working wavelet transform
Dependencies: CMSIS_DSP_5 include mbed
Fork of Nucleo-Heart-Rate by
main.cpp@10:f62efa525bb6, 2018-06-21 (annotated)
- Committer:
- MockyBirdTwo
- Date:
- Thu Jun 21 11:55:09 2018 +0000
- Revision:
- 10:f62efa525bb6
- Parent:
- 9:854f2d4eda4a
- Child:
- 11:337c5ff16f27
working transform level 3
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
xorjoep | 0:f39864a2bd26 | 1 | #include "arm_common_tables.h" |
xorjoep | 0:f39864a2bd26 | 2 | #include "arm_const_structs.h" |
xorjoep | 0:f39864a2bd26 | 3 | #include "arm_math.h" |
xorjoep | 0:f39864a2bd26 | 4 | #include "mbed.h" |
xorjoep | 2:3d6a6b9afee0 | 5 | #include "vals.h" |
xorjoep | 0:f39864a2bd26 | 6 | #include "../header/wavelib.h" |
xorjoep | 0:f39864a2bd26 | 7 | |
MockyBirdTwo | 10:f62efa525bb6 | 8 | |
MockyBirdTwo | 10:f62efa525bb6 | 9 | |
xorjoep | 0:f39864a2bd26 | 10 | DigitalOut myled(LED1); |
xorjoep | 4:8bd1cecf2a2e | 11 | DigitalOut myled2(LED2); |
xorjoep | 0:f39864a2bd26 | 12 | |
xorjoep | 4:8bd1cecf2a2e | 13 | Serial usb_serial(SERIAL_TX, SERIAL_RX); // tx, rx |
xorjoep | 4:8bd1cecf2a2e | 14 | const int baud_rate = 115200; // Baud rate. |
xorjoep | 0:f39864a2bd26 | 15 | |
MockyBirdTwo | 10:f62efa525bb6 | 16 | int main() |
MockyBirdTwo | 10:f62efa525bb6 | 17 | { |
MockyBirdTwo | 10:f62efa525bb6 | 18 | usb_serial.baud(baud_rate); |
MockyBirdTwo | 10:f62efa525bb6 | 19 | // Set serial USB connection baud rate (variable is declared in config part). |
MockyBirdTwo | 10:f62efa525bb6 | 20 | wave_object wave_init_obj; |
xorjoep | 4:8bd1cecf2a2e | 21 | wt_object wavelet; |
xorjoep | 4:8bd1cecf2a2e | 22 | |
MockyBirdTwo | 10:f62efa525bb6 | 23 | int N_samples = 2000; |
xorjoep | 4:8bd1cecf2a2e | 24 | int wt_scale = 3; |
MockyBirdTwo | 9:854f2d4eda4a | 25 | // int fs = 160; |
MockyBirdTwo | 6:ce7f5faea04a | 26 | int i,j; |
MockyBirdTwo | 10:f62efa525bb6 | 27 | |
xorjoep | 0:f39864a2bd26 | 28 | |
xorjoep | 4:8bd1cecf2a2e | 29 | double *inp = signal_in; //,*out,*diff; |
MockyBirdTwo | 10:f62efa525bb6 | 30 | double *out =(double*)malloc(sizeof(double)* N_samples); |
MockyBirdTwo | 10:f62efa525bb6 | 31 | double *wt_res=(double*)malloc(sizeof(double)* N_samples); |
MockyBirdTwo | 10:f62efa525bb6 | 32 | |
xorjoep | 4:8bd1cecf2a2e | 33 | char *m_wavelet = "db4"; |
xorjoep | 4:8bd1cecf2a2e | 34 | wave_init_obj = wave_init(m_wavelet);// Initialize the wavelet |
MockyBirdTwo | 10:f62efa525bb6 | 35 | |
xorjoep | 4:8bd1cecf2a2e | 36 | wavelet = wt_init(wave_init_obj, "modwt", N_samples, wt_scale);// Initialize the wavelet transform object |
MockyBirdTwo | 10:f62efa525bb6 | 37 | |
xorjoep | 4:8bd1cecf2a2e | 38 | modwt(wavelet, inp);// Perform MODW |
MockyBirdTwo | 10:f62efa525bb6 | 39 | wt_summary(wavelet); |
MockyBirdTwo | 10:f62efa525bb6 | 40 | double t_wavelet[N_samples*wt_scale+2000]; |
MockyBirdTwo | 10:f62efa525bb6 | 41 | memset(t_wavelet,0,N_samples*wt_scale+2000); |
MockyBirdTwo | 10:f62efa525bb6 | 42 | |
MockyBirdTwo | 10:f62efa525bb6 | 43 | // int wt_scale_start=((wavelet->outlength)/wt_scale)*0;//1=last level |
MockyBirdTwo | 10:f62efa525bb6 | 44 | // int wt_scale_end=((wavelet->outlength)/wt_scale)*2; |
MockyBirdTwo | 10:f62efa525bb6 | 45 | int wt_scale_start=2000;//Level 3 |
MockyBirdTwo | 10:f62efa525bb6 | 46 | int wt_scale_end=4000; |
MockyBirdTwo | 6:ce7f5faea04a | 47 | //Choose scales |
MockyBirdTwo | 10:f62efa525bb6 | 48 | for (i=0,j=wt_scale_start; j<wt_scale_end; i++,j++) { |
MockyBirdTwo | 10:f62efa525bb6 | 49 | t_wavelet[i]=wavelet->output[j]; |
MockyBirdTwo | 6:ce7f5faea04a | 50 | } |
MockyBirdTwo | 10:f62efa525bb6 | 51 | wavelet->output=t_wavelet; |
MockyBirdTwo | 9:854f2d4eda4a | 52 | imodwt(wavelet,out);// Perform IMODWT |
xorjoep | 0:f39864a2bd26 | 53 | |
MockyBirdTwo | 10:f62efa525bb6 | 54 | for (i=0; i<N_samples; ++i) { |
MockyBirdTwo | 10:f62efa525bb6 | 55 | wt_res[i]=wavelet->output[i]*fabs(wavelet->output[i]); |
MockyBirdTwo | 10:f62efa525bb6 | 56 | } |
MockyBirdTwo | 10:f62efa525bb6 | 57 | |
MockyBirdTwo | 10:f62efa525bb6 | 58 | while(1) { |
MockyBirdTwo | 10:f62efa525bb6 | 59 | |
MockyBirdTwo | 10:f62efa525bb6 | 60 | for (i = 0; i < N_samples; ++i) { |
MockyBirdTwo | 10:f62efa525bb6 | 61 | usb_serial.printf("%d %e \n",i, wt_res[i]); |
xorjoep | 0:f39864a2bd26 | 62 | } |
xorjoep | 0:f39864a2bd26 | 63 | myled = !myled; |
xorjoep | 0:f39864a2bd26 | 64 | } |
MockyBirdTwo | 10:f62efa525bb6 | 65 | // while(1) { |
MockyBirdTwo | 10:f62efa525bb6 | 66 | // |
MockyBirdTwo | 10:f62efa525bb6 | 67 | // for (i = 0; i < N_samples; ++i) { |
MockyBirdTwo | 10:f62efa525bb6 | 68 | // usb_serial.printf("%d %e \n",i, wavelet->output[i]); |
MockyBirdTwo | 10:f62efa525bb6 | 69 | // } |
MockyBirdTwo | 10:f62efa525bb6 | 70 | // myled = !myled; |
MockyBirdTwo | 10:f62efa525bb6 | 71 | // } |
MockyBirdTwo | 10:f62efa525bb6 | 72 | |
MockyBirdTwo | 10:f62efa525bb6 | 73 | |
MockyBirdTwo | 10:f62efa525bb6 | 74 | |
MockyBirdTwo | 10:f62efa525bb6 | 75 | //Algoritme |
MockyBirdTwo | 10:f62efa525bb6 | 76 | |
xorjoep | 0:f39864a2bd26 | 77 | } |