Objetivos:
- Diseñar un filtro digital de primer orden para filtral la temperatura
Desarrollo:
Se utilizo Matlab para diseñar el filtro
fc=20; wc=2*pi*fc; %G(s)=(wc/(s+wc)) num = [wc] den = [1 wc] fs=1000 Ts =1/fs sistema = tf(num,den) % sistema continuo sisd=c2d(sistema, Ts ,'tustin')
Resultados Matlab
125.7
---------
s + 125.7
Transfer function:
0.05912 z + 0.05912
-------------------
z - 0.8818
De función de transferencia z obtenemos la ec. en diferencias
y(n)=0.05912*(x(n)+x(n-1))+ 0.8818*y(n-1);
Código Arduino
int analog_pin = A0; // definimos el pin 0 que analogico como anolog_pin
float xn;// temperatura
float xnanterior=0; // x(n-1)
int tempdigital;
float yn; // temperatura filtrada
float ynanterior=0; // y(n-1)
void setup () {
Serial.begin(9600); // habilitamos la transmisción serial
}
void loop() {
tempdigital = analogRead(analog_pin); // leemos lo que entrada en el pin y lo convertimos a digital
xn = (5.0*tempdigital*100)/1024.0; // calculamos la temperatura a partir de la lectura digital
yn=0.05912*(xn+xnanterior)+ 0.8818*ynanterior; // ecuación en diferencias
xnanterior=xn;
ynanterior=yn;
Serial.println(yn); // enviamos el valor de temperatura via serial y damos salto de linea y retorno de carro
delay(1); // pausa de 1 ms ( milisegundos) delay(ms);
}



Como paso de la transformada en s a la transformada z?
Como hallo la ecuacion en diferencias a partir de la transformada z?
Gracias
Estimado Ziriano, si lo quieres hacer a mano usa la aproximación tusting o bilinial
s= (2/T)*((z-1)/(z+1))
donde T es el periodo de muestreo
En Matlab se hace con
sisd=c2d(sistema, Ts ,’tustin’)