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:
Fri Jul 14 14:41:10 2017 +0000
Revision:
1:a514e4de034d
Parent:
0:c05b00be2229
Child:
2:8c5b6522139f
envSignal 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 <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 1:a514e4de034d 26 int fs=330000; // 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 0:c05b00be2229 29 std::string filename = "noisetest2"; // 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 0:c05b00be2229 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 0:c05b00be2229 81
msamadani 0:c05b00be2229 82 // Print data to terminal
msamadani 1:a514e4de034d 83 printf("analysis done\n");
msamadani 1:a514e4de034d 84 for (int i = 5000; i < 5200; i++) {
msamadani 1:a514e4de034d 85 printf("%f %f %f\n",signal[i],signal2->data[i],env_signal->data[i]);
msamadani 0:c05b00be2229 86 }
msamadani 0:c05b00be2229 87
msamadani 0:c05b00be2229 88
msamadani 0:c05b00be2229 89 /*---------------------------------------------------------------*/
msamadani 0:c05b00be2229 90 //saveToSD(signal,xsize,filename.c_str()); //save data to SD card
msamadani 1:a514e4de034d 91 // saveToSD(signal,xsize,"signal.txt");
msamadani 1:a514e4de034d 92 // saveToSD(env_signal->data,xsize,"envsignal.txt");
msamadani 0:c05b00be2229 93
msamadani 0:c05b00be2229 94
msamadani 0:c05b00be2229 95 return 0;
msamadani 0:c05b00be2229 96 }