Vous êtes sur la page 1sur 20

Práctica III:

DISEÑO, SIMULACIÓN E IMPLEMENTACIÓN DE UN FILTRO


FIR RECHAZA BANDA VENTANA TRIANGULAR CON
ARDUINO DUE

Integrantes:

Adán Eleazar Navarro Gómez ID: 14852


Julio Hinojosa Palomares ID: 7026
Giovani López Espinoza ID: 15338

Clase: Procesamiento de Señales

Maestro: José Manuel Campoy Salguero

24/05/2019 Cd. Obregón, Sonora.


OBJETIVO:

Implementar un filtro FIR Rechaza Banda con ventana triangular (o Bartlett) mediante
la utilización de la tarjeta programable Arduino DUE. Se buscará generar la función del
filtro con la tarjeta mediante la programación de la misma en la interfaz Arduino IDE, y
visualizar en un osciloscopio el efecto que tiene el filtro sobre una señal de entrada
aplicada, la cual es proporcionada por el generador, para su comparación con los
resultados obtenidos en el diseño teórico creado y simulado en el paquete
computacional MATLAB.
ANTECEDENTES:

Un filtro de respuesta de impulso finito ( FIR ) es un filtro cuya respuesta de impulso (o


respuesta a cualquier entrada de longitud finita) es de duración finita , porque se
establece en cero en tiempo finito. La respuesta de impulso de un filtro FIR de tiempo
discreto de orden N dura exactamente N + 1 muestras (desde el primer elemento distinto
de cero hasta el último elemento distinto de cero) antes de que luego se establezca en
cero. Los filtros FIR pueden ser de tiempo discreto o de tiempo continuo, y digitales
(como en esta práctica) o analógicos.

Para motivos del presente trabajo se utilizó un filtro FIR rechazabanda con el método de
ventana triangular para poder observar el efecto que tiene sobre una señal senoidal, su
atenuación en el rango de frecuencias establecido, las diversas respuestas, la
observación de dichos efectos en la teoría contrastada con la práctica.
PROCEDIMIENTO (DESARROLLO Y RESULTADOS EXPERIMENTALES
OBTENIDOS):

1.- Diseño: el primer paso fue el diseño del filtro con las especificaciones dadas las
cuáles fueron: un Filtro FIR ventana triangular rechaza banda con frecuencia de corte
baja (fcl) = 500 hz y frecuencia de corte alta (fcH) = 1khz , frecuencia de muestreo (fs)
= 4khz y 10 tabs (originalmente 9, cambiado a 10 por razones prácticas). Para ello se
utilizó la herramienta “filter designer ” del programa MATLAB a la cual se accede al
escribir “filterDesigner” en la ventana de comandos:

Fig. 1: Herramienta de diseño de filtros en MATLAB

Le agregamos los parámetros como frecuencias, tipo de filtro y orden en las pestañas
correspondientes (nótese como la imagen de pre-visualización cambia):

Fig. 2: Especificaciones del filtro


Y se procede a pulsar el botón “design filter” con lo cual ya generará el código,
previsualizará la gráfica de respuesta en magnitud en decibeles, y se podrá exportar a la
interfaz SIMULINK para su visualización simulada en tiempo real.

Fig. 3: Filtro diseñado

Gráfica de respuesta en magnitud:

Fig. 4: Gráfica de respuesta en magnitud del filtro

Gráfica de respuesta en fase:


Fig. 5: Gráfica de respuesta en fase

Fig. 6: Gráfica de respuesta al impulso

Fig. 7: Gráfica de polos y ceros


Finalmente generamos el código que más adelante nos servirá para extraer los
coeficientes para la programación en Arduino IDE, para ello nos vamos a File/Generate
MATLAB Code/Filter Designer Function:

Fig. 8: Instrucciones de generación de código

El código generado se muestra a continuación:

function Hd = filter FIR


%FILTER FIR Returns a discrete-time filter object.

% MATLAB Code
% Generated by MATLAB(R) 8.5 and the Signal Processing Toolbox 7.0.
% Generated on: 25-May-2019 00:10:16

% FIR Window Bandstop filter designed using the FIR1 function.

% All frequency values are in Hz.


Fs = 4000; % Sampling Frequency

N = 10; % Order
Fc1 = 500; % First Cutoff Frequency
Fc2 = 1000; % Second Cutoff Frequency
flag = 'scale'; % Sampling Flag

% Create the window vector for the design algorithm.


win = triang(N+1);

% Calculate the coefficients using the FIR1 function.


b = fir1(N, [Fc1 Fc2]/(Fs/2), 'stop', win, flag);
Hd = dfilt.dffir(b);

% [EOF]
Fig. 9: Coeficientes obtenidos

2.- Simulación: utilizando la aplicación SIMULINK, se tiene acceso a una


aproximación del comportamiento real del filtro mediante la apreciación de sus salidas.
Para ello hay que irse a la pestaña “file” y elegimos la opción “export to simulink
model”:

Fig. 10: Exportación a SIMULINK

Una vez preparado, pulsamos el botón “realice model” para obtener la representación
del filtro FIR en la aplicación SIMULINK:
Fig. 11: Interfaz de SIMULINK

Agregando una entrada y en la salida un “scope” para visualizar el filtrado:

Fig. 12: Diagrama de bloques para análisis de entrada contra salida

Interactuando con el bloque “scope” obtenemos la señal que ha pasado por el filtro y la
misma señal original a manera de comparación, sin que se aprecien diferencias
significativas:
Fig. 13: Comparación visual de señal de entrada vs salida

3.- Implementación: Se conectó la tarjeta programable Arduino DUE a la computadora


personal:

Fig. 14: Tarjeta Arduino DUE conectada a PC

Se ejecuta el programa Arduino IDE en la pc, y nos arroja la ventana donde se escribe el
código:
Fig. 15: Interfaz Arduino IDE

Colocamos el siguiente código del filtro FIR ventana triangular:

Int intpin=5; //pin de entrada analógica


int orden=12, i; // Orden del filtro
float y=0;
//Coeficientes del filtro
float coef[11]={-0.0190, -0.0000, 0.0952, 0.1115, -0.0816, 0.7880, -0.0816, 0.1115,
0.0952, -0.0000, -0.0190};
void setup() {
//inicialización de valores
DDRD = 0xFF
for(i = 0; i<= orden; i++){
X[i] = 0;
}
}

void loop() {
//Leer el valor de entrada
x[0] = analogRead(intpin)/4;
y = 0;
//Manipulación de la señal
for(i = 0; i<orden; i++){
y <= coef[i]*X[i];
}
//retardos
for (i = orden; I> 0; i--){
X[i] = X[i-1];
}
//Mostrar salida
PORTD = y;
}
Y compilamos.

Fig. 15b: Programa en la interfaz

Una vez realizado lo anterior se procede a realizar las mediciones correspondientes a los
parámetros de interés, los cuales son la señal de entrada del generador y la señal
modificada por el efecto del filtro en la salida de la tarjeta.

Se tomaron 6 mediciones desde un mínimo de 80Hz hasta el máximo de 1000Hz tal


como se muestra en la siguiente secuencia de imágenes, se aprecia la frecuencia del
generador seguido del despliegue del osciloscopio donde se muestran la señal de entrada
y la señal de salida:

Fig. 16: Señal de generada a 80Hz


Fig. 17: Despliegue de señales a 80Hz

Fig. 18: Señal generada a 500Hz

Fig. 19: Despliegue de las señales a 500Hz


Fig. 20: Señal generada a 600Hz

Fig. 21: Despliegue de las señales a 600Hz


Fig. 22: Señal generada a 750Hz

Fig. 23: Despliegue de señales en 750Hz


Fig. 24: Señal generada a 900Hz

Fig. 25: Despliegue de las señales en 900Hz


Fig. 26: Señal generada a 1kHz

Fig. 27: Despliegue de las señales a 1kHz


ANÁLISIS DE RESULTADOS:

En un primer momento tenemos que a una frecuencia de 80Hz, tanto la señal de entrada
como la de salida deberían ser prácticamente iguales, pero difieren en amplitud, por el
efecto de arduino due ya tiene por default, baja la amplitud de 2V a 1.29V, siendo este
último el valor que tomaremos como el 100%, es decir nuestro voltaje de referencia.

Para la comparación teórica usamos el comando “freqz” en la ventana de comandos de


MATLAB donde ya tenemos el código generado, y se empieza a analizar la gráfica con
el cursor sección por sección y haciendo el cálculo respectivo para obtener el nivel de
atenuación en cada caso, tomando como referencia el valor de 1.29V.

Fig. 28: Gráficas de frecuncia normalizada

Dando como resultado la siguiente tabla comparativa:

Frecuencia Atenuación (Práctica) Atenuación (Teórica)


80Hz 0.9600 0.9285
500Hz 0.8309 0.7008
600Hz 0.8110 0.4446
750Hz 0.7501 0.3569
900Hz 0.8150 0.6230
1000Hz 0.7881 0.8203

Tabla 1: Atenuación teórica contra práctica de la señal


CONCLUSIÓN:

El resultado obtenido de la práctica se acercó al resultado que se tenía en la simulación,


a pesar de que las medidas tomadas no coincidieron de manera exacta con las obtenidas
mediante la simulación. Esto debido en parte a que la tarjeta Arduino DUE ya por
defecto nos atenuaba la señal, como se veía en la señal a 80Hz (en la que no debía
atenuar debido a que no entraba aún en el rango de frecuencias de rechazo) en la que la
original tenía una amplitud de 2V y ya presentaba una salida de 1.29V.
APÉNDICES:

Herramientas utilizadas:

Equipo:

 1 Computadora personal con Arduino IDE Instalado y MATLAB 2019


 1 Osciloscopio
 1 Placa Arduino DUE
 1 Generador de funciones
 Jumpers

Software:

 Mathworks MATLAB Ver. 2019


 Arduino IDE

BIBLIOGRAFÍA:

Reyes, Fernando, “ARDUINO: Aplicaciones en Robótica, Mecatrónica e ingenierías”


1ra. Edición, Ed. Alfaomega Grupo Editor 2015

A. E. Cetin, O.N. Gerek, Y. Yardimci, "Equiripple FIR filter design by the FFT
algorithm," IEEE Signal Processing Magazine, pp. 60-64, March 1997.

Alan V. Oppenheim and Ronald W. Schafer (1989). Discrete-Time Signal Processing.


Prentice Hall. p. 1. ISBN 0-13-216771-9.

https://www.arduino.cc/en/main/software

Vous aimerez peut-être aussi