Mohsen Samadani
/
Algorithm-testing
Code for measuring the signal with a specified length and sampling rate, and saving it on a SD card.
main.cpp@0:c05b00be2229, 2017-07-13 (annotated)
- Committer:
- msamadani
- Date:
- Thu Jul 13 19:33:37 2017 +0000
- Revision:
- 0:c05b00be2229
- Child:
- 1:a514e4de034d
bpFilter function works.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
msamadani | 0:c05b00be2229 | 1 | #include "main.h" |
msamadani | 0:c05b00be2229 | 2 | #include <string> |
msamadani | 0:c05b00be2229 | 3 | #include "mbed.h" |
msamadani | 0:c05b00be2229 | 4 | #include "sdram.h" |
msamadani | 0:c05b00be2229 | 5 | #include "SPIFI.h" |
msamadani | 0:c05b00be2229 | 6 | #include "stdio.h" |
msamadani | 0:c05b00be2229 | 7 | #include "string.h" |
msamadani | 0:c05b00be2229 | 8 | #include "math.h" |
msamadani | 0:c05b00be2229 | 9 | #include "stdlib.h" |
msamadani | 0:c05b00be2229 | 10 | #include "MCIFileSystem.h" |
msamadani | 0:c05b00be2229 | 11 | #include "measureSignal.h" |
msamadani | 0:c05b00be2229 | 12 | #include "savePower.h" |
msamadani | 0:c05b00be2229 | 13 | #include "sdcard.h" |
msamadani | 0:c05b00be2229 | 14 | #include "diagnosis.h" |
msamadani | 0:c05b00be2229 | 15 | #include <algorithm> |
msamadani | 0:c05b00be2229 | 16 | |
msamadani | 0:c05b00be2229 | 17 | |
msamadani | 0:c05b00be2229 | 18 | #include "rt_nonfinite.h" |
msamadani | 0:c05b00be2229 | 19 | #include "bpFilter.h" |
msamadani | 0:c05b00be2229 | 20 | #include "main.h" |
msamadani | 0:c05b00be2229 | 21 | #include "bpFilter_terminate.h" |
msamadani | 0:c05b00be2229 | 22 | #include "bpFilter_emxAPI.h" |
msamadani | 0:c05b00be2229 | 23 | #include "bpFilter_initialize.h" |
msamadani | 0:c05b00be2229 | 24 | |
msamadani | 0:c05b00be2229 | 25 | |
msamadani | 0:c05b00be2229 | 26 | static emxArray_real32_T *argInit_Unboundedx1_real32_T(float* x); |
msamadani | 0:c05b00be2229 | 27 | |
msamadani | 0:c05b00be2229 | 28 | /* Define variables */ |
msamadani | 0:c05b00be2229 | 29 | int fs=33000; // sampling rate |
msamadani | 0:c05b00be2229 | 30 | //int N=297000; // original signal length |
msamadani | 0:c05b00be2229 | 31 | int xsize=33000;//262144; |
msamadani | 0:c05b00be2229 | 32 | int transient=000; |
msamadani | 0:c05b00be2229 | 33 | std::string filename = "noisetest2"; // name of file saved to SD card |
msamadani | 0:c05b00be2229 | 34 | |
msamadani | 0:c05b00be2229 | 35 | |
msamadani | 0:c05b00be2229 | 36 | Serial pc(USBTX, USBRX); |
msamadani | 0:c05b00be2229 | 37 | |
msamadani | 0:c05b00be2229 | 38 | float average(int numbers[], int size) |
msamadani | 0:c05b00be2229 | 39 | { |
msamadani | 0:c05b00be2229 | 40 | float sum = 0.0; |
msamadani | 0:c05b00be2229 | 41 | for (int x = 0; x < size; x++) { |
msamadani | 0:c05b00be2229 | 42 | sum += (float)numbers[x]; |
msamadani | 0:c05b00be2229 | 43 | } |
msamadani | 0:c05b00be2229 | 44 | return sum /(float)size; |
msamadani | 0:c05b00be2229 | 45 | } |
msamadani | 0:c05b00be2229 | 46 | |
msamadani | 0:c05b00be2229 | 47 | |
msamadani | 0:c05b00be2229 | 48 | static emxArray_real32_T *argInit_Unboundedx1_real32_T(float* x) |
msamadani | 0:c05b00be2229 | 49 | { |
msamadani | 0:c05b00be2229 | 50 | emxArray_real32_T *result; |
msamadani | 0:c05b00be2229 | 51 | static int iv0[1] = { 2 }; |
msamadani | 0:c05b00be2229 | 52 | |
msamadani | 0:c05b00be2229 | 53 | int idx0; |
msamadani | 0:c05b00be2229 | 54 | |
msamadani | 0:c05b00be2229 | 55 | // Set the size of the array. |
msamadani | 0:c05b00be2229 | 56 | // Change this size to the value that the application requires. |
msamadani | 0:c05b00be2229 | 57 | result = emxCreateND_real32_T(1, *(int (*)[1])&iv0[0]); |
msamadani | 0:c05b00be2229 | 58 | |
msamadani | 0:c05b00be2229 | 59 | // Loop over the array to initialize each element. |
msamadani | 0:c05b00be2229 | 60 | for (idx0 = 0; idx0 < result->size[0U]; idx0++) { |
msamadani | 0:c05b00be2229 | 61 | // Set the value of the array element. |
msamadani | 0:c05b00be2229 | 62 | // Change this value to the value that the application requires. |
msamadani | 0:c05b00be2229 | 63 | result->data[idx0] = x[idx0]; |
msamadani | 0:c05b00be2229 | 64 | } |
msamadani | 0:c05b00be2229 | 65 | |
msamadani | 0:c05b00be2229 | 66 | return result; |
msamadani | 0:c05b00be2229 | 67 | } |
msamadani | 0:c05b00be2229 | 68 | |
msamadani | 0:c05b00be2229 | 69 | |
msamadani | 0:c05b00be2229 | 70 | |
msamadani | 0:c05b00be2229 | 71 | |
msamadani | 0:c05b00be2229 | 72 | int main() |
msamadani | 0:c05b00be2229 | 73 | { |
msamadani | 0:c05b00be2229 | 74 | |
msamadani | 0:c05b00be2229 | 75 | /* -----------------Initial setup -----------------------*/ |
msamadani | 0:c05b00be2229 | 76 | pc.baud(115200); // set baud rate for serial port. |
msamadani | 0:c05b00be2229 | 77 | sdram_init(); // initialize SDRAM. |
msamadani | 0:c05b00be2229 | 78 | //savePower(); //save power by turning ethernet and SDRAM off. |
msamadani | 0:c05b00be2229 | 79 | |
msamadani | 0:c05b00be2229 | 80 | |
msamadani | 0:c05b00be2229 | 81 | /*-----------------Record Signal with Codec---------------------*/ |
msamadani | 0:c05b00be2229 | 82 | int N=xsize+transient; //length of the original signal |
msamadani | 0:c05b00be2229 | 83 | int *signal_raw = (int *)malloc(N*sizeof(int)); |
msamadani | 0:c05b00be2229 | 84 | measureSignal(signal_raw,fs,N); // measure a signal with sampling frequency of fs and lenght of N |
msamadani | 0:c05b00be2229 | 85 | |
msamadani | 0:c05b00be2229 | 86 | // Scale data and convert to float |
msamadani | 0:c05b00be2229 | 87 | |
msamadani | 0:c05b00be2229 | 88 | printf("Scaling data...\n"); |
msamadani | 0:c05b00be2229 | 89 | float *signal = (float *)malloc(xsize*sizeof(float)); |
msamadani | 0:c05b00be2229 | 90 | for (int i = 0; i < xsize; i++) { |
msamadani | 0:c05b00be2229 | 91 | signal[i]=(float)(signal_raw[i+transient])/(5.8*pow(2.0,24)); |
msamadani | 0:c05b00be2229 | 92 | } |
msamadani | 0:c05b00be2229 | 93 | //free(signal_raw); |
msamadani | 0:c05b00be2229 | 94 | |
msamadani | 0:c05b00be2229 | 95 | |
msamadani | 0:c05b00be2229 | 96 | /*----------------Envelope Analysis-----------------------------*/ |
msamadani | 0:c05b00be2229 | 97 | printf("Performing analysis...\n"); |
msamadani | 0:c05b00be2229 | 98 | emxArray_real32_T *signal2; |
msamadani | 0:c05b00be2229 | 99 | static int iv0[] = { xsize,1 }; |
msamadani | 0:c05b00be2229 | 100 | signal2 = emxCreateND_real32_T(1, *(int (*)[1])&iv0[0]); |
msamadani | 0:c05b00be2229 | 101 | for (int idx0 = 0; idx0 < xsize; idx0++) { |
msamadani | 0:c05b00be2229 | 102 | signal2->data[idx0] = signal[idx0]; |
msamadani | 0:c05b00be2229 | 103 | } |
msamadani | 0:c05b00be2229 | 104 | //signal2 = argInit_Unboundedx1_real32_T(signal); |
msamadani | 0:c05b00be2229 | 105 | |
msamadani | 0:c05b00be2229 | 106 | emxArray_real32_T *bpSignal ; |
msamadani | 0:c05b00be2229 | 107 | |
msamadani | 0:c05b00be2229 | 108 | emxInitArray_real32_T(&bpSignal, 1); |
msamadani | 0:c05b00be2229 | 109 | |
msamadani | 0:c05b00be2229 | 110 | // Call the entry-point 'bpFilter'. |
msamadani | 0:c05b00be2229 | 111 | bpFilter(signal2, bpSignal); |
msamadani | 0:c05b00be2229 | 112 | |
msamadani | 0:c05b00be2229 | 113 | |
msamadani | 0:c05b00be2229 | 114 | // Print data to terminal |
msamadani | 0:c05b00be2229 | 115 | |
msamadani | 0:c05b00be2229 | 116 | for (int i = 0; i < 50; i++) { |
msamadani | 0:c05b00be2229 | 117 | printf("%f %f %f\n",signal[i],signal2->data[i],bpSignal->data[i]); |
msamadani | 0:c05b00be2229 | 118 | |
msamadani | 0:c05b00be2229 | 119 | } |
msamadani | 0:c05b00be2229 | 120 | |
msamadani | 0:c05b00be2229 | 121 | /* |
msamadani | 0:c05b00be2229 | 122 | int max = *std::max_element(signal_raw, signal_raw + xsize); |
msamadani | 0:c05b00be2229 | 123 | int min = *std::min_element(signal_raw, signal_raw + xsize); |
msamadani | 0:c05b00be2229 | 124 | float Max=(float)max/(5.8*pow(2.0,24))*1000; |
msamadani | 0:c05b00be2229 | 125 | float Min=(float)min/(5.8*pow(2.0,24))*1000; |
msamadani | 0:c05b00be2229 | 126 | float Avg; |
msamadani | 0:c05b00be2229 | 127 | Avg=average(signal_raw,xsize)/(5.8*pow(2.0,24))*1000; |
msamadani | 0:c05b00be2229 | 128 | |
msamadani | 0:c05b00be2229 | 129 | printf("Voltage: Min=%f Avg=%f Max=%f (mv)\n",Min,Avg,Max); |
msamadani | 0:c05b00be2229 | 130 | printf("Acceleration: Min=%f Avg=%f Max=%f (g) \n",Min/8.8, Avg/8.8,Max/8.8); |
msamadani | 0:c05b00be2229 | 131 | |
msamadani | 0:c05b00be2229 | 132 | */ |
msamadani | 0:c05b00be2229 | 133 | /*---------------------------------------------------------------*/ |
msamadani | 0:c05b00be2229 | 134 | //saveToSD(signal,xsize,filename.c_str()); //save data to SD card |
msamadani | 0:c05b00be2229 | 135 | saveToSD(signal,xsize,"signal.txt"); |
msamadani | 0:c05b00be2229 | 136 | saveToSD(bpSignal->data,xsize,"bpsignal.txt"); |
msamadani | 0:c05b00be2229 | 137 | |
msamadani | 0:c05b00be2229 | 138 | |
msamadani | 0:c05b00be2229 | 139 | return 0; |
msamadani | 0:c05b00be2229 | 140 | } |