Objetivo: Diseño e Implementar de un filtro pasa bajas digital de 1 orden utilizando la aproximación diferencial a partir de un filtro continuo.
A partir de un filtro continuo pasa bajas de 1 orden
donde wc es la frecuencia de corte en radianes/segundo y usando la aproximación diferencia
se tiene la siguiente función de transferencia en z
usando los siguientes parámetros
tenemos
cuya ecuación en diferencia es
La cual tenemos que implementar en arduino
Vamos a muestrar la señal a frecuencia de 10 K Hz es decir un periodo de 100 micro segundos, para hacer un muestra cada ese tiempo vamos a usar la libreria “TimerOne.h” para generar un interrupción por tiempo cada 100 micro segundos, cada ese tiempo se ejecuta la función muestrea() que toma un valor analógico, lo convierte en digital de 10 bits, usamos la entrada actual y la salida anterior en la ecuación en diferencias para calcular y[n] y después se convierte a 12 bits y se manda al DAC MCP4921
Código
#include <SPI.h> // Remember this line!
#include <DAC_MCP49xx.h>
#define SS_PIN 10
DAC_MCP49xx dac(DAC_MCP49xx::MCP4921, SS_PIN);
#include "TimerOne.h"
int xn; // señal de entrada
float yn; // señal de salida
float ynant=0; // señal de salida anterior
void muestrea () { // se ejecuta cada 100 us
xn=analogRead(A0); //se lee la señal analogica y se convierte en digital de 0 a 1024
yn=(((0.1257)*xn+ynant)/(1.1257)); // ecuación en diferencias del filtro
ynant=yn;
yn=map(yn,0,1024,0,4096); // se mapa xn de 0 1024 a 0 4096 ya que el DAC es de 12 bits
dac.output(yn); // se manda yn al DAC
}
void setup() {
Timer1.initialize(100); // Dispara cada 1 ms
Timer1.attachInterrupt(muestrea); // Activa la interrupcion y la asocia a muestrea
dac.setSPIDivider(SPI_CLOCK_DIV16);
// Use "port writes", see the manual page. In short, if you use pin 10 for
// SS (and pin 7 for LDAC, if used), this is much faster.
// Also not strictly required (no setup() code is needed at all).
dac.setPortWrite(true);
}
void loop() {
}
Diagrama en proteus
Resultados
Si la señal de entra es de 10 Hz ( debajo de la frecuencia de corte)
Si la señal de entra es de 200 Hz ( en la frecuencia de corte)
Si la señal de entrada es 1000Hz ( por arriba de la frecuencia de corte)