You are on page 1of 24

2.

HERRAMIENTA PARA EL DISEÑO DE FILTROS

2.1 Introducción

El procedimiento a seguir en el diseño de filtros será el que sigue:

 Definir especificaciones deseadas, que cumpla un filtro ideal de precisión infinita o


ilimitada, es decir representado mediante un número ilimitado de bits.
 Definir un filtro de precisión finita o limitada, es decir representado mediante un
número finito y fijo de bits y al que se denominará filtro cuantizado, cuyo
comportamiento sea lo más cercano posible al filtro ideal. Este filtro cuantizado podrá
venir implementado tanto en punto fijo como en punto flotante.
 Diseño del filtro en punto fijo, tarea que simplifica la herramienta de diseño de filtros.

El diseño de filtros en punto fijo en el que se centra este capítulo será posible gracias al trabajo
conjunto de esta herramienta de diseño de filtros con la herramienta en punto fijo vista en el
apartado anterior.

Este proceso de diseño de filtros digitales no va a ser sencillo. Cuando el filtro va a ser usado en
cualquier aplicación software, toda la información que maneja como la que genera tiene que
venir representada por valores discretos. Esto es debido a que la memoria disponible para
almacenar datos en cualquier aplicación de procesamiento digital de señales va a ser finita, y por
lo tanto números de precisión infinita no van a tener cabida.

La herramienta de diseño de filtros de MATLAB proporciona técnicas para diseñar, simular y


analizar filtros digitales tanto en punto fijo como en punto flotante, usando métodos de diseño
avanzado que facilitan este proceso. Además permitirá el análisis de los efectos de cuantización
en el comportamiento de los filtros.

Los efectos de la cuantización en filtros en punto flotante se consideran poco significativos, no


ocurre lo mismo con filtros en punto fijo donde sus efectos no pueden ser ignorados. Esto es
debido en gran medida al rango dinámico que ofrecen cada uno de ellos.

La herramienta de diseño de filtros permitirá estudiar estos efectos de cuantización en filtros en


punto fijo mediante el uso de objetos ‘dfilt’. Estos objetos ‘dfilt’, junto con sus propiedades
asociadas será lo que centrará el estudio de los siguientes apartados.

Los objetos ‘dfilt’ van a implementar el diseño de los filtros en punto fijo, ofreciendo
numerosas estructuras para su realización. Sus propiedades asociadas permitirán controlar el
modo de almacenar y trabajar con la información necesaria para llevar a cabo el diseño.

Además, la herramienta de diseño de filtros permite una sencilla interacción con los lenguajes
de diseño en hardware o lenguajes xHDL. Así se podrá mandar directamente las salidas de los
algoritmos generadas tras del diseño a DSP en punto fijo, FPGA o ASIC.

En todo el proceso de realización del filtro en el entorno MATLAB se va a permitir interactuar


fácilmente con el diseño antes de llevar a cabo la implementación final en hardware. Esto es
necesario debido a la dependencia entre las distintas fases de implementación del filtro hasta su
descripción en lenguaje hardware y posterior síntesis. Esta dependencia entre fases se puede
observar en el Esquema 2. 1, donde se presenta el proceso de implementación de un filtro en
una FPGA en este caso:

Diseño del filtro en punto flotante.

Diseño del filtro en punto fijo.

Diseño hardware del filtro en xHDL.

Evaluar el diseño en punto fijo en términos de


exactitud y de eficiencia hardware (tamaño,
latencia, potencia,...).

No
¿Resultados
buenos?

Programar la FPGA

No
¿Resultados
buenos?

Finalizado proceso

Esquema 2. 1 Implementación en una FPGA

Los siguientes apartados se centrarán en la implementación de filtros FIR en punto fijo.

Una de las mayores desventajas que presentan los filtros FIR es que ante las mismas
especificaciones exigidas, su implementación suele requerir órdenes mucho mayores que las
implementaciones de filtros IIR con las mismas especificaciones.

Como características positivas, los filtros FIR son siempre estables y tienen un buen
comportamiento en cuanto al ruido de redondeo, además pueden ofrecer una fase lineal.

En cuanto a los efectos de la cuantificación sobre cada uno de ellos, en general un filtro FIR
tiende a ser menos sensible a la cuantización de coeficientes que los filtros IIR.
Dentro de los filtros FIR, se encuentran los que tienen fase lineal. Este tipo de filtros presentan
en sus coeficientes una simetría o asimetría que les confiere su característica de fase lineal.
Según el orden y el tipo de coeficientes resultan distintos tipos de filtros FIR lineales:

- Tipo I: Presenta orden del filtro par y coeficientes simétricos.


- Tipo II: Presenta orden del filtro impar y coeficientes simétricos.
- Tipo III: Presenta orden del filtro par y coeficientes asimétricos.
- Tipo IV: Presenta orden del filtro impar y coeficientes asimétricos.

El retraso de fase y retraso de grupo de un filtro de fase lineal es igual y constante en toda la
banda de frecuencia. Para un filtro FIR de fase lineal y orden ‘n’, su retraso de grupo viene dado
por ‘n/2’. Esto quiere decir, que la señal filtrada será retrasada ‘n/2’ pasos por igual, a todas sus
frecuencias, lo que permite que no sufra ninguna distorsión de fase y mantenga su forma
original. Su magnitud en cambio, si puede ser modificada por la magnitud de la respuesta en
frecuencia del filtro.

2.2 Diseño de filtros FIR en punto flotante en MATLAB

Como se comentó previamente, en el diseño de filtros se parte de unas especificaciones exigidas


en el comportamiento del filtro que se deben cumplir con el diseño.

Estas especificaciones se cumplirán con más facilidad usando un diseño en punto flotante, ya
que este diseño se aproxima en gran medida al comportamiento ideal o de precisión infinita.
Esto es debido a que MATLAB trabaja en todas sus operaciones con 64 bits en punto flotante y
precisión doble por defecto, siendo este formato de representación de una precisión mucho
mayor de la que cualquier implementación hardware real puede ofrecer.

Se muestran a continuación algunas funciones que permiten el diseño de filtros FIR en punto
flotante:

‘fir1’
Esta función implementa el método clásico de diseño por ventanas de filtros FIR digitales y
de fase lineal. Por defecto crea un filtro paso de baja usando la ventana de Hamming,
aunque esto se puede variar cambiando sus especificaciones en la llamada.

‘fir2’
Esta función diseña un filtro FIR usando el método de ventanas, como la función ‘fir1’, pero
permite una respuesta en frecuencia más arbitraria pudiendo diseñar filtros multibanda, con
respuesta en frecuencia cuya magnitud vaya cambiando a lo largo de la frecuencia.

‘firls’,‘firpm’
Para el diseño de multibanda con regiones de transición tenemos las funciones ‘firls’ y
‘firpm’. Estas son funciones que proporcionan maneras más generales de especificar el
diseño del filtro ideal deseado que las anteriores funciones.

‘firlpnorm’
Diseña una solución ‘minimax’ para filtros FIR usando el algoritmo ‘least-pth’.

‘firgr’
Usa el algoritmo generalizado de intercambio ‘Parks-McClellan’ para diseñar soluciones
óptimas de filtros FIR con respuesta en frecuenta arbitraria.
‘fircband’
Diseña filtros FIR con restricciones establecidas en las bandas de frecuencia usando el
algoritmo ‘Remez’.

‘firceqrip’
Diseño de un filtro FIR con respuesta en frecuencia finita, igual rizado y restricciones en el
diseño.

‘firequint’
Diseño de filtros FIR interpolados de igual rizado.

‘firgr’
Diseño de filtros FIR usando técnicas de Remez generalizado.

‘firhalfband’
Diseño de filtros FIR de media banda.

‘firnyquist’
Diseño de filtros FIR’ Nyquist’ de igual rizado.

‘ifir’
Diseña filtros FIR interpolados.

‘equiripple’
Diseña un filtro que tiene igual rizado y cumple con las especificaciones exigidas.

Se pueden encontrar muchas más, aquí sólo se comentan algunas de las más significativas.

2.3 Diseño de filtros en punto fijo.

El proceso de diseño de filtros en punto fijo ofrece mayor complejidad que el diseño en punto
flotante, debido al formato de representación en punto fijo.

Tanto el proceso de conversión de posibles valores infinitos a un conjunto de posibles valores


finitos representables, como la probabilidad de desbordamientos internos en las operaciones
aritméticas, son causa de errores en la implementación de filtros digitales.

Estos errores pueden llevar a que las cosas no funcionen como se desea y que la respuesta en
frecuencia del filtro difiera de la deseada, por lo tanto es importante tenerlos en cuenta y
evitarlos en la medida de lo posible.

Todos estos factores se tienen que tener en cuenta en el diseño de un filtro de estas
características.

2.3.1 Cuantización. Efectos sobre el diseño

Se presentan en la Tabla 2. 1 algunas fuentes de error causadas por la cuantización y sus


efectos.
Errores
derivados de la Consecuencias
cuantización

coeficientes del filtro


La cuantización provoca un movimiento de los polos y ceros de la función de
transferencia a diferentes zonas del plano z de los inicialmente deseados y
diseñados.
El movimiento de polos y ceros provoca que la respuesta en frecuencia del
Error producido al filtro obtenida no sea la deseada.
representar infinitos En el caso de los filtros IIR también puede llevar a un filtro a la situación
valores posibles por inestable.
un conjunto finito de
valores.
Esto llevará consigo
una pérdida de señal de entrada
información y por Se parte de una señal analógica que se somete a un proceso de conversión
tanto la suma de una A/D. Esta conversión consiste en el muestreo y posterior cuantización de la
señal de error en la señal, obteniéndose una señal digital.
señal original. Este proceso de conversión introduce un error en la señal de entrada que
provoca que se trabaje con valores de señal que no son los deseados y que
repercuta también en la señal de salida del filtro.
El efecto del error sobre la señal se modela de la siguiente manera:

^x[n]=e[n]+x[n]

Esto ocurre sobre todo en las multiplicaciones, ya que el resultado de la


multiplicación ocupará el doble de espacio que cada uno de los operandos
Error producido por la iniciales.
cuantización en Esto dará lugar a lo que denominamos desbordamiento y que tendremos que
operaciones controlar mediante ‘saturación’ o ‘wrap’.
aritméticas. Estos métodos modificarán dichos resultados para que sean compatibles con la
De las operaciones realización, lo que provocará errores.
pueden surgir
resultados cuyo Otro error que puede aparecer es el llamado ‘ciclo límite’, debido a la no
tamaño exceda el linealidad de las operaciones aritméticas cuantizadas.
permitido por los Se da en casos de ausencia de señal de entrada o cuando ésta es una constante
registros internos de la o una señal sinusoidal.
realización hardware. Este error afecta a la señal de salida del filtro.

Tabla 2. 1 Fuentes de error debidas a la cuantización

2.4 Diseño de filtros en punto fijo en MATLAB.

Se ha visto cuales son los factores que hay que tener en cuenta en el diseño de filtros en punto
fijo. Se presenta a continuación como MATLAB permite trabajar con este tipo de filtros
controlando su diseño, además de las consecuencias del uso del punto fijo sobre el
comportamiento inicial del sistema.

El proceso de diseño comienza con unas características específicas que debe cumplir. A partir
de éstas, se generan los coeficientes del filtro que más aproximen su comportamiento al
deseado. Estos coeficientes por defecto serán elementos en punto flotante de precisión doble,
valor por defecto de MATLAB, ocupando cada uno de ellos 64 bits.

Basándose en los coeficientes obtenidos, la implementación del filtro en MATLAB se llevará a


cabo generando un objeto ‘dfilt’, que será usado por la herramienta de diseño de filtro como
base para los filtros cuantizados en punto fijo.

Este objeto ‘dfilt’ tendrá asociadas una serie de propiedades con sus correspondientes valores.
Serán estas propiedades las que determinen como se va a implementar el filtro.

Recordar que cuando se usa aritmética en punto fijo, se especificará con dos cantidades la
forma de cuantizar los números:

o La longitud de la fracción en bits


o La longitud de la palabra en bits

Por tanto, al trabajar sobre objetos ‘fi’ en el diseño del filtro, el formato de representación
[longitud de la palabra longitud de la fracción] será el usado para representar cualquier
cantidad con la que trabaje el filtro.

En siguiente ejemplo muestra el proceso de obtención de un filtro cuantizado en punto fijo


haciendo uso de objetos ‘dfilt’

Ejemplo

Se diseña un filtro FIR en punto flotante paso b = fir1(101, .45, 'low', kaiser(102, 7.8573));
de baja, usando el método de ventanas.
Se almacenan los coeficientes en la variable ‘b’

A partir de los coeficientes, se pasa a la hd = dfilt.dffir(b)


implementación del filtro en tiempo discreto y hd =
punto flotante. Para ello se crea un objeto ‘dfilt’, FilterStructure: 'Direct-Form FIR'
cuyas propiedades asociadas determinarán las Arithmetic: 'double'
características de implementación del filtro. Numerator: [1x102 double]
ResetBeforeFiltering: 'on'
Junto a la orden ‘dfilt’ hay que especificar el tipo States: [101x1 double]
de estructura para llevar a cabo el filtro, en este NumSamplesProcessed: 0
ejemplo se usa una estructura en forma directa.

Se convierte el filtro de punto flotante a punto fijo.


Para ello se modifica la propiedad ‘Arithmetic’ set(hd,'Arithmetic','fixed')
asociada al objeto ‘dfilt’ estableciendo su valor hd
asociado a ‘fixed’.
hd = FilterStructure: 'Direct-Form FIR'
Esto va a permitir activar la cuantización y Arithmetic: 'fixed'
construir el filtro en punto fijo. Numerator: [1x102 double]
ResetBeforeFiltering: 'on'
States: [101x1 embedded.fi]
NumSamplesProcessed: 0

CoeffWordLength: 16
CoeffAutoScale: true
Signed: true

InputWordLength: 16
InputFracLength: 15

OutputWordLength: 16
OutputMode: 'AvoidOverflow'

ProductMode: 'FullPrecision'

AccumMode: 'KeepMSB'
AccumWordLength: 40
CastBeforeSum: true

RoundMode: 'convergent'
OverflowMode: 'wrap'

Tabla 2. 2 Obtención filtro cuantizado en punto fijo

Para establecer el nuevo valor de ‘arithmetic’ se ha usado el comando ‘set’ de MATLAB. Esta
orden permite modificar y establecer las propiedades de un objeto cualquiera.

En cuanto a las propiedades asociadas al objeto ‘dfilt’ (se pueden ver parte de ellas en la Tabla
2.2), serán objeto de apartados posteriores. Por otro lado, la función ‘dfilt’ que ha permitido
crear el objeto del filtro en tiempo discreto, es decir el objeto ‘dfilt’, tiene como sintaxis:
hd=dfilt.structure(input1,..)

‘hd’ es lo que devuelve la función ‘dfilt’, y será un objeto del filtro en tiempo discreto
implementado usando la estructura del tipo ‘structure’.

Se tienen las siguientes estructuras relacionadas con la implementación de filtros FIR:

Orden Definición

dfilt.dffir FIR en forma directa

dfilt.dffirt FIR en forma directa transpuesta.

dfilt.dfsymfir FIR en forma directa simétrica

dfilt.dfasymfir
FIR en forma directa antisimétrica

dfilt.scalar Escalar

Tabla 2. 3 Estructuras implementación del filtro


Cada uno de estas estructuras tendrá un efecto distinto en la cuantización.

2.5 Propiedades asociadas al objeto ‘dfilt’ o filtros en tiempo


discreto

Se ha visto como la función ‘dfilt’ devuelve un objeto que tendrá asociada una serie de
propiedades. Los valores asignados a estas propiedades determinarán la forma de manejar los
datos de entrada al filtro.

Muchas de las propiedades asociadas al objeto ‘dfilt’ serán dinámicas, lo que significa que
estarán disponibles dependiendo de los valores establecidos para otras propiedades del objeto
‘dfilt’.

Una de las propiedades más importantes al trabajar con filtros es la propiedad ‘Arithmetic’. Esta
propiedad define el tipo de aritmética usada en la implementación del filtro, pudiendo ser ésta:

 Aritmética en punto flotante de precisión simple (‘Arithmetic=single’)


 Aritmética en punto flotante de precisión doble (‘Arithmetic=double’)
 Aritmética en punto fijo (‘Arithmetic=fixed’)

Esta propiedad a su vez controlará algunas propiedades dinámicas del filtro. Así, si se cambia el
valor de la propiedad ‘Arithmetic’, la lista de propiedades que aparece en la visualización del
objeto ‘dfilt’ con la nueva configuración será distinta.

Ejemplo

Se visualizan las propiedades del objeto ‘dfilt’ en la Tabla 2. 4. En la columna de la derecha, la


propiedad ‘arithmetic’ toma como valor ‘double’, en la de la izquierda toma valor ‘fixed’.

Se podrá observar como el filtro posee muchas más propiedades asociadas para un valor de
‘arithmetic’ que para el otro.

Todas las propiedades estarán inicializadas a sus valores por defecto:

‘Arithmetic’=’double’ ‘Arithmetic’=’fixed’
hd= dfilt.dffir hd.arithmetic= 'fixed'

hd = hd =
FilterStructure: 'Direct-Form FIR' FilterStructure: 'Direct-Form FIR'
Arithmetic: 'double' Arithmetic: 'fixed'
Numerator: 1 Numerator: 1
ResetBeforeFiltering: 'on' ResetBeforeFiltering: 'on'
States: [0x1 double] States: [0x1 embedded.fi]
NumSamplesProcessed: 0 NumSamplesProcessed: 0

CoeffWordLength: 16
CoeffAutoScale: true
Signed: true

InputWordLength: 16
InputFracLength: 15

OutputWordLength: 16
OutputMode: 'AvoidOverflow'

ProductMode: 'FullPrecision'

AccumMode: 'KeepMSB'
AccumWordLength: 40
CastBeforeSum: true

RoundMode: 'convergent'
OverflowMode:'wrap'

RoundMode: 'convergent'
OverflowMode: 'wrap'

Tabla 2. 4 Propiedad ‘Arithmetic’


Las propiedades que aparecen en la tabla y asociadas al objeto ‘dfilt’ son sólo algunas de las que
se pueden encontrar, ya que como se ha comentado hay muchas propiedades dinámicas. La lista
de propiedades con ‘arithmetic’ a ‘fixed’ aún no estaría completa. Cuando se cambia el valor de
las propiedades ‘ProductMode’ o ‘CoeffAutoScale’, surgen otras propiedades dinámicas que
controlan como trabaja el filtro al llevar a cabo productos o como trabaja con los coeficientes.

Hay que mencionar que no se puede cambiar el valor de una propiedad a menos que sea
visualizada en la lista de propiedades del filtro. Esta visualización se consigue introduciendo el
nombre del filtro en la línea de comandos de MATLAB.

Una función importante de MATLAB para el manejo de objetos es la invocada mediante el


comando ‘get’, que devuelve el valor de la propiedad del objeto especificada en la llamada de la
siguiente manera:

V= get(H,’nombre de la propiedad’)

Si se usa el comando ‘get’ como sigue:

get(H)
Lo que se obtiene es un listado completo de las propiedades del objeto ‘H’ y sus valores
asociados para el filtro dado. Esta lista de propiedades del filtro ‘H’ incluirá tanto las
modificables como las no modificables que aún no estarán disponibles.

La implementación en punto fijo de los distintos tipos de filtros pasa por una cuantización de los
datos como de los coeficientes del filtro. Los datos al ir continuamente cambiando van a ser
cuantizados en distintas partes de los filtros, teniendo entonces propiedades asociados a los
datos de entrada al filtro, a la salida del filtro, al resultado de las multiplicaciones y sumas, etc....
En cambio los coeficientes son cuantizados una vez al ser fijos y no variar durante la
implementación del filtro.

El efecto de la cuantización sobre los datos y sobre los coeficientes es distinto y por tanto deben
ser tratados de distinta forma. En los siguientes subapartados se hace una presentación de las
propiedades asociadas a los coeficientes, señal de entrada, señal de salida, etc.. asociadas al
objeto ‘dfilt’ que describe el filtro en punto fijo. De cada propiedad se dará una descripción, y
de las más interesantes se adjuntará un ejemplo.

2.5.1 Propiedades del objeto ‘dfilt’ asociadas al formato de representación


de los coeficientes

‘CoeffWordLength’
Determina la longitud de la palabra usada para almacenar los coeficientes del filtro.
Cualquier valor entero positivo, establecido por defecto a 16 bits.

‘NumFracLength’
Determina la longitud de la fracción usada para la representación de los coeficientes. No estará
disponible hasta que no se establezca la propiedad ‘CoeffAutoScale’ al valor ‘false’.
Puede tomar cualquier valor entero positivo o negativo, por defecto tendrá 14 bits.

‘CoeffAutoScale’

Como el filtro represente sus coeficientes dependerá del valor de la propiedad ‘CoeffAutoScale’.
Cuando se crea un objeto ‘dfilt’, se usan coeficientes que están en formato de doble precisión.
Convertir el objeto ‘dfilt’ a un aritmética en punto fijo fuerza a que los coeficientes tenga que ser
representados también en punto fijo. Sus posibles valores ‘true’ o ‘false’.

‘CoeffAutoScale’ = ‘true’ ‘CoeffAutoScale’ = ‘false’

Cuantización de los coeficientes de manera Cuantización de los coeficientes de manera


automática. manual.
El filtro asigna automáticamente la longitud de Se deshabilita el escalado automático de la
la fracción (‘CoeffFracLength’) en función de longitud de la fracción de los coeficientes y
la longitud de la palabra (‘CoeffWordLength’) por tanto se permite que la propiedad que
con el fin de mantener el valor de los maneja esta longitud de fracción,
coeficientes lo más cercano posible a sus ‘CoeffFracLength’, pueda ser modificada.
valores en doble precisión, sin que ocurra
desbordamientos.

Tabla 2. 5 Propiedad ‘CoeffAutoScale’

Coeficientes de referencia para filtros en punto fijo


Cuando se establece la propiedad ‘arithmetic’ al valor ‘fixed’, es decir se lleva a cabo la
cuantización, los coeficientes del filtro en punto fijo que se obtienen son aproximaciones de los
coeficientes en doble precisión originales. Estas aproximaciones pueden llegar a ser exactas
dependiendo del formato de representación que se tenga en la implementación del filtro. Si se
tiene la suficiente precisión en el formato se podrá llegar a almacenar en punto fijo los valores
exactos de los coeficientes en punto flotante. Por otro lado, si la precisión proporcionada en
punto fijo no es la suficiente, los valores almacenados diferirán de los originales.

Los filtros cuantizados almacenan tanto los coeficientes cuantizados que resultan del cambio de
la propiedad ‘Arithmetic’ como los coeficientes de referencia, que son lo que se tenían antes de
la cuantización y que estaban almacenados en punto flotante de doble precisión. Se puede
acceder tanto a un tipo de coeficiente como a otro desde la línea de comando.

Ejemplo 1

En la creación de cualquier filtro, se encontrará la propiedad ‘CoeffAutoScale’ inicializada al


valor ‘true’ por defecto.

Al cambiar el valor de la propiedad ‘CoeffAutoScale’ al valor ‘false’, la propiedad


‘NumFracLength’ se hará visible y por tanto modificable.

hd.CoeffWordLength
ans =
16
f = [0 0.6 0.6 1]; m = [1 1 0 0];
hd.NumFracLength
b = fir2(5,f,m);
ans =
16
hd = dfilt.dffir(b);
hd.CoeffWordLength = 24;
hd.arithmetic='fixed';
hd.NumFracLength
ans =
hd. Numerator
24
ans =
-0.0101 0.0262 0.4695 0.4695
hd.CoeffAutoScale= false;
0.0262 -0.0101
hd.numfraclength=15;
hd.coeffwordlength=5;

hd.numerator
ans =
1.0e-003 *
-0.4883 0.4578 0.4578 0.4578
0.4578 -0.4883

Cuadro 2. 1 Ejemplo propiedad ‘CoeffAutoScale’

En el ejemplo se observar como al estar la propiedad ‘CoeffAutoScale’ al valor ‘true’,


‘numFracLength’ se inicializa automáticamente en función del valor que tenga
‘CoeffWordLength’ con el fin de representar los coeficientes con la mejor precisión posible.

Con la propiedad ‘CoeffAutoScale’ al valor ‘false’ se tiene acceso a la propiedad


‘numFraclength’ y por tanto es modificable su valor. En este caso del ejemplo, se cambia la
longitud de la palabra de coeficiente a 5 bits y la longitud de la fracción a 15 bits, es decir se
establece un formato de representación [5 15] para los coeficientes del filtro. Se observa
entonces que los valores que presentan los coeficientes distan bastante de los que se tenían
inicialmente.
Ejemplo 2

En el Cuadro 2. 2 se muestra como trabajar con los coeficientes de referencia. Para ello se usa
la función ‘reffilter’, que permite obtener los coeficientes de referencia del filtro original de
doble precisión.

En el ejemplo se empieza creando un filtro inicialmente en punto flotante en forma directa,


llamado ‘hd’. Después se cuantiza para pasarlo a punto fijo.

b=fir1(5,0.45);
hd = dfilt.dffir(b);
hd.numerator
ans =
-0.0044 0.0808 0.4235 0.4235 0.0808 -0.0044

hd.arithmetic='fixed';
hd.numerator
ans =
-0.0044 0.0808 0.4235 0.4235 0.0808 -0.0044

set(hd,'coeffWordLength',14');
hd.numerator
ans =
-0.0044 0.0808 0.1250 0.1250 0.0808 -0.0044

hdref=reffilter(hd)
hdref =
FilterStructure: 'Direct-Form FIR'
Arithmetic: 'double'
Numerator: [-0.0044 0.0808 0.4235 0.4235 0.0808 -0.0044]
ResetBeforeFiltering: 'on'
States: [5x1 double]
NumSamplesProcessed: 0

Cuadro 2. 2 Coeficientes de referencia


Se observa como inicialmente, los coeficientes del filtro en punto fijo son exactamente iguales a
los coeficientes en punto flotante, ya que su formato de representación ofrece el número de bits
suficiente para representar exactamente los valores iniciales.

Posteriormente se cambia la longitud de la palabra del filtro usado para representar los
coeficientes y la se establece a un valor de ‘14’, obteniéndose en este caso valores distintos para
algunos coeficientes del filtro.

Una vez cambiado el valor de los coeficientes del filtro ‘hd’, se puede usar la función ‘reffilter’
para obtener de nuevo los coeficientes de referencia como se puede observar en el Cuadro 2.2.
El filtro ‘hdref‘obtenido será el filtro original en punto flotante de doble precisión del que se
partió, con los coeficientes de referencia originales.
2.5.2 Propiedades del objeto ‘dfilt’ asociadas al formato de
representación del resultado de sumas, productos y etapas.

‘AccumWordLength’
Longitud de la palabra usada para almacenar los resultados del acumulador.
Cualquier valor entero positivo de bits, tomando por defecto el valor 40. Resultados
de
‘AccumFracLength’ sumas
Longitud de la fracción usada para interpretar el dato de salida del acumulador.
Se podrá cambiar el valor de esta propiedad después de establecer la propiedad
‘AccumMode’ al valor ‘SpecifyPrecision’.
Cualquier valor entero positivo o negativo de bits, tomando por defecto el valor 29.
Cuadro 2. 3 Propiedades asociadas con las sumas

‘ProductWordLength’
Longitud de la palabra usada para almacenar los resultados de las operaciones de
multiplicación.
Resultados Puede tomar valores positivos de bits. Por defecto toma valores de 16 ó 32 dependiendo
de del tipo de estructura usada en el filtro.
productos.
‘ProductFracLength’
Longitud de la fracción usada para interpretar el dato numérico del resultado de las
operaciones de multiplicación. Se podrá cambiar el valor de esta propiedad después de
establecer la propiedad ‘ ProductMode’ al valor ‘SpecifyPrecision’.
Puede tomar valores enteros positivos o negativos de bits. Por defecto toma el valor de 29.

Cuadro 2. 4 Propiedades asociadas con los productos

‘TapSumWordLength’
Longitud de la palabra que se usa para representar la etapa del filtro durante la suma
Los filtros FIR simétricos y antisimétricos son los que incluyen esta propiedad.
Puede tomar valores enteros positivos de bits. Por defecto toma el valor de 17.
Etapas de
‘TapSumFracLength’ un filtro
Longitud de la fracción usada para representar los valores de una etapa del filtro en FIR
operaciones de suma. Para poder modificar esta propiedad se tiene que establecer la
propiedad ‘TapSumMode’ a ‘SpecifyPrecision’.
Los filtros FIR simétricos y antisimétricos son los que incluyen esta propiedad.
Cualquier valor entero positivo o negativo de bits. Por defecto toma el valor de 15.

Cuadro 2. 5 Propiedades asociadas con las etapas de un filtro FIR

2.5.3 Propiedades aritméticas asociadas al objeto ‘dfilt’

‘Arithmetic’
Quizás la propiedad más importante cuando se trabaja con objetos ‘dfilt’ es la propiedad ‘Arithmetic’.
Esta propiedad determina el tipo de aritmética que el filtro usa.
La propiedad ‘Arithmetic’ puede tomar como valores las cadenas dadas en la Tabla 2. 6.

La Tabla 2. 6 muestra, para cada posible valor de la propiedad ‘Arithmetic’, información de lo


que ocurrirá cuando se seleccione un valor u otro.

Valores Descripción del efecto sobre el filtro

Double Con el valor ‘double’ se especifica que el filtro va a usar aritmética de doble precisión en
punto flotante para todas las operaciones realizadas durante el filtrado.
Los coeficientes, datos de entrada al filtro deben ser de tipo doble, así como los estados y
salidas del filtro.

Cuando se usa este tipo de dato, los coeficientes del filtro de referencia y los cuantizados
son idénticos.
‘double’ es el valor por defecto para la propiedad ’Arithmetic’.

Con este valor toda la aritmética que se lleva a cabo en el proceso de filtrado se ve
restringida al tipo de dato en punto flotante y precisión simple.

Los datos de entrada deben ser datos en formato simple ya que otro tipo de dato nos daría
error. Los estados del filtro así como sus salidas también tienen que venir dados como datos
de tipo simple.
Single
Los coeficientes del filtro pueden venir dados de dos maneras:
 Coeficientes de tipo flotante pero de precisión doble, que con la propiedad
‘Arithmetic’ establecida a ‘single’ hará que el filtro convierta los datos a tipo
simple.
 Coeficientes en tipo simple, en cuyo caso permanecerán inalterables cuando los
use el filtro.

El objeto ‘dfilt’ usa aritmética en punto fijo. Se usan objetos en punto fijo (objetos ‘fi’)
para manejar la información con la que trabaja el filtro, coeficientes, entradas, estados etc..

Cuando se trabaja con aritmética en punto fijo, tendremos propiedades asociadas a la


longitud de la palabra y a la longitud de la fracción para cada una de las porciones del
filtro. El variar el valor de estas propiedades permitirá controlar la manera que tiene el filtro
de realizar el filtrado.

No se puede mezclar aritmética en punto fijo y aritmética en punto flotante.

Fixed ‘fixed’ no permite el uso de datos sin signo, exceptuando los coeficientes sin signo cuando
se especifica la propiedad ‘Signed’ a ‘false’.

Cuando se trabaja con aritmética en punto fijo, se suponen una serie de factores:
 Longitud de palabra fija
 Registros acumuladores y para el producto de tamaño fijo y dedicados.

El suponer esto simplifica el trabajo de crear filtros en punto fijo mediante la reducción de
los procesos de construcción repetitivos, tales como por ejemplo pedir que se introduzca el
tamaño de la palabra del acumulador una sola vez, en vez de introducirlo para cada paso de
ejecución que use el acumulador.

Tabla 2. 6 Valores propiedad ‘Arithmetic’


El valor de la propiedad ‘Arithmetic’ determina el tipo de dato que el filtro en tiempo discreto
va a manejar en las distintas áreas significativas del filtro. Estos datos pueden originalmente
venir dado en varios formatos que son los que siguen:
 Punto flotante de precisión doble
 Punto flotante de precisión simple
 Enteros con signo (int*)
 Enteros sin signo (uint*)
 Objetos ‘fi’
Todos los valores que se pueden establecer para la propiedad ‘Arithmetic’ (‘double’, ‘single’ o
‘fixed’), soportan estos tipos para los datos de entrada, estados y coeficientes. La propiedad
‘Arithmetic’ determina a que formato convertir cada uno de estos tipos para trabajar en la
realización del filtro.

‘CastBeforeSum’
Esta propiedad determina como el filtro maneja los valores de entrada en las operaciones de suma. Sus
posibles valores son ‘true’ y ‘false’.

‘CastBeforeSum’ = ‘true’ ‘CastBeforeSum’ = ‘false’

Convierte el formato de los operandos al formato Los operandos mantienen el formato que traían
de la salida de la suma antes de llevar a cabo la de operaciones anteriores y son convertidos tras
operación de suma. realizar la suma.
Realizar la conversión antes de sumar los En este caso se tienen menos operaciones de
sumandos añade uno o dos operaciones de cuantización que en el caso anterior.
cuantización adicionales que pueden añadir Hay que elegir los formatos de entrada para
fuentes de error a los resultados de nuestro filtro. obtener la mayor exactitud en los resultados de
las sumas.

Diagramas del establecimiento de ‘CastBeforeSum’

La suma de los elementos viene representada La suma de los elementos en el filtro viene
por el siguiente diagrama: representado en el siguiente diagrama:

Cast AccumFormat AccumFormat


+ +
AccumFormat

AccumFormat
Cast
Muestra que los datos de entrada en las
operaciones de suma, es decir los sumandos,
Muestra que los datos de entrada se obtienen mantienen su formato, longitud de palabra y
de convertir al formato de salida cada uno de longitud de fracción, de operaciones
los sumandos antes de realizar la operación de anteriores. El proceso de suma usa el formato
suma. existente en las entradas, después se
El valor de salida de la operación de suma convierten al formato de salida definido por
tendrá una longitud de palabra y longitud de ‘AccumFormat’. El dato de salida tiene su
fracción definidas por ‘AccumWordLength’, longitud de palabra y longitud de fracción
‘AccumFracLength’ y ‘AccumMode’. definidas por ‘AccumWordLength’,
‘AccumFracLength’ y ‘AccumMode’.

Tabla 2. 7 Propiedad ‘CastBeforeSum’


‘Signed’
Especifica si los coeficientes del filtro en punto fijo tienen o no tienen signo.
Sus valores posibles son ‘true’ o ‘false’.

‘TapSumMode’
Especifica como el acumulador almacena las salidas de las operaciones de suma que
involucran las etapas del filtro FIR. Resultado de
Como valores posibles se tiene ‘FullPrecision’, ‘KeepLSB’, ‘KeepMSB’, y sumas de las
‘SpecifyPrecision’. etapas de
Los filtros FIR simétricos ( dfilt.dfsymfir ) y antisimétricos ( dfilt.dfasymfir ) son los que filtros FIR
incluyen esta propiedad.
Toma como valor por defecto el valor ‘KeepMSB’.
Cuadro 2. 6 Propiedades de las etapas del filtro FIR

‘ AccumMode’ y ‘ProductMode’

Resultado Ambas propiedades estarán disponibles cuando se establezca aritmética en punto fijo.
de sumas y Determina como el acumulador y el multiplicador respectivamente almacenan el resultado
productos obtenido de las operaciones aritméticas que llevan a cabo sumas y productos.
Los valores que puede tomar son ‘FullPrecision’, ‘KeepMSB’, ‘KeepLSB’ y
‘SpecifyPrecision’.
Cuadro 2. 7 Propiedades asociadas con sumas y productos

En la Tabla 2. 8 que se muestra a continuación se describen los valores que pueden tomar las
propiedades definidas previamente en los

Valores asociados a ‘ AccumMode’ , ‘ProducMode’ y ‘TapSumMode’

‘FullPrecision’: El filtro escoge automáticamente la longitud de la fracción y la longitud de la


palabra que se usará para representar los resultados de las operaciones de suma y multiplicación.
Con esto se busca asignar espacio suficiente que evite eliminar bits del resultado, de manera que
se evitan desbordamientos.

Cuando se cambia a aritmética en punto fijo, puede ocurrir que al llevar a cabo sumas o
multiplicaciones se tengan que eliminar algunos de los bits del resultado porque el acumulador o
multiplicador trabaje con más bits de los que el filtro usa para la representación interna.
Se puede entonces elegir eliminar los bits menos significativos o más significativos del resultado.

‘KeepMSB’: El filtro establece automáticamente la longitud de la fracción para eliminar los LSBs
del resultado.
‘KeepLSB’: El filtro establece automáticamente la longitud de la fracción para eliminar los
MSBs del resultado.

En ambos casos el usuario debe especificar la longitud de la palabra usada para representar los
resultados de la sumas y de los productos, definiendo los valores de las propiedades
‘accumWordLength’ y ‘ProducWordLength’ respectivamente.
Eliminar los LSB del resultado tiene la ventaja de que el error de cuantización que se originará será
menor ya que estos bits son los que tienen menor peso en la palabra. Se elige eliminar los MSB
cuando estos bits sean valores pequeños en comparación con el rango que el formato puede
representar.

‘SpecifyPrecision’: Con esta opción se debe especificar tanto la longitud de la palabra como la
longitud de la fracción para almacenar los datos obtenidos a la salida del acumulador y del
multiplicador.

El valor ‘KeepMSB’ será el valor tomado por defecto por ‘TapSumMode’ y ‘AccumMode’. Para
‘ProductMode’ el valor por defecto será ‘Fullprecision’

Cuadro 2. 6 y Cuadro 2.7.


Tabla 2. 8 Valores asociados a propiedades de sumas y productos
Ejemplo

Como se ha comentado, muchas operaciones aritméticas necesitan más bits para representar el
resultado que los necesarios para representar cualquiera de los dos operandos, sea se el caso de
la multiplicación, donde el multiplicar dos números de N bits requiere de 2N bits para
representar el resultado perfectamente.

El establecer el valor ‘FullPrecision‘ para estas dos propiedades permite evitar la pérdida de
precisión y desbordamientos durante el filtrado manteniendo todos los bits del resultado, este
valor es el asignado por defecto para las propiedades ‘ProductMode’ y ‘AccumMode’.

En cambio cuando no se puedan mantener todos los bits del resultado, debido a que es muy
costoso o no siempre es necesario en algunas aplicaciones, se debe llevar a cabo una
cuantización con la consecuente introducción de error.
En el Cuadro 2. 8 se muestra el diseño del filtro FIR usando estructura en forma directa. En él se
establece el modo de operación para las sumas y los productos al valor ‘FullPrecisión’.

hd.ProductMode= 'FullPrecision';
hd.ProductWordLength
hd.ProductFracLength
b = fir1(101, .45,
ans =
'low', kaiser(102, 7.8573));
32
hd = dfilt.dffir(b);
ans =
31
set(‘Arithmetic’,’fixed’);
hd.AccumMode = 'FullPrecision';
hd.AccumWordLength
hd.AccumFracLength
ans =
40
ans =
31

Cuadro 2. 8 Diseño de filtro FIR


El valor asignado a la palabra del multiplicador ‘ProductWordLength’ viene del hecho de que el
multiplicador, como previamente se comentó, necesita un registro para almacenar las
multiplicaciones cuyo tamaño sea al menos el doble del tamaño usado para los coeficientes del
filtro (‘CoeffWordLength’) o el doble del tamaño de la entrada (‘InputWordLength’). Al tener
registros para los coeficientes de 16 bits, el tamaño del acumulador será de 32 bits.

Al tamaño de la palabra que contiene las sumas, ‘AccumWordLength’, se le asignan más bits
de los 32 asignados a ‘ProductWordLength’. Estos bits adicionales reciben el nombre de bits de
guardia y permiten que crezca la cantidad si es necesario durante los procesos de suma.

Gracias a la información que se tiene sobre el número de bits asignados a la parte de la fracción
de la palabra que almacena los productos (‘ProductFracLength’) como de los bits asignados a la
parte de la fracción de la palabra que almacena las sumas (‘AccumFraclength’), se puede
determinar la posición del punto binario de cada uno de los registros.

Los valores de los distintos registros que se han comentado y visto en el Cuadro 2. 8 anterior
vienen dados por defecto y son los que permiten que el filtro trabaje de manera más exacta.

2.5.4 Valores de entrada y salida del filtro


‘InputWordLength’
La longitud de la palabra que se usa para representar los datos de entrada del filtro.
Valores de
Cualquier valor entero positivo de bits, cuyo valor por defecto es 16.
entrada del
filtro
‘InputFracLength’
Determina la longitud de la fracción que el filtro usa para interpretar los datos que van a
ser procesados por el filtro.
Cualquier valor entero positivo o negativo de bits, cuyo valor por defecto es 15

Cuadro 2. 9 Propiedades de entrada y salida del filtro

‘OutputWordLength’
Determina el tamaño de la palabra usado para los datos filtrados.
Cualquier valor entero positivo de bits, por defecto establecido a 16.

‘OutputFracLength’
Determina como el filtro debe interpretar los datos filtrados.
Se podrá cambiar el valor de ‘OutputFracLength’ después de establecer la propiedad
‘OutputMode’ al valor ‘SpecifyPrecision’.
Cualquier valor entero positivo o negativo de bits, por defecto toma el valor de 15 ó 12 bits
Valores de dependiendo de la estructura del filtro.
salida del
filtro ‘OutputMode’
Establece el modo que usa el filtro para escalar los datos de salida del filtro. Puede tomar
varios valores:
 ‘AvoidOverflow’: El filtro establece automáticamente la longitud de fracción del
dato de salida para evitar el desbordamiento.
 ‘BestPrecision’: El filtro establece automáticamente la longitud de la fracción de
los datos de salida para representar con la mejor precisión posible los datos de
salida.
 ‘SpecifyPrecision’: Esta opción permite establecer la longitud de la fracción usada
para los datos filtrados.

Todos los filtros suelen presentar esta propiedad, salvo los filtros en forma directa I que
toman el formato de salida directamente de los estados del filtro.

Cuadro 2. 10 Propiedades asociadas a la salida del filtro

2.5.5 Propiedades del objeto ‘dfilt’ asociadas a los estados del filtro.

Los valores para los estados del filtro se almacenan en la propiedad ‘States’.

Los filtros digitales son sistemas dinámicos y su comportamiento dependerá de las entradas del
sistema (estímulos) y de los estados actuales o anteriores, luego se puede decir que el sistema
tiene una memoria.

Los filtros usan los estados para calcular la salida del filtro para cada una de las muestras de la
entrada. La manera de poder usar los estados de los filtros entre iteraciones es el uso de bucles.
Todos los filtros digitales en punto fijo o en punto flotante de doble precisión, también los
filtros analógicos, tiene estados. Pero no todos permiten modificar la representación de los
estados, es decir la longitud de la palabra y la longitud de la fracción usada para su
representación.

El valor para las condiciones iniciales de los estados es cero, lo que quiere decir que el filtro
dinámico está descansando y en ese momento no tendrá ningún efecto aritmético. Este será el
valor que se encuentre la primera muestra de la señal de entrada.

El número de estados será un número menor que el número de coeficientes del numerador y del
denominador.

Estos estados pueden ser valores de tipos diversos. Los más interesantes en el estudio de filtros
en punto fijo serán los estados representados mediante objetos ‘fi’, con sus propiedades
asociadas.
‘States [1x1 embedded fi]’
Contiene el número y tipo de los estados del filtro antes, durante y después de las operaciones de
filtrado. En este caso el estado vendrá dado por un objeto ‘fi’

‘StateWordLength’
Establece el valor de la longitud de la palabra usada para representar los estados del filtro.
Cualquier entero positivo de bits. Por defecto tiene el valor de 16.

‘StateFracLength’
Permite establecer la longitud de la fracción para interpretar los estados del filtro.
Cualquier valor entero positivo o negativo de bits. Por defecto tiene valor de 15.

Las siguientes estructuras de filtros son las que no proporcionan el control de la longitud de la
palabra que almacenan los estados: df1, dfasymfir, dffir, dfsymfir 1. Para éstas el filtro deriva el
formato del estado del formato del valor de entrada que se elija para el filtro, exceptuando para
el caso del filtro ‘df1’ IIR, en cuyo caso el formato del numerador del estado viene del formato
de la entrada y el formato del denominador del estado viene del formato de la salida del filtro.

Las otras estructuras de los filtros permiten el control del formato del estado directamente.

‘StateAutoScale’
Aunque todos los filtros usan estados, no todos permiten que el filtro automáticamente escale el valor
del estado para evitar errores aritméticos. Esta propiedad entonces puede tener los siguientes valores:

- ‘StateAutoScale’ = ‘true’: El filtro escoge una longitud de la fracción para mantener el valor
de los estados lo más cercano posible a los valores de precisión doble.
Cuando se cambien la longitud de la palabra aplicada a los estados ( en la estructura de filtro
que nos lo permita), el objeto del filtro cambiará la longitud de la fracción para intentar
acomodar el cambio. Su valor por defecto será ‘true’
- ‘StateAutoScale’ = ‘false’: Deshabilita el escalado automático de la longitud de la fracción
para los estados y permite que la propiedad que controla la longitud de la fracción de los
coeficientes entre etapas puede ser modificado.

Son las siguientes estructuras de filtros las que proporcionan la propiedad ‘StateAutoScale’:
df1t, df1tsos, df2t, df2tsos, dffirt.

Ejemplo

Se muestra en el Cuadro 2.11 y 2.12 como afecta el tipo de dato establecido a los estados.

1
Algunos de estas estructuras están asociadas a filtros IIR. Ver anexo V
b = ellip(6,3,50,300/500);
hd=dfilt.dffir(b) hd.states

hd = ans =
FilterStructure: 'Direct-Form FIR'
Arithmetic: 'double' 0
Numerator: [0.0773 0.2938 0.5858 0.7239 0
0.5858 0.2938 0.0773] 0
ResetBeforeFiltering: 'on' 0
States: [6x1 double] 0
NumSamplesProcessed: 0 0
Cuadro 2. 11 Propiedad ‘states’
En la visualización de las propiedades de un objeto ’dfilt’, la propiedad de ‘states’ devolvía
datos en punto flotante al trabajar con filtros en punto flotante. En cambio tenía asociado
objetos ‘fi’ a los estados al trabajar con filtros en punto fijo.

hd.arithmetic='fixed'
hd = hd.states
FilterStructure: 'Direct-Form FIR' ans =
Arithmetic: 'fixed'
Numerator: [0.0773 0.2938 0.5858 0
0.7239 0.5858 0.2938 0.0773] 0
ResetBeforeFiltering: 'on' 0
States: [1x1 embedded.fi] 0
NumSamplesProcessed: 0 0
0
CoeffWordLength: 16
CoeffAutoScale: 'on' DataType: Fixed
Signed: 'on' Scaling: BinaryPoint
Signed: true
InputWordLength: 16 WordLength: 16
InputFracLength: 15 FractionLength: 15

OutputWordLength: 16 RoundMode: round


OutputMode: 'AvoidOverflow' OverflowMode: saturate
ProductMode: FullPrecision
ProductMode: 'FullPrecision' MaxProductWordLength: 128
SumMode: FullPrecision
AccumMode: 'KeepMSB' MaxSumWordLength: 128
AccumWordLength: 40 CastBeforeSum: true
CastBeforeSum: 'on'

RoundMode: 'convergent'
OverflowMode: 'wrap'

Cuadro 2. 12 Propiedad ‘states’


En el caso de filtros en punto fijo, los estados vienen dados por:

States: [101x1 embedded.fi]

Se puede ver como los filtros en punto fijo dependen en gran parte de los objetos en punto fijo
que se definían y con los que se trabajaba en la herramienta en punto fijo. En este caso, la
propiedad ‘States’ permite usar un objeto ‘fi’ para definir como el filtro interpreta los estados
del filtro.
2.5.6 Desbordamiento y redondeo asociados al objeto ‘dfilt’

‘RoundMode’
Establece el modo en el que el filtro cuantiza los valores numéricos. Puede tomar varios
valores:
 ‘convergent’: Redondea hacia el valor entero más cercano en cualquier dirección.
En caso de empate, se redondea hacia el entero par más cercano.
 ‘ceil’: Redondea hacia el valor cuantizado representable más cercano por arriba.
Redondeo  ‘fix’: Redondea hacia el valor representable entero más cercano en la dirección
del cero.
 ‘floor’: Redondea hacia abajo cogiendo el valor representable cuantizado más
cercano.
 ‘round’: Redondea hacia el valor cuantizable más cercano. Si se tiene que el
número está justo en la mitad de dos valores cuantizables, los valores serán
redondeados hacia el valor de arriba.

Cuadro 2. 13 Redondeo
.
‘OverflowMode’
Establece como el filtro responde al desbordamiento en condiciones de aritmética en punto
fijo. Desbordami
Sus posibles valores son ‘saturate’ que limita la salida a los valores representables máximos ento
y mínimos del rango representable, o ‘wrap’ que establece los valores desbordados al valor
más cercano representable usando aritmética en módulo.

Cuadro 2. 14 Desbordamiento

2.5.7 Propiedades varias asociadas a los objetos ‘dfilt’

‘NumSamplesProcessed’
Cuando la propiedad ‘ResetBeforeFiltering’ está establecida al valor ‘on’ indica el número de muestras
filtradas para cada uno de los datos de entrada establecidos. Estableciendo la propiedad al valor ‘off’ de
lo que informará será del número total de muestras procesadas para todos los datos establecidos, no de
cada uno.
Empieza desde 0 muestras y va creciendo hasta el número de muestras procesadas por el filtro.

‘ResetBeforeFiltering’
Especifica si reseteamos el estado del filtro y la memoria antes de cada operación de filtrado. Puede
tomar valores ‘true’ o ‘false’

‘FilterStructure’
Cada objeto ‘dfilt’ tiene asociada una propiedad denominada ‘FilterStructure’ que determina la forma
de implementación del filtro, incluyendo todos los elementos activos que realizan operaciones durante
el filtrado, como puede ser ganancias, retrasos, sumas, productos, salidas y entradas.
Esta es una propiedad de solo lectura, es decir que una vez creado el objeto del filtro, no se puede
modificar el valor de 8su propiedad ‘FilterStructure’ asociada. Además no tiene valor por defecto, se
debe inicializar ya que al intentar definir un filtro sin estructura, MATLAB nos devolverá un error.
Sus posibles valores se vieron en la Tabla 2. 3

Ejemplo

En la
Figura 2. 1 se podrá ver el flujo que la señal sigue en la realización del filtro FIR de segundo
orden usando una estructura en forma directa.

Estructura en forma directa de un filtro FIR

InputFormat ProductFormat AccumFormat AccumFormat


OutputFormat

Input b1 + +

Output
Cast z-1 NumFormat Cast

ProductFormat
b2
NumFormat
z-1

ProductFormat
b3
NumFormat

Figura 2. 1 Filtro FIR en forma directa


Los distintos procesos de cuantización que tienen lugar a lo largo de la implementación del
filtro estarán especificados mediante etiquetas de formato, como se puede observar en la
Figura 2. 1. Estas etiquetas, que tienen la forma ‘labelformat’, indican la existencia de un
proceso de cuantización en ese punto de la estructura.

El ‘format’ responde al formato usado para la representación del número en punto fijo, luego
dicho formato está compuesto por la longitud de la palabra y la longitud de la fracción. ‘label’
responde al dato sobre el que se está efectuando la cuantización. Por ejemplo, las etiquetas:

 ‘Inputformat’: Cuantización aplicada a los datos de entrada del filtro en la posición


donde está situada la etiqueta. Se refiere a las propiedades del filtro ‘InputWordLength’
y ‘InputFracLength’

 ‘Outputformat’: Cuantización aplicada a los datos de salida del filtro en la posición


donde está situada la etiqueta. Se refiere a las propiedades del filtro
‘OutputWordLength’ y ‘OutputFracLength’
etc....

Donde quiera que aparezca un elemento del filtro en la estructura que se esté usando no hay que
olvidar el proceso de cuantización que acompaña a cada uno de estos elementos, como se puede
observar en la
Figura 2. 1. En ella se observa como la cuantización del producto del coeficiente por la entrada
viene seguida por la cuantización de la suma. La cuantización de los productos y sumas
vendrán definidas por las etiquetas ‘ProductFormat’ y ‘AccumFormat’ respectivamente.

Los coeficientes aparecen etiquetados como b(i), con i = 1, 2, 3, para indicar el orden en el que
filtro procesa los datos.
Se tienen numerosas estructuras para crear filtros cuantizados. Debido a que la cuantización es
un proceso no lineal, dependiendo de la estructura que se aplique se tendrán unos efectos de
cuantización u otros, como ya en un apartado previo se comentó. Pero todas las estructuras se
pueden representar mediante un diagrama como el anterior, que muestre el formato de los
elementos que definen la cuantización que se lleva a cabo a lo largo del flujo del filtro.

2.6 Conclusiones capítulo 2

En este segundo capítulo se ha presentado la herramienta de diseño de filtros de MATLAB con


sus distintos objetos asociados.

El objeto ‘dfilt’ ha sido la gran novedad del capítulo. A lo largo de éste se han ido definiendo
las distintas propiedades asociadas a dicho objeto y relacionadas con la implementación de
filtros FIR.

Se han adjuntado diversos ejemplos junto con la definición de las propiedades, con el fin de
ayudar a la asimilación de los nuevos conceptos.

Aunque resulta un capítulo bastante teórico y tedioso, resulta una introducción útil para
comprender el diseño de filtros en punto fijo sobre una FPGA que se llevará a cabo en capítulos
posteriores.

You might also like