Código en Matlab
clear format long fs=4000; %frecuencia de muestreo ts=1/fs; fc=500; % frecuencia de corte Fnyquist=fs/2; % frecuencia de Nyquist % Normalización de la frecuencias Wn=fc/Fnyquist; N=1; % Calculando el orden y las frecuencias de corte en rad/muestra % [numB,denB] = BUTTER(N,Wn,'low'); [numB,denB] = butter(N,Wn,'low') tf(numB,denB,ts)
Como obtener la ecuación en diferencias

Código en Arduino
#include <TimerOne.h>
float x; // señal de entrada
float y; // señal de filtrada
int bandera=0; // declaramos bandera
float xanterior=0; // declaramos bandera
float yanterior=0; // declaramos bandera
// rutina de interrupcion temporal cada periodo de muestreo la bandera se pone en uno
void ISR_timer(){
bandera=1;
}
void setup(){
Serial.begin(57600); // incializa comunicacions serial
Timer1.initialize(250); //periodo de muestreo // fs = 4kHz ts=1/4k = 0.25e-3 =250 us
Timer1.attachInterrupt(ISR_timer); // Activa la interrupcion y la asocia a ISR_timer
}
void loop(){
if (bandera == 1) {
x= (5.0*analogRead(0))/1023.0;
y=0.29291*x +0.2929*xanterior+ 0.4142*yanterior;
xanterior=x;
yanterior=y;
bandera=0;
Serial.println(y);
}
}
Visita


Por favor, si podría explicar con más detalle el código en Arduino, sobre todo como ingreso la señal de entrada a ser filtrada al Arduino. Muchas gracias.
La señal a filtrar debe estar en un rango de 0 – 5 V por que es el rango que acepta la en la entrada analógica de arduino.
Para lograr que tu señal a filtrar este en ese rango puedes tienes que hacer acondicionamiento con amplificadores operacionales.
Para un caso practico experimental y mostrar que funciona el filtro, puedes usar un generador de señales, por ejemplo puede usar una señal senoidal con un frecuencia x, con una amplitud de 2.5 V y offset de 2.5.
Para ver el resultado del filtrado, es necesario usar el grafica serial de Arduino. En caso de que quieras verlo en el osciloscopio, necesitarías un conversor digita analógico.
Saludos