Está en la página 1de 3

/*PROGRAMA PARA IMPLEMENTAR UN FILTRO FIR DE VENTANA CORREDIZA*/

#include <DueTimer.h> // Librería para timer

float y,prom,suma,m0,m1,m2, // Definición de variables

m3,m4,m5,m6,m7,m8,m9;

void setup(){

analogReadResolution(12); // Resolución de convertidores

analogWriteResolution(12);

Timer1.attachInterrupt(timer); // llamada de la función cuando hay "overflow"

Timer1.start(500); // Llama a la interrupción cada 0.5 ms

suma=0; // Condiciones iniciales en cero.

m1=m2=m3=m4=m5=m6=m7=m8=m9=0;

void loop(){ // Ninguna tarea se ejecuta fuera de la interrupción

void timer(){ // Función de interrupción

m0=analogRead(A5); // Lectura de x[n]

suma=(m0+m1+m2+m3+m4+m5+m6+m7+m8+m9); // Sumatoria de las 10 muestras


prom=0.1*suma; // Promedio

analogWrite(DAC1,prom); // Envia datos al DAC

m1=m0; // x[n-1]=x[n]

m2=m1; // x[n-2]=x[n-1]

m3=m2; // x[n-3]=x[n-2]

m4=m3; // x[n-4]=x[n-3]

m5=m4; // x[n-5]=x[n-4]

m6=m5; // x[n-6]=x[n-5]

m7=m6; // x[n-7]=x[n-6]

m8=m7; // x[n-8]=x[n-7]

m9=m8; // x[n-9]=x[n-8]

fm=1000;
fe=fm/2;
Wp=[60 200]/fe;
Ws=[10 250]/fe;
Rp=3;
Rs=40;
[n,Wn]=buttord(Wp,Ws,Rp,Rs)
[b,a]=buttord(n,Wn);
[h,f]=freqz(b,a,[],fm);
plot(abs(h))
xlabel('Hz')
ylabel('Modulo de H(z)')
b=fir(n,Wn);
subplot(2,1,1)
freqz(b,1,512)
subplot(2,1,2)
[h,f]=freqz(b,fm)
plot(abs(h))
xlabel('Hz')
ylabel('Modulo de H(z)')
title('filtro FIR Pasabanda')

También podría gustarte