DSP con filtro LP

Dependencies:   mbed

Committer:
jangelgm
Date:
Thu Mar 09 21:53:20 2017 +0000
Revision:
0:66f4c33802ab
DSP con filtro LP

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jangelgm 0:66f4c33802ab 1 /* Program Example 11.2 DSP input and Output con inclusión de filtro LP
jangelgm 0:66f4c33802ab 2 */
jangelgm 0:66f4c33802ab 3 #include "mbed.h"
jangelgm 0:66f4c33802ab 4 //mbed objects
jangelgm 0:66f4c33802ab 5
jangelgm 0:66f4c33802ab 6 AnalogIn Ain(p15);
jangelgm 0:66f4c33802ab 7
jangelgm 0:66f4c33802ab 8 AnalogOut Aout(p18);
jangelgm 0:66f4c33802ab 9
jangelgm 0:66f4c33802ab 10 Ticker s20khz_tick;
jangelgm 0:66f4c33802ab 11
jangelgm 0:66f4c33802ab 12 //function prototypes
jangelgm 0:66f4c33802ab 13 void s20khz_task(void);
jangelgm 0:66f4c33802ab 14
jangelgm 0:66f4c33802ab 15 float LPF(float);
jangelgm 0:66f4c33802ab 16
jangelgm 0:66f4c33802ab 17 //variables and data
jangelgm 0:66f4c33802ab 18 float data_in, data_out;
jangelgm 0:66f4c33802ab 19
jangelgm 0:66f4c33802ab 20 //main program start here
jangelgm 0:66f4c33802ab 21 int main()
jangelgm 0:66f4c33802ab 22 {
jangelgm 0:66f4c33802ab 23 s20khz_tick.attach_us(&s20khz_task,50); // attach task to 50us tick (20khz)
jangelgm 0:66f4c33802ab 24 }
jangelgm 0:66f4c33802ab 25
jangelgm 0:66f4c33802ab 26 // function 20khz_task. Para realizar un muestreo a intervalos de 50us
jangelgm 0:66f4c33802ab 27 void s20khz_task(void)
jangelgm 0:66f4c33802ab 28 {
jangelgm 0:66f4c33802ab 29 data_in=Ain;
jangelgm 0:66f4c33802ab 30 data_out=LPF(data_in); // Ejercicio 11.2
jangelgm 0:66f4c33802ab 31 Aout=data_out;
jangelgm 0:66f4c33802ab 32 }
jangelgm 0:66f4c33802ab 33
jangelgm 0:66f4c33802ab 34 float LPF(float LPF_in)
jangelgm 0:66f4c33802ab 35 {
jangelgm 0:66f4c33802ab 36 float a[4]= {1,2.6235518066,-2.3146825811,0.6855359773};
jangelgm 0:66f4c33802ab 37 float b[4]= {0.0006993496,0.0020980489,0.0020980489,0.0006993496};
jangelgm 0:66f4c33802ab 38 static float LPF_out;
jangelgm 0:66f4c33802ab 39 static float x[4], y[4];
jangelgm 0:66f4c33802ab 40 x[3] = x[2];
jangelgm 0:66f4c33802ab 41 x[2] = x[1];
jangelgm 0:66f4c33802ab 42 x[1] = x[0]; // move x values by one sample
jangelgm 0:66f4c33802ab 43 y[3] = y[2];
jangelgm 0:66f4c33802ab 44 y[2] = y[1];
jangelgm 0:66f4c33802ab 45 y[1] = y[0]; // move y values by one sample
jangelgm 0:66f4c33802ab 46 x[0] = LPF_in; // new value for x[0]
jangelgm 0:66f4c33802ab 47 y[0] = (b[0]*x[0]) + (b[1]*x[1]) + (b[2]*x[2]) + (b[3]*x[3])
jangelgm 0:66f4c33802ab 48 + (a[1]*y[1]) + (a[2]*y[2]) + (a[3]*y[3]);
jangelgm 0:66f4c33802ab 49 LPF_out = y[0];
jangelgm 0:66f4c33802ab 50 return LPF_out; // output filtered value
jangelgm 0:66f4c33802ab 51 }