Code for measuring the signal with a specified length and sampling rate, and saving it on a SD card.

Dependencies:   EALib I2S mbed

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?

UserRevisionLine numberNew 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 }