Академический Документы
Профессиональный Документы
Культура Документы
ELECTRÓNICA Y ELÉCTRICA
FILTRO DIGITAL
Los filtros digitales operan sobre las señales que representan algún fenómeno de la
naturaleza, transformando sus muestras a través de un algoritmo, y convirtiéndolas
en nuevas secuencias numéricas cuyas características son distintas a las originales
(señal filtrada).
Pasa bajos
Pasa altos
Pasa banda
Rechazo de banda.
El filtro pasa bajo, como su nombre lo indica, deja pasar las componentes más graves
del sonido, y retiene a las componentes agudas cuya frecuencia es superior a la
frecuencia de corte del filtro. Su versión más elemental se obtiene sumando a una
señal digital una copia de sí misma, retrasada en una muestra.
Este proceso se representa a través del siguiente diagrama.
En esta figura, la caja con la inscripción z-1 se denomina línea de retardo y representa
a un dispositivo capaz de retrasar en una muestra a la señal de entrada. Cuando
ingresa a la línea la primera muestra no sale nada (en realidad, sale un cero), cuando
ingresa la segunda sale la primera, y así sucesivamente. La cantidad de muestras que
se retrasa la señal se indica con el exponente negativo (-1 en el ejemplo), el cual
puede asumir cualquier valor (z-24 significa un retraso de 24 muestras).
Siguiendo el diagrama y resumiendo, ingresa al filtro una señal x(n) que se suma a
una versión retrasada en una muestra de sí misma, y da como resultado otra señal
filtrada y(n).
TEORIA DE FILTROS
La teoría de filtros tiene una componente matemática compleja que hace que se aleje de la
experiencia humana. En los textos técnicos, los filtros se describen mediante una
herramienta matemática denominada transformada z. La transformada z relaciona los
efectos de retardos de muestras en una imagen de dos dimensiones de la representación
frecuencial (H(f)) que se denomina el plano complejo z.
Los polos en dicho plano representan los picos de resonancia o puntos que hacen que la
respuesta frecuencial se haga infinita. Los ceros representan los puntos de amplitud nula de
la respuesta frecuencial. Por ejemplo, un filtro de 2 polos tiene 2 picos de resonancia.
ECUACION EN DIFERENCIAS
Los filtros causales, lineales e invariantes pueden representarse en el dominio del
tiempo por su ecuación en diferencias. Esta ecuación es una fórmula que permite
calcular la salida de un filtro de acuerdo a las muestras presentes y pasadas de la
señal de entrada (parte no recursiva) y las muestras pasadas de la señal de salida
(parte recursiva).
Los valores de los vectores a y las b se denominan coeficientes del filtro. Podemos
escribir la ecuación anterior de modo más compacto, utilizando el símbolo de
sumatoria:
donde se reemplazan las i y las j por números consecutivos que van de 0 hasta M
para el primer término, y de 0 a N para el segundo.
Estas son las dos topologías base de los 2 tipos de filtros digitales.
En la figura: (a) Filtro digital FIR
(b) Filtro digital IIR
En donde:
(a) Retardamos ligeramente una copia de la señal de entrada (de uno o varios
períodos de muestreo) y combinamos la señal de entrada retrasada 5 con la
nueva señal de entrada. Los filtros digitales basados en este funcionamiento se
dice que son de respuesta impulsional finita o FIR (Finite Impulse Response).
(b) Retardamos una copia de la señal de salida, la cual combinamos con la nueva
señal de entrada. Los filtros digitales basados en este funcionamiento se dice
que son de respuesta impulsional infinita o IIR (Infinite Impulse Response).
También se les denomina filtros recursivos o con feedback.
III. FILTROS FIR
Los filtros digitales se usan frecuentemente para tratamiento digital de la imagen o para
tratamiento del sonido digital. FIR es un acrónimo en inglés para Finite Impulse Response
o Respuesta finita al impulso. Se trata de un tipo de filtros digitales en el que, como su
nombre indica, si la entrada es una señal impulso, la salida tendrá un número finito de
términos no nulos.
En la expresión anterior N es el orden del filtro, que también coincide con el número de
términos no nulos y con el número de coeficientes del filtro. Los coeficientes son bk.
Dependiendo del orden del filtro, la cantidad de etapas retardadoras, por lo que la
forma general de un filtro FIR se presentaría en la siguiente figura:
En donde:
T: Representan los retardos
h(0), h(1)… h(P-1) Representan los coeficientes del filtro
IV. DESARROLLO DEL FILTRO
i_clk como reloj, i_rstb como reset que se activa en bajo para poner a 0 todas las
salidas y señales.
I_coeff_0, I_coeff_1, I_coeff_2, I_coeff_3, I_coeff_4 son los coeficientes del filtro de
8 bits de datos.
I_data es la entrada de datos de 8 bits.
O_data es la salida del filtro, tiene 18 bits para no perder información por
desbordamiento.
Proceso p_input
Una vez definidas las señales a utilizar iniciamos en un process colocando en la lista
sensible clk y i_rstb por que estos afectan directamente a las señales que se cargaran.
Este procesos realiza la carga de datos de entrada y coeficientes.
En caso de activar i_rstb se limpia en cero todos los datos. De otra manera en cada
flanco de subida del reloj cargamos los datos. En la linea 45 cargamos p_data con el
valor de la entrada, de tal manera que con cada carga el dato se va dezplazando hacia
la derecha dentro del arreglo de 5 posiciones. Y Tambien se carga los coeficientes
asignados en el arreglo r_coeff.
Proceso p_mult
En el proceso p_mult de igual manera que el anterior se i_rstb para poner a 0 el
arreglo r_mult que almacenará las multiplicaciones de los datos entrantes por los
coeficientes.
Se utiliza la sentencia for loop, de tal manera que r_mult(k), donde k es el índice del
arreglo , sea la multiplicación del valor p_data(k) con el valor del coeficiente(k). Es
decir el coeficiente en la posición ‘0’ con el dato en la posición ‘0’, el coeficiente en la
posición ‘1’ con el dato en la posición ‘1’ y así hasta la posición 4.
Proceso p_add_st0
En este proceso se realiza la suma de los productos de coeficientes por datos
entrantes.
En la línea 73 la sentencia for loop realiza la suma de las posiciones 0 con 1 y 2 con 3,
y la almacena en la posición 0 y 1 de r_add_st0 respectivamente. Utilizamos la función
resize porque al sumar dos números en caso de alcanzar su máximo valor puede
ocurrir un desbordamiento, entonces agregamos un bit adicional. El producto tiene
16 bits entonces al sumar 1 se obtiene 17.
La posición 2 del arreglo r_add_st0 se mantiene con el valor de r_mult(4) para ser
sumado al total posteriormente.
Proceso p_add_st1
En este proceso sumamos los valores anteriores, que son las sumas de las
multiplicaciones, obtendremos la suma total y la almacenaremos en r_add_st1, de
igual manera se utiliza “resize” para fijar un nuevo tamaño a la salida para evitar
perdida de datos por desbordamiento.
Proceso p_output
Este proceso realiza la carga de la suma total en la salida, realizando una conversión
del valor a std_logic_vector de 18 bits. Y en la línea 99 finaliza con “end rt1” para
indicar el fin de la descripción de la arquitectura.
Debemos tener en cuenta que el módulo tiene un reloj de 50 MHz por lo cual es
necesario dividir la frecuencia a 1 Hz para poder cargar los datos manualmente en
cada flanco de reloj, y obtener una salida visible. Por lo cual se ha dividido en
componentes de la siguiente manera:
DIVISOR DE FRECUENCIA DE 50 MHZ A 1HZ
El código realiza una cuenta con el reloj de 50 MHz una vez llea a 25000000 de
pulsos entonces la salida conmuta de su valor actual y la cuenta regresa a 0.
El número de pulsos se calculó dividiendo 0.5s entre 20 ns, que es medio periodo
de la señal deseada entre el periodo del reloj del módulo.
VISUALIZACIÓN EN DISPLAY 7 SEGMENTOS
TOP LEVEL DEL VISUALIZACIÓN
Una vez compilado podemos observar los componentes, divisor, filtro y deco, los cuales fueron
generados
3. SIMULACION
Por motivos de simulación hemos omitido el divisor de frecuencia y la visualización para los
displays de modo que hemos definido el componente fir_filter5 como “Top level entity”.
Como podemos notar si nuestra entrada i_rstb está asignada a un cero lógico entonces,
reiniciamos nuestras señales internas y salidas a un valor de 0; como podemos notar en los
primeros dos flancos del clock. Posteriormente forzamos la entrada a un uno lógico y como
podemos observar el arreglo de los coeficientes se cargan una vez llega un flanco del clock
y como notamos también se carga el dato ingresado en la primera posición del arreglo.
Como está indicado en la explicación del código podemos notar que en el siguiente flanco
del clock el arreglo se desplaza y el dato de entrada se carga a la posición 0 y tenemos el
arreglo de la siguiente manera {(dato_in) (arreglo0_pasado) (arreglo1_pasado)
(arreglo2_pasado)}.
OBS: Simulación para un entrada escalón.
A continuación veremos la reacción al filtro a distintos valores de entrada.
a. Un impulso:
b. Dos impulsos:
c. Tres impulsos :
d. Cuatro impulsos:
4. QUEMADO EN LA PLACA
Para la implementación tenemos que preparar las entradas y salidas lógicas declaradas en
el código para que se puedan adaptar a las entradas y salidas físicas de la Tarjeta de
Desarrollo del FPGA. Esta parte se realiza en la ventana del PIN PLANNER desde el programa
del Quartus II.
Además necesitamos de los nombres de los pines de cada componente de la Tarjeta para
poder asignar. Estos nombres de cada pin son únicos por cada Tarjeta, es decir depende del
modelo. Nosotros estamos desarrollando el proyecto en el FPGA modelo Cyclone IV E –
EP4CE115F29C7. Al adquirir la tarjeta, además, tenemos a nuestra disposición el manual de
usuario en el cual se encuentra las distribuciones de los pines pertenecientes a la Placa.
Entonces, primero identificamos de nuestro código cuales son las entradas y cuáles son las
salidas:
A. ENTRADAS:
Entonces mostraremos como es que se hace la asignación de los pines:
B. SALIDAS:
Displays
o Display 1:
o Display 2:
o Display 3:
o Display 4:
o Display 5:
o Display 6:
Dos Impulsos:
Un Impulso: