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 Oct 05 17:44:39 2017 +0000
Revision:
2:8c5b6522139f
Parent:
1:a514e4de034d
A version of the code that initializes the SD RAM, activates the codec, measures the signal and saves the signal onto the SD Card.

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 <algorithm>
msamadani 0:c05b00be2229 15
msamadani 1:a514e4de034d 16 #include "bandPass.h"
msamadani 1:a514e4de034d 17 #include "envSignal.h"
msamadani 1:a514e4de034d 18 #include "envSignal_emxAPI.h"
msamadani 1:a514e4de034d 19 #include "envSignal_emxutil.h"
msamadani 1:a514e4de034d 20 #include "envSignal_types.h"
msamadani 0:c05b00be2229 21 #include "main.h"
msamadani 0:c05b00be2229 22
msamadani 0:c05b00be2229 23 static emxArray_real32_T *argInit_Unboundedx1_real32_T(float* x);
msamadani 0:c05b00be2229 24
msamadani 0:c05b00be2229 25 /* Define variables */
msamadani 2:8c5b6522139f 26 int fs=33000; // sampling rate
msamadani 1:a514e4de034d 27 int xsize=33000;// signal length;
msamadani 1:a514e4de034d 28 int transient=0; // transient part that is cut from the signal
msamadani 2:8c5b6522139f 29 std::string filename = "test"; // name of file saved to SD card
msamadani 0:c05b00be2229 30
msamadani 0:c05b00be2229 31
msamadani 0:c05b00be2229 32 Serial pc(USBTX, USBRX);
msamadani 0:c05b00be2229 33
msamadani 0:c05b00be2229 34
msamadani 0:c05b00be2229 35 int main()
msamadani 0:c05b00be2229 36 {
msamadani 0:c05b00be2229 37
msamadani 0:c05b00be2229 38 /* -----------------Initial setup -----------------------*/
msamadani 0:c05b00be2229 39 pc.baud(115200); // set baud rate for serial port.
msamadani 0:c05b00be2229 40 sdram_init(); // initialize SDRAM.
msamadani 0:c05b00be2229 41 //savePower(); //save power by turning ethernet and SDRAM off.
msamadani 0:c05b00be2229 42
msamadani 0:c05b00be2229 43
msamadani 0:c05b00be2229 44 /*-----------------Record Signal with Codec---------------------*/
msamadani 1:a514e4de034d 45
msamadani 0:c05b00be2229 46 int N=xsize+transient; //length of the original signal
msamadani 0:c05b00be2229 47 int *signal_raw = (int *)malloc(N*sizeof(int));
msamadani 0:c05b00be2229 48 measureSignal(signal_raw,fs,N); // measure a signal with sampling frequency of fs and lenght of N
msamadani 0:c05b00be2229 49
msamadani 0:c05b00be2229 50 // Scale data and convert to float
msamadani 0:c05b00be2229 51
msamadani 0:c05b00be2229 52 float *signal = (float *)malloc(xsize*sizeof(float));
msamadani 0:c05b00be2229 53 for (int i = 0; i < xsize; i++) {
msamadani 0:c05b00be2229 54 signal[i]=(float)(signal_raw[i+transient])/(5.8*pow(2.0,24));
msamadani 0:c05b00be2229 55 }
msamadani 0:c05b00be2229 56 //free(signal_raw);
msamadani 0:c05b00be2229 57
msamadani 1:a514e4de034d 58 /*----------------Envelope Analysis-----------------------------*/
msamadani 2:8c5b6522139f 59 /*
msamadani 0:c05b00be2229 60 printf("Performing analysis...\n");
msamadani 0:c05b00be2229 61 emxArray_real32_T *signal2;
msamadani 1:a514e4de034d 62 emxArray_real32_T *fir_coef;
msamadani 1:a514e4de034d 63 emxArray_real32_T *env_signal ;
msamadani 1:a514e4de034d 64
msamadani 1:a514e4de034d 65 static int iv0[2] = { xsize,1 };
msamadani 1:a514e4de034d 66 signal2 = emxCreateND_real32_T(1, iv0);
msamadani 0:c05b00be2229 67 for (int idx0 = 0; idx0 < xsize; idx0++) {
msamadani 0:c05b00be2229 68 signal2->data[idx0] = signal[idx0];
msamadani 0:c05b00be2229 69 }
msamadani 0:c05b00be2229 70
msamadani 1:a514e4de034d 71 static int iv[2] = { 3201,1 };
msamadani 1:a514e4de034d 72 fir_coef = emxCreateND_real32_T(1, iv);
msamadani 1:a514e4de034d 73 for (int idx = 0; idx < 3201; idx++) {
msamadani 1:a514e4de034d 74 fir_coef->data[idx] = fir_c[idx];
msamadani 1:a514e4de034d 75 }
msamadani 0:c05b00be2229 76
msamadani 1:a514e4de034d 77
msamadani 1:a514e4de034d 78 emxInitArray_real32_T(&env_signal, 1);
msamadani 1:a514e4de034d 79 envSignal(signal2,fir_coef, env_signal);
msamadani 0:c05b00be2229 80
msamadani 2:8c5b6522139f 81 */
msamadani 0:c05b00be2229 82 // Print data to terminal
msamadani 2:8c5b6522139f 83 //printf("analysis done\n");
msamadani 1:a514e4de034d 84 for (int i = 5000; i < 5200; i++) {
msamadani 2:8c5b6522139f 85 //printf("%f %f %f\n",signal[i],signal2->data[i],env_signal->data[i]);
msamadani 2:8c5b6522139f 86 printf("%f \n");
msamadani 2:8c5b6522139f 87
msamadani 0:c05b00be2229 88 }
msamadani 0:c05b00be2229 89
msamadani 0:c05b00be2229 90
msamadani 0:c05b00be2229 91 /*---------------------------------------------------------------*/
msamadani 2:8c5b6522139f 92 saveToSD(signal,xsize,filename.c_str()); //save data to SD card
msamadani 2:8c5b6522139f 93 //saveToSD(signal,xsize,"signal.txt");
msamadani 1:a514e4de034d 94 // saveToSD(env_signal->data,xsize,"envsignal.txt");
msamadani 0:c05b00be2229 95
msamadani 0:c05b00be2229 96
msamadani 0:c05b00be2229 97 return 0;
msamadani 0:c05b00be2229 98 }