Está en la página 1de 7

Filtro de media (causal)

IMPLEMENTACIN EN LA PLATAFORMA ARDUINO DUE DE UN FILTRO DE MEDIA (CAUSAL)


APLICADO A UNA CIERTA SEAL DE ENTRADA. VISUALIZAR LA SALIDA DEL FILTRO EN
OSCILOSCOPIO.

Para comprensin del problema realic el filtro de media a una


seal en Matlab
A continuacin, muestro la parte del programa donde se realiza
el filtro.

for n=3:69
y_ener_local_media(n)=((y(n-2))+(y(n-1))+(y(n))+(y(n+1))+
(y(n+2)))/5;%filtro de media, quita impuresas
end

Aqu el cdigo en C++ para Arduino

#DEFINE SENSOR A1
#DEFINE VENTANA 3
VOID SETUP()
{
SERIAL.BEGIN(9600);
PINMODE(SENSOR,INPUT);
}
INT VAL[3];

VOID LOOP(){
INT AUX;
INT VALUE = ANALOGREAD(SENSOR);
//FILTRO
VAL[0]=VALUE;
FOR (INT I = VENTANA-1; I > 0 ; I--)

VAL[I]=VAL[I-1];

}
/*
FOR (INT I

= 0; I < VENTANA; I++)

{
FOR (INT J

= 0; J < VENTANA-I; J++)

{
IF (VAL[J]>VAL[J+1])

{
INT AUX = VAL[J];
VAL[J]=VAL[J+1];
VAL[J+1]=AUX;

}
}
}*/
IF(VAL[0]>VAL[1])

{
AUX=VAL[0];
VAL[0]=VAL[1];
VAL[1]=AUX;

}
IF(VAL[0]>VAL[2])

{
AUX=VAL[0];
VAL[0]=VAL[2];
VAL[2]=AUX;

}
IF(VAL[1]>VAL[2])

{
AUX=VAL[1];
VAL[1]=VAL[2];
VAL[2]=AUX;

ANALOGWRITE(DAC1,VAL[1]);

}
Para probar la seal, utilic el generador de funciones, una seal de dientes de
sierra a una frecuencia de 5 hz. Esto es porque en la seal filtrada se atenan
las crestas y valles.

Filtro de mediana (causal)


IMPLEMENTACIN EN LA PLATAFORMA ARDUINO DUE DE UN FILTRO DE MEDIANA (CAUSAL)
APLICADO A UNA CIERTA SEAL DE ENTRADA. VISUALIZAR LA SALIDA DEL FILTRO EN
OSCILOSCOPIO.
Para comprensin del problema realic el filtro de mediana causal a una seal
en Matlab
A continuacin, muestro la parte del programa donde se realiza el filtro.
for n=3:69
**Guardo las muestras de la seal en un vector a**
a=[(y(n-2)) (y(n-1)) (y(n)) (y(n+1)) (y(n+2))];
m=length(a);
**Arreglo de burbuja**
for i=1:m
for j=1:m-i
if a(j)>a(j+1)
aux=a(j);
a(j)=a(j+1);
a(j+1)=aux;
end
end
end
**asigno a otro vector la mediana de la muestral actual n
y_ener_local_mediana(n)=a(3);
end

Aqu el cdigo en C++ para Arduino


#define SENSOR A1
#define ventana 5
void setup()
{
Serial.begin(9600);
pinMode(SENSOR,INPUT);
}
int filtered=0,val[ventana];
void loop()
{
//Lectura de la seal
int value = analogRead(SENSOR);
int suma=0;
//filtro
val[0]=value;
for (int i = 0; i < ventana-1; i++)
{
val[i+1]=val[i];
}
for (int i = 0; i < ventana; i++)
{
suma=suma+val[i];
}
filtered= suma/ventana;
Serial.print(value);
Serial.print('\t');
Serial.println(filtered);
analogWrite(DAC1,filtered);
}

Conclusin
Los filtros de media y mediana son de gran ayuda para reducir el ruido en
seales analgicas. Hacen que la seal, una vez filtrada sea ms fcil de
visualizar al tener una lnea ms suave. Comparando los resultados de ambos
filtros, media y mediana, se puede ver una mejor cercana a la seal original.
Al utilizar ms de 3 valores para la muestra, en el osciloscopio se notaba una
seal muy distinta a la original, por eso recurr a utilizar solo 3 por muestra.

También podría gustarte