Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
75
4.1. INTRODUCCIN
En este apartado vamos a hacer un estudio de un filtro IIR en
particular, en concreto un filtro IIR paso de bajo con los siguientes
parmetros:
76
Una vez que sepamos el orden del filtro (que por regla general, para
unas especificaciones parecidas como son las del FIR que usamos en el
captulo anterior y las de el IIR que vamos a implementar, es siempre de un
orden mucho menor que el del FIR) y los coeficientes, lo que tendremos
que hacer es implementarlo en un lenguaje de descripcin hardware
(VHDL), tal y como hicimos con el FIR. Al igual que en el FIR, en el IIR,
los retrasos los implementaremos con flip-flops.
77
rp=1;
rs=25;
fp=5000;
fs=7000;
fsim=48000;
wp=2*fp/fsim;
ws=2*fs/fsim;
[N,Wn]=ellipord (wp,ws,rp,rs);
Jos Manuel Marn de la Rosa
atenuacin de la bada de
78
[b,a]=ellip(N,rp,rs,Wn);
f=1:100:20000;
H=freqz(b,a,f,fsim);
plot(f,abs(H));
Con esta funcin obtenemos el orden del filtro (N) y los coeficientes
(a y b). El orden sale 4 y los coeficientes son:
Coeficientes a
Valor
a1
a2
-2.9457
a3
3.6851
a4
-2.2205
a5
0.5502
Tabla 3: Coeficientes a
Coeficientes b
Valor
b0
0.0695
b1
-0.1308
b2
0.1842
b3
-0.1308
b4
0.0695
Tabla 4: coeficientes b
79
Estos son los coeficientes que tendremos que digitalizar para poder
implementar el filtro en la FPGA.
80
81
potencia, y otra pequea sampling de frecuencia 5.5 Khz. con muy baja
densidad de potencia a la salida, ya que es filtrada casi en su totalidad.
82
83
Para nuestro diseo, hemos decidido, que la seal digital que entra en
el filtro (X(n)) provenga de digitalizar la seal analgica con 18 bits, as
que las muestras de la seal de entrada estarn codificadas con 18 bits, ya
que as logramos tener una buena precisin. Y los coeficientes de nuestro
filtro lo vamos a codificar con 9 bits y vamos a usar 1 bit para codificar la
parte entera de los coeficientes y 8 para la parte decimal.
Jos Manuel Marn de la Rosa
84
Coeficiente
Valor
Codificacin con 9
bits en CA2
a1
000000000
a2
-189
101000011
a3
236
011101100
a4
-142
101110010
a5
35
000100011
85
Coeficiente
Valor
Codificacin con 9
bits en CA2
b0
18
000010010
b1
-33
111011111
b2
47
000101111
b3
-33
111011111
b4
18
000010010
86
--
Coeficientes de 9 Bits
--
de corte de 5 Khz.
---------------------------------------------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
-- Filtro iir
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.fir_coef.all;
entity iir is
end iir;
end component;
begin
fir_a: fir
generic map (es_a=>1)
port map (clk=>clk, reset=>reset, load=>load,
data_in=>data_outi, data_out=>data_outav);
data_outa <= signed (data_outav);
fir_b: fir
generic map (es_a=>0)
port map (clk=>clk, reset=>reset, load=>load,
data_in=>data_in, data_out=>data_outbv);
data_outb <= signed (data_outbv);
87
88
begin
idata_tmp :=
(data_outb(17)&data_outb(17)&data_outb(17 downto 0)) (data_outa&"00") ;
if idata_tmp(19 downto 18) = "01"
then --
else
data_tmp:=idata_tmp(17 downto 0);
end if;
89
Este cdigo es el Top del filtro IIR, este cdigo, junto con la
descripcin de los componentes, se adjuntan al final de la documentacin
en el apartado Anexos.
90
El estudio que vamos a hacer del filtro ser un estudio similar al que
hicimos con el filtro FIR, o sea, introduciremos fallos en determinadas
partes de nuestro filtro con ayuda de la misma herramienta que usamos
para el estudio del FIR diseada en el proyecto FT-UNSHADES a la
cual ya hicimos referencia en el capitulo anterior, y cuya documentacin,
como ya dijimos, la introducimos en el capitulo Anexos, y veremos la
respuesta del filtro ante estos fallos, viendo si se produce error o no en la
salida del filtro, para as, hacer un mapa de nuestro filtro viendo donde si
se produce fallo en ese sitio es ms grave para nuestro sistema, ya que
como veremos, habr bits en los cuales, aunque se introduzca un fallo, la
salida no lo notar y ser igual que si no se hubiese producido dicho fallo.
Mientras que habr otros bits, en los cuales si se tiene un fallo en ese bit,
ser crtico para nuestro filtro, ya que un fallo en ese bit puede que siempre
produzca un fallo en la salida. As, como hicimos para el FIR, sabremos
que registros y que bits dentro de dichos registros son ms interesantes
de proteger para un mejor funcionamiento de nuestro sistema.
91
a atacar los bits que no queramos redundar, sin tocar los que queramos
darle triple redundancia modular, o sea, que vamos a utilizar un nico
diseo desprotegido y slo vamos a introducir errores en los bits de los
registros que no queramos redundar en esa prueba, ya que introducir un
error en un bit redundado no sirve para nada, ya que sabemos que al tener
triple redundancia modular ese fallo no se ver reflejado en un error a la
salida de nuestro sistema. Y as podremos ver tambin, al igual que en el
caso anterior, que registros y bits son ms importantes de redundar
ahorrando una gran cantidad de tiempo en pruebas de laboratorio.
92
Pues haciendo esta prueba, los resultados que obtuvimos fueron los
siguientes:
93
Para realizar esta prueba, lo nico que tenemos que hacer es dejar de
atacar a los 8 MSB de cada registro, o sea, vamos a atacar a los 10 bits
menos significativos de todos los registros.
94
PRUEBA 3: Para demostrar que realmente los MSB son los bits ms
sensible de los registros, vamos a realizar ahora la prueba inversa a la 2, o
sea, redundar los 10 LSB:
95
96
97
98
99
PRUEBA 8: En esta prueba vamos a atacar todos los bits de los registros a.
Por lo tanto redundaremos todos los bits de los registros de b y dejaremos
totalmente sin redundar los registros a.
100
101
102
2.- Los bits ms sensibles de cada registro, o sea los que tienen
mayor porcentaje de que al provocar un fallo en ellos se tenga un error en
la salida, son los bits ms significativos (los MSB), en concreto los 8 MSB,
los que van del bit 10 al 17 de cada registro.
3.- Si queremos un filtro IIR que sea bastante tolerante a los SEU los
ms importante de redundar son siempre los registros de la realimentacin
(registros a) y tambin redundar siempre los bits ms significantes de las
etapas, en concreto los 8 bits MSB. Ya que haciendo esto, hemos visto que
podemos obtener filtros bastante eficientes y ahorrando gran cantidad de
recursos.
103