Juan Angel García
/
11_2
DSP con filtro LP
main.cpp@0:66f4c33802ab, 2017-03-09 (annotated)
- Committer:
- jangelgm
- Date:
- Thu Mar 09 21:53:20 2017 +0000
- Revision:
- 0:66f4c33802ab
DSP con filtro LP
Who changed what in which revision?
User | Revision | Line number | New 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 | } |