Académique Documents
Professionnel Documents
Culture Documents
OBJETIVO.-
Ventajas de un Filtro Digital.Los filtros digitales juegan un papel muy importante en el procesamiento digital
de seales. En gran nmero de aplicaciones, como compresin de datos,
procesamiento de seales biomdicas, procesamiento de seales de voz,
procesamiento de imgenes, transmisin de datos, audio digital,
CIRCUITO.-
w c =2 f c =2 1000
rad
rad
=2000
Frecuencia de corte
s
s
w r=2 f r =2 4000
rad
rad
=8000
Frecuencia de rechazo
s
s
w c =
wT
2
2
2000 25 106
rad
tan c s =
tan
=6296,136
6
Ts
2
2
s
25 10 s
w r=
6
w T
2
2
4000 25 10
rad
tan r S =
tan
=12777.748
6
Ts
2
2
s
25 10 s
log
n=
k1
10
( )
10
10
k2
10
2 log
Determinando el orden:
1
1
wc
wr
( )
log ( 100.31 )
=
=1,66 2
1
2 log
4
()
H ( s )=
w
3,96413 10
= 2
2
2
7
s + 2 w c s+w c s +8909,098 s +3,96413 10
3,96413 10
H ( z )=
6,4 109
s=
2 z1
z1
=80000
T s z +1
z+1
( )
z1
z1
+7,12728 10 8
+3,96413 107
z +1
z+ 1
( )
3,96413 107 ( z 2 +2 z +1 )
H ( z )=
7 2
10
9
7,15236 10 z 1,27207 10 z +5,72691 10
H ( z )=
Programacin:
#include <math.h>
// definimos variables
float Vi = 0.0;
float Vo = 0.0;
float Vi_1 = 0.0;
float Vi_2 = 0.0;
float Vo_1 = 0.0;
float Vo_2 = 0.0;
// variable a filtro de primer orden
double a = 0.1116352117;
double b = 1- a ;
// lo sgte es para establecer una frecuencia de muestreo mayor que la que
normalmente usa el arduino
const unsigned char PS_2 = (1 << ADPS0);
const unsigned char PS_4 = (1 << ADPS1);
const unsigned char PS_8 = (1 << ADPS1) | (1 << ADPS0);
const unsigned char PS_16 = (1 << ADPS2);
const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);
const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);
const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
void setup()
{
DDRD = 0xFF;//port d (digital pins 0-7) all outputs
// set up ADC
ADCSRA &= ~PS_128;
// Configuracion tiempo de muestreo:
ADCSRA |= PS_4; // aqui se coloca el prescaler que se quiere usar
}
void loop()
{
Vi = analogRead(0)/4;
//Vo = 0.0014603163 * Vi + 0.002920632612 * Vi_1 + 0.0014603163 * Vi_2 +
1.88903308 * Vo_1 - 0.8948743452 * Vo_2; // ecuacion en diferencia filtro 2do
orden f de corte 500 hz
Vo = a * Vi + b * Vo; // para filtro 1er orden f corte 500 hz (aqui se usa el
coeficiente a)
PORTD = Vo; // salida por el puerto D
// actualizamos valores
Vo_2 = Vo_1;
Vo_1 = Vo;
Vi_2 = Vi_1;
Vi_1 = Vi;
}