1. herramienta en punto fijo -...

26
Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ 1. HERRAMIENTA EN PUNTO FIJO 1.1 Introducción La herramienta en punto fijo proporciona a MATLAB la posibilidad de trabajar con datos en punto fijo además de permitir el uso de la aritmética en punto fijo para el desarrollo de algoritmos. Esta herramienta de MATLAB será la base para el diseño de filtros en punto fijo, en el que se entrará en apartados posteriores. La herramienta en punto fijo permite trabajar con los siguientes tipos de objetos: - ‘fi’ : Define un objeto numérico en punto fijo. Cada objeto ‘fi’ está compuesto por el valor del dato, un objeto ‘fimath’ y un objeto ‘numerictype’. - ‘fimath’ : Define las propiedades aritméticas asociadas a los objetos ‘fi’ y gobierna como los operadores aritméticos trabajan ante desbordamientos y/o redondeos. - ‘fipref’: Permite la visualización de los objetos ‘fi’ - ‘numerictype’ : Define el tipo de dato y escala los atributos del objeto ‘fi’ - ‘quantizer’: Establece la características de cuantización deseadas para el procesado de los datos. Cada uno de estos objetos será tratado en los siguientes subapartados. 1.1.1 Representación de datos en punto fijo. En hardware digital, los números son almacenados en palabras binarias. Como los componentes hardware y las funciones software interpreten estas secuencia de 1’s y 0’s dependerá del tipo de dato definido. Los números binarios pueden venir representados bien usando formato en punto fijo, o bien usando formato en punto flotante. Estos dos tipos de representación darán lugar correspondientemente, al tipo de dato en punto fijo o al tipo de dato en punto flotante. La aritmética en punto fijo viene definida por las siguientes dos longitudes, que serán las que fijen como representar los números en punto fijo: - Longitud de la palabra: Tamaño de la palabra en bits usado para la representación, cuyo valor será un entero positivo. - Longitud de la fracción: Tamaño en bits de la parte fraccional del número, puede ser tanto un entero positivo como negativo. En la Figura 1.1 se muestra el esquema general de representación de un número usando formato en punto fijo para su representación: ___________________________________________________________________ 1

Upload: phamdien

Post on 24-Sep-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________

1. HERRAMIENTA EN PUNTO FIJO 1.1 Introducción La herramienta en punto fijo proporciona a MATLAB la posibilidad de trabajar con datos en punto fijo además de permitir el uso de la aritmética en punto fijo para el desarrollo de algoritmos. Esta herramienta de MATLAB será la base para el diseño de filtros en punto fijo, en el que se entrará en apartados posteriores. La herramienta en punto fijo permite trabajar con los siguientes tipos de objetos:

- ‘fi’ : Define un objeto numérico en punto fijo. Cada objeto ‘fi’ está compuesto por el valor del dato, un objeto ‘fimath’ y un objeto ‘numerictype’.

- ‘fimath’ : Define las propiedades aritméticas asociadas a los objetos ‘fi’ y gobierna como los operadores aritméticos trabajan ante desbordamientos y/o redondeos.

- ‘fipref’: Permite la visualización de los objetos ‘fi’ - ‘numerictype’ : Define el tipo de dato y escala los atributos del objeto ‘fi’ - ‘quantizer’: Establece la características de cuantización deseadas para el procesado de

los datos. Cada uno de estos objetos será tratado en los siguientes subapartados. 1.1.1 Representación de datos en punto fijo. En hardware digital, los números son almacenados en palabras binarias. Como los componentes hardware y las funciones software interpreten estas secuencia de 1’s y 0’s dependerá del tipo de dato definido. Los números binarios pueden venir representados bien usando formato en punto fijo, o bien usando formato en punto flotante. Estos dos tipos de representación darán lugar correspondientemente, al tipo de dato en punto fijo o al tipo de dato en punto flotante. La aritmética en punto fijo viene definida por las siguientes dos longitudes, que serán las que fijen como representar los números en punto fijo:

- Longitud de la palabra: Tamaño de la palabra en bits usado para la representación, cuyo valor será un entero positivo.

- Longitud de la fracción: Tamaño en bits de la parte fraccional del número, puede ser tanto un entero positivo como negativo.

En la Figura 1.1 se muestra el esquema general de representación de un número usando formato en punto fijo para su representación:

___________________________________________________________________

1

Page 2: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________

MSB punto binario LSB

b0b1b2........... bw-2bw-1

Figura 1.1 Formato de representación en punto fijo

En base a este esquema general y a la definición dada anteriormente, se denota como longitud de la fracción al número de bits entre el LSB y el punto binario, siendo en este caso particular de ‘3’ bits. Por otro lado, la longitud de la palabra será de ‘w’ bits. En la representación en punto fijo la codificación del número en binario puede ser efectuada bien en CA1, CA2, Signo-magnitud 1

1.1.1.1 Punto fijo en MATLAB En MATLAB, la herramienta en punto fijo va a hacer uso del formato en punto fijo para la representación de los datos con los que trabaje, usando la notación mostrada a continuación para especificar los valores asociados a dicha representación: [longitud palabra longitud fracción] En cuanto al tipo de codificación usada por esta herramienta, se tendrá la codificación CA2. Se definió con anterioridad la longitud de la fracción como el número de bits situados a la derecha del punto binario, este razonamiento es sólo válido cuando la longitud de la fracción es un entero positivo menor o igual que la longitud de la palabra, pero no lo es para los otros valores. Para casos generales, basándonos en un formato de representación en punto fijo [B L] dado, el valor decimal asociado a éste viene dado por: [1.1] (-L)3)-L-(B2)-L-(B1)-L-(B 2b(B) ...2b(3)2b(2)2-b(1)Valor ∗++∗+∗+∗= Donde b(1) b(2) b(3 .... b(B) es la secuencia de dígitos binarios de la que se parte, siendo b(1) y b(B) los bits MSB y LSB respectivamente. La longitud de fracción ‘L’ corresponde al peso del LSB, es decir el valor al que está elevado la potencia a dos del LSB. Además al tener parte fraccional en la representación del número en punto fijo, la precisión de éste vendrá dado por el número de bits de la parte fraccional. La precisión se define como el tamaño del paso usado en el cuantizador que da la mínima distancia posible entre dos valores consecutivos de cuantización. De la propia definición hecha del formato de representación en punto fijo, se observa que tanto el conjunto de números que se va a representar, es decir el rango, como la precisión con la que se representará dicho conjunto, van a estar limitadas por un número finito de bits. El rango determinado por un número de bits fijo va a limitar a la hora de representar los datos en punto fijo, ya que éstos sólo van a poder ser representados por un conjunto de números dentro de dicho rango finito. Los desbordamientos por tanto tendrán lugar si el resultado de

1 Ver anexo II: Representación de números para más información.

___________________________________________________________________

2

Page 3: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ una operación es un valor mayor que el máximo valor representable dentro del rango, siendo éste un ‘desbordamiento positivo’. Si en cambio, resulta que el resultado es menor que el mínimo valor representable dentro del rango, tendremos un ‘desbordamiento negativo’. La herramienta en punto fijo permite tratar la aparición de desbordamientos mediante la propiedad ‘OverflowMode’ asociada al objeto ‘fimath’ que se verá más adelante. Por otro lado, el tener una precisión finita conllevará que el número de valores representables sea finito, por lo tanto no todos los posibles valores podrán ser representados. Lo que se hace es convertir el valor original, que podrá tomar infinitos valores, en uno de los valores finitos representables dentro del rango, usando para ello métodos de redondeo. La herramienta en punto fijo soporta varios métodos para tratar el problema de precisión finita, que vendrán dados por los valores que podrá tomar la propiedad ‘RoundMode’ asociada al objeto ‘fimath’, que se verá también más adelante. Como se ha podido observar, el hecho de representar los números en punto fijo trae consigo una posible pérdida de información debido a los posibles desbordamientos y redondeos en la implementación de los mismos. Por lo tanto, se debe prestar particular atención a la precisión y al rango asignados en la representación del dato en punto fijo, con el fin de controlar en la medida de lo posible estos fenómenos indeseados. 1.2 Objeto ‘fi’ Como se comentó en la presentación, la herramienta en punto fijo permite crear objetos ‘fi’ que trabajan con datos en punto fijo. En las primeras versiones comerciales de MATLAB no se definía el tipo de dato en punto fijo, en versiones posteriores aparece esta herramienta que se encarga de la definición y del uso de este tipo de dato. 1.2.1 Creación del objeto ‘fi’ La función usada para la creación de objetos ‘fi’ puede ser invocada de numerosas formas, según el número de parámetros usados en la llamada, así se tendrá:

fi(v) Devuelve un objeto en punto fijo con signo y valor ‘v’, de 16 bits de longitud de palabra y la longitud de la fracción establecida automáticamente para obtener la mejor precisión.

fi(v,s) Devuelve un objeto en punto fijo con valor ‘v’, con el signo determinado por el parámetro ‘s’, con longitud de palabra de 16 bits y la longitud de la fracción establecida automáticamente para obtener la mejor precisión. El valor de ‘s’ será 0 para valores sin signo y 1 para valores con signo. fi(v,s,w) Devuelve un objeto en punto fijo con valor ‘v’, con el signo determinado por el parámetro ‘s’, el valor de la longitud de la palabra determinado por el parámetro ‘w’ y la longitud de la fracción establecida automáticamente para obtener la mejor precisión.

___________________________________________________________________

3

Page 4: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________

fi(v,s,w,f) Devuelve un objeto en punto fijo con valor ‘v’, con el signo determinado por el parámetro ‘s’, la longitud de la palabra dada por el parámetro ‘w’, y la longitud de la fracción dada por el parámetro ‘f’.

fi(v,T) Devuelve un objeto en punto fijo con valor ‘v’ y con un objeto ‘numericType’ asociado que viene definido por T.

fi(v,T,F)

Devuelve un objeto en punto fijo con valor ‘v’, con un objeto ‘numericType’ asociado que viene definido por T y un objeto ‘fimath’ asociado que viene definido por F.

fi(...'PropertyName',PropertyValue...) Permite establece los valores para las propiedades del objeto en punto fijo, usando para ello en la llamada a la función el par ‘nombre de la propiedad/valor asociado a la propiedad’.

Ejemplos El uso de algunas de las funciones mencionadas para la creación de objetos ‘fi’ se muestra en la Tabla 1.1 Cada objeto ‘fi’ creado tendrá asociado una serie de propiedades que serán inicializadas con sus valores por defecto y que determinarán las características de dicho objeto. Estas propiedades se verán en el apartado 1.1.2.

Ejemplo 1 Ejemplo 2

Se crea un objeto de valor ‘pi’, una longitud de palabra de 8 bits y una longitud de fracción de 3 bits:

Si se omite el argumento ‘f’ (longitud de la fracción), su valor es establecido automáticamente a la mejor precisión posible correspondiente.

a = fi(pi, 1, 8, 3) b = fi(pi, 1, 8) a = 3.1250 b = 3.1563

DataType: Fixed DataType: Fixed Scaling: BinaryPoint Scaling: BinaryPoint Signed: true Signed: true WordLength: 8 WordLength: 8

FractionLength: 5 FractionLength: 3

Ejemplo 3

Si omitimos ‘w’ y ‘f’, ‘w’ será establecida a 16 bits y ‘f’ a la mejor precisión posible correspondiente.

c = fi(pi, 1) c = 3.1416

DataType: Fixed Scaling: BinaryPoint Signed: true WordLength: 16 FractionLength: 13

___________________________________________________________________

4

Page 5: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________

Objeto ‘numerictype’ Objeto ‘fimath’

Define el tipo de dato almacenado en el objeto ‘fi’

Define las propiedades del objeto ‘fi’ asociadas a las características aritméticas del mismo.

T = numerictype F = fimath T = DataType: Fixed F = RoundMode: round

Scaling: BinaryPoint OverflowMode: saturate Signed: true ProductMode: FullPrecision WordLength: 16 MaxProductWordLength: 128 FractionLength: 15 SumMode: FullPrecision

MaxSumWordLength: 128 CastBeforeSum: true

Ejemplo 4

Se crea un objeto ‘fi’ usando el objeto numerictype ‘T’ y el objeto fimath ‘F’ previamente definidos. a = fi(pi, T, F)

a = 1.0000 DataType: Fixed Scaling: BinaryPoint Signed: true WordLength: 16 FractionLength: 15 RoundMode: round OverflowMode: saturate ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: FullPrecision MaxSumWordLength: 128 CastBeforeSum: true

Tabla 1.1 Ejemplos asociados a la creación del objeto ‘fi’

Se puede observar en el Ejemplo 1, como el valor almacenado en el objeto no es el esperado, esto se debe a que se generan errores debido a la cuantización de los números originales al formato dado por la longitud de palabra y longitud de fracción establecidos en la representación del objeto. Así se confirma lo comentado previamente, que el formato en punto fijo sólo permite la representación de una cantidad finita de números. Como mejor opción para la representación de los números en punto fijo se presenta la de no especificar la longitud de la fracción, de manera que ésta sea establecida automáticamente para conseguir que el valor almacenado en el objeto ‘fi’ sea lo más cercano posible al valor deseado, como se puede ver que ocurre en el Ejemplo 2 y Ejemplo 3 . En el Ejemplo 4 se define el objeto ‘fi’ especificando como parámetros para la función los objetos ‘numerictype’ y ‘fimath’ que estarán asociados a dicho objeto ‘fi’. Todo objeto ‘fi’ tendrá asociado un objeto ‘fimath’ y un objeto ‘numerictype como se comentó anteriormente. En el Ejemplo 5 mostrado a continuación en el cuadro 1.1, se define un dato usando 60 bits para su representación interna. De los 60 bits definidos en realidad sólo se usarán 52 bits.

___________________________________________________________________

5

Page 6: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________

Ejemplo 5

a = fi(0.1, 0, 60); a.WordLength

ans = 60 a.FractionLength ans= 63

bin(a) ans = 110011001100110011001100110011001100110011001100110100000000

Cuadro 1.1 Ejemplo asociado al objeto ‘fi’

El dato definido usando un objeto ‘fi’ será almacenado con el número de bits que se especifique en el parámetro ‘w’, pero es importante no olvidar que la representación por defecto en punto flotante de doble precisión tiene una longitud máxima de 64 bits, de los cuales 52 bits son para la representación de la mantisa más un bit adicional que hace que la mantisa tenga 53 bits efectivos, por lo tanto la precisión vendrá limitada por los 53 bits de la mantisa. El tener un número mayor de 52 bits para la representación podría entonces parecer innecesario, pero no es así, ya que existen procesadores en punto fijo que al realizar operaciones aritméticas almacenan los resultados obtenidos en precisiones mayores que 52 bits. Se muestra como ocurre esto en el Ejemplo 6.

Ejemplo 6

a = fi(0.1, 0, 40); bin(a) ans = 1100110011001100110011001100110011001101 b = a*a b = 0.0100000000000045 DataType: Fixed Scaling: BinaryPoint Signed: false WordLength: 80 FractionLength: 86 bin(b) ans = 101000111101011100001010001111010111000011110..... 10111000010100011110101110000101010

Cuadro 1.2 Ejemplo asociado al objeto ‘fi’

En el Ejemplo 6 se inicializa un objeto ‘fi’ sin signo con una longitud de palabra de 40 bits, posteriormente se multiplica por si mismo usando las propiedades por defecto establecidas. El resultado del producto con precisión entera es de 80 bits, que es de precisión mucho mayor que el estándar de representación usada para punto flotante de doble precisión. 1.2.2 Propiedades del objeto ‘fi’ El objeto ‘fi’ tienen los tres siguientes tipos generales de propiedades:

• Propiedades del dato • Propiedades ‘fimath’

___________________________________________________________________

6

Page 7: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________

• Propiedades ‘numerictype’ Como se puede observar, las propiedades asociadas a los objetos ‘fimath’ y ‘numerictype’ también serán propiedades del objeto ‘fi’. A continuación, en los siguientes subapartados, se exponen las propiedades mencionadas asociadas a los objetos ‘fi’. 1.2.2.1 Propiedades del dato Estas propiedades determinan el formato de representación del dato almacenado en el objeto ‘fi’. Como sus posibles valores asociados:

‘data’ ‘oct’ El valor del dato real del objeto ‘fi’. El valor del entero almacenado en

formato octal. ‘bin’ ‘dec’ El valor del entero almacenado en

formato binario. El valor del entero almacenado en formato decimal.

‘fimath’ ‘double’ El objeto ‘fimath’ asociado al objeto ‘fi’. El valor del entero almacenado en

formato doble. ‘hex’ ‘int’ El valor del entero almacenado está en formato hexadecimal.

El valor del entero almacenado en un tipo de dato incorporado por MATLAB (int8, int16, int32, uint8, uint16, y uint32

‘numericType’ El objeto ‘numericType’ asociado al objeto ‘fi’

___________________________________________________________________

7

Page 8: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ 1.2.2.2 Propiedades del objeto ‘fimath’ El objeto ‘fimath’ define la forma de manejar las operaciones aritméticas internas, sumas y productos, controlando los entornos de desbordamiento y redondeo. Las propiedades del objeto ‘fimath’ se muestran en la Tabla 2.2, según estén asociadas a las operaciones de sumas o a los productos.

Propiedades asociadas con las sumas Propiedades asociadas con los productos

‘SumWordLength’ ‘ProductWordLength’

La longitud de la palabra, en bits, del tipo de dato usado para almacenar el resultado de la suma de dos objetos ‘fi’.

La longitud de la palabra, en bits, del tipo de dato que se va a usar para almacenar el resultado del producto de dos objetos ‘fi’.

Este valor debe ser un entero positivo, cuyo valor por defecto es 32.

Este valor tiene que ser un entero positivo y su valor por defecto es 32.

‘SumFractionLength’ ‘ProductFractionLength’

Es la longitud de la fracción en bits, del tipo de dato usado para almacenar el resultado de la suma de dos objetos ‘fi’.

Es la longitud de la fracción en bits, del tipo de dato usado para almacenar el resultado del producto de dos objetos ‘fi’.

Este valor puede ser cualquier valor entero positivo y negativo, inicializado para obtener la mejor precisión.

Su valor puede ser un entero positivo o negativo, inicializado por defecto para obtener la mejor precisión.

Por defecto toma el valor de 30 bits. Por defecto toma el valor de 30 bits.

‘MaxProductWordLength’ ‘MaxSumWordLength’

El valor máximo de la longitud de la palabra permitido en el tipo de dato del producto cuando ‘ProductMode’ está establecido a ‘FullPrecisión’.

El valor máximo de la longitud de palabra permitido en el tipo de dato de la suma cuando ‘SumMode’ está establecido a ‘FullPrecision’. Su valor por defecto es 128.

Su valor por defecto es 128.

‘ProductMode’ ‘SumMode’

Define como se almacenar el resultado del producto. Como posibles valores:

Define como se almacena el resultado de la suma. Como posibles valores:

• ‘FullPrecision’: Todos los bits del resultado se conservan, luego ni desbordamientos ni pérdida de precisión tienen lugar.

• ‘FullPrecision’ : Todos los bits del resultado se conservan., luego ni desbordamientos ni pérdida de precisión tienen lugar.

• ‘KeepLSB’: Sólo los bits menos significativos del resultado se mantienen.

• ‘KeepLSB’: Sólo los bits menos significativos del resultado se mantienen.

• ‘KeepMSB’: Sólo los bits más significativos del resultado se mantienen.

• ‘KeepMSB’: Sólo los bits más significativos del resultado se mantienen.

• ‘SpecifyPrecision’: Se especifica tanto la longitud de la palabra como la longitud de la fracción del tipo de dato que almacena el resultado de las sumas.

• ‘SpecifyPrecision’: Se especifica tanto la longitud de la palabra como la longitud de la fracción del tipo de dato que almacena el resultado de los productos.

El valor por defecto de esta propiedad es El valor por defecto de esta propiedad es

‘FullPrecision’

‘FullPrecision’.

___________________________________________________________________

8

Page 9: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ ‘CastBeforeSum’

Determina si los operandos de la suma son convertidos al tipo de dato de la suma antes de realizar la operación o después de relizarla.

Tabla 2.2 Propiedades del objeto ‘fimath’

En cuanto a las propiedades asociadas al objeto ‘fimath’ que hacen referencia al control del desbordamiento y redondeo, se tiene:

‘RoundMode’ El modo de redondeo. El valor de esta propiedad puede ser: • ‘ceil’: Redondea hacia el infinito positivo. • ‘convergent‘: Redondea hacia el más cercano. En caso de empate redondea hacia el entero par • más cercano. • ‘fix’: Redondea hacia cero. • ‘floor’ :Redondea hacia el infinito negativo. • ‘round ‘: Redondea hacia el más cercano. En caso de empate redondea hacia el infinito positivo. El valor por defecto es ‘round’ ‘OverflowMode’ Modo de manejo del desbordamiento. El valor de esta propiedad puede ser cualquiera de los siguientes: • ‘saturate’: El desbordamiento es saturado al máximo o al mínimo valor del rango del punto fijo. • ‘wrap’: El desbordamiento es devuelto al rango útil usando aritmética de módulo, de manera que

todo valor desbordado sea convertido en un valor representable.

El valor por defecto para esta propiedad será ‘saturate’ 1.2.2.3 Propiedades del objeto ‘numerictype’ Las propiedades asociadas con los objetos ‘numerictype’ definen el tipo de dato almacenado en el objeto ‘fi’ y su forma de escalado. Propiedades del objeto ‘numerictype’ que definen el tipo de dato almacenado:

‘Signed’ Si el objeto ‘fi’ es con o sin signo. El valor por defecto de esta propiedad es 1 (con signo). ‘DataType’ El tipo de dato asociado a objetos ‘fi’. El único valor posible de esta propiedad es ‘fixed’ (dato en punto fijo) ‘DataTypeMode’ El tipo de dato y el escalado asociado a los objetos ‘fi’. Sus posibles valores: • ‘Fixed-point: binary point scaling’: El tipo de dato en punto fijo y el escalado definido por la

longitud de la palabra y la fracción. • ‘Fixed-point: slope and bias scaling’: El tipo de dato en punto fijo y el escalado definido por

‘bias’ y ‘slope’ • ‘Fixed-point: unspecified scaling’: Establecimiento temporal del tipo y escalado que sólo es

permitido en la creación del objeto ‘fi’, para la asignación automática del escalado en punto binario con el fin de obtener la mejor precisión.

___________________________________________________________________

9

Page 10: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________

• ‘int8’: Entero de 8-bit con signo incorporado por MATLAB. • ‘int16’: Entero de 16-bit con signo incorporado por MATLAB. • ‘int32’: Entero de 32-bit con signo incorporado por MATLAB. • ‘uint8’: Entero de 8-bit sin signo incorporado por MATLAB. • ‘uint16’: Entero de 16-bit sin signo incorporado por MATLAB. • ‘uint32’ : Entero de 32-bit sin signo incorporado por MATLAB.

El valor por defecto de esta propiedad es ‘Fixed-point: binary point scaling’. Propiedades del objeto ‘numerictype’ asociadas al escalado

‘Scaling’ Según el modo de escalado de los objetos ‘fi’ en punto fijo: • ‘BinaryPoint’: Escalado del objeto ‘fi’ definido por la longitud de la palabra y fracción. • ‘SlopeBias’: Escalado del objeto ‘fi’ está definido por ‘slope’ y ‘bias’ • ‘Unspecified’: Un establecimiento temporal que sólo se permite en la creación de los objetos ‘fi’,

para conseguir la asignación automática de la mejor precisión en el escalado en punto binario. • ‘Integer’: Si el objeto ‘fi’ es un entero, el punto binario se sobreentiende que está a la derecha del

todo de la palabra, haciendo que la longitud de la fracción sea cero.

El valor por defecto de esta propiedad es ‘BinaryPoint’. Propiedades asociadas al objeto ‘numerictype’ y a la forma de escalado ‘BinaryPoint’:

‘WordLength’ Longitud de la palabra en bits del valor almacenado en el objeto ‘fi’. Debe ser un valor entero positivo, cuyo valor por defecto es 16. ‘FractionLength’ Longitud de la fracción del valor almacenado en el objeto ‘fi’, en bits. Cualquier valor entero positivo o negativo. Si no se especifica una longitud para la fracción del objeto ‘fi’, ésta será establecida automáticamente para obtener la mejor precisión.

1.2.3 Establecimiento de las propiedades del objeto ‘fi’ Existen dos maneras de especificar los valores para las propiedades del objeto ‘fi’. Una de ellas es mediante el establecimiento de las propiedades en la misma creación del objeto ‘fi’, la otra es mediante referencia directa a las propiedades usando el operador punto. Ejemplos A continuación, en el Tabla 1.3, se muestran ejemplos de cómo establecer los valores de las propiedades asociadas al objeto ‘fi’.

___________________________________________________________________

10

Page 11: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________

Ejemplo 7

Para establecer el modo de desbordamiento a ‘wrap’ para la propiedad ‘OverflowMode’ y el modo de redondeo a ‘convergent’ para la propiedad ‘RoundMode’. a = fi(pi, 'OverflowMode', 'wrap', 'RoundMode', 'convergent')

Ejemplo 8

Para obtener el valor de ‘DataTypeMode’ asociado al objeto ‘a’

a.DataTypeMode ans = Fixed-point: binary point scaling

Para establecer el ‘OverflowMode’ de a: a.OverflowMode = 'wrap'

Tabla 1.3 Establecimiento de propiedades del objeto ‘fi’

En el ejemplo 7 se puede ver como establecer las propiedades del objeto en la creación del mismo. Para ello se incluye el nombre de la propiedad seguida por el valor que se le quiere asignar como parte de los argumentos en la llamada a la función ‘fi’. En el ejemplo 8 se establecen los valores de las propiedades haciendo referencia directa a ellas usando el operador ‘punto’. Este operador ‘punto’ también sirve para obtener el valor de cualquiera de las propiedades asociadas al objeto. Esta forma de establecer las propiedades para el objeto ‘fi’ se extrapola a todos los demás objetos. 1.3 Objeto ‘fipref’ La visualización de un objeto consistirá en el listado de las propiedades asociadas a éste y que determinan sus características. Con el fin de determinar que parámetros asociados al objeto ‘fi’ serán visualizados y que otros parámetros no lo serán, en la herramienta en punto fijo se define el objeto ‘fipref’ que se encargan de la visualización del objeto ‘fi’. En el Cuadro 1.3 se muestra la creación de un objeto ‘fipref’ con los valores de sus propiedades asociadas inicializadas por defecto:

P = fipref P =

NumberDisplay: 'RealWorldValue' NumericTypeDisplay: 'full' FimathDisplay: 'full'

Cuadro 1.3 Creación objeto ‘fipref’

___________________________________________________________________

11

Page 12: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ 1.3.1 Propiedades asociadas al objeto ‘fipref’ ‘NumberDisplay’ Opciones de visualización para los valores del objeto ‘fi’:

o ‘bin’: Visualiza el valor del entero almacenado en formato binario. o ‘dec’: Visualiza el valor del entero almacenado en formato decimal sin signo. o ‘RealWorldValue’: Visualiza el valor entero almacenado usando formato de doble

precisión. o ‘hex’: Visualiza el valor entero almacenado en formato hexadecimal. o ‘int’: Visualiza el valor entero almacenado en formato decimal con signo. o ‘none’: No se visualiza ningún valor.

El valor por defecto de esta propiedad es ‘RealWorldValue’. ‘NumericTypeDisplay’ Opciones de visualización para los atributos ‘numerictype’ del objeto ‘fi’.

o ‘full’: Visualización de todos los atributos ‘numerictype’ del objeto en punto fijo. o ‘none’: Ninguno de los atributos de ‘numerictype’ son visualizados. o ‘short’: Visualiza una notación abreviada del tipo de dato en punto fijo y del escalado

del objeto en punto fijo. El valor por defecto de esta propiedad es ‘full’ ‘FimathDisplay’ Opciones de visualización para los atributos del objeto ‘fi’

o ‘full’: Visualiza todos los atributos ‘fimath’ del objeto en punto fijo o ‘none’: Ninguno de los atributos ‘fimath’ son visualizados.

El valor por defecto de esta propiedad es ‘full’. Los modos asociados al establecimiento de las propiedades del objeto ‘fipref’ son los mismos definidos para el objeto ‘fi’:

- Establecimiento de las propiedades ‘fipref’en la creación del objeto. - Usando referencia directa a las propiedades con ‘fipref’.

Ejemplos El objeto ‘fipref’ con los valores para sus propiedades definidos como siguen, habilitará la visualización del valor numérico del objeto ‘fi’ y la visualización del objeto ‘numericType’, pero no así la visualización del objeto ‘fimath’.

Cuadro 1.4 Ejemplo objeto ‘fipref’

= fi(pi) a =

3.1416 DataType: Fixed Scaling: BinaryPoint Signed: true WordLength: 16

FractionLength: 13

p= fipref('NumberDisplay','RealWorldValue', 'NumericTypeDisplay', 'full', 'FimathDisplay', 'none') p=

NumberDisplay:'RealWorldValue' NumericTypeDisplay: 'full' FimathDisplay: 'none'

Además de hacer uso del objeto ‘fipref’ para determinar que objetos se desean visualizan, se podrá también con ellos determinar aspectos de la visualización de los objetos ‘fi’, como son la base de representación de los números almacenados en los distintos objetos, pudiéndose escoger para la representación una base binaria, una base hexadecimal, etc...

___________________________________________________________________

12

Page 13: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________

1.4 Objeto ‘fimath’ El objeto ‘fimath’ maneja las operaciones internas, tanto sumas como productos, de los objetos ‘fi’, definiendo los entornos de desbordamiento y/o redondeo en caso de producirse. Se muestra en el Cuadro 1.5 como se crea un objeto ‘fimath’, con sus propiedades inicializadas por defecto:

F = fimath F = RoundMode: round

OverflowMode: saturate ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: FullPrecision MaxSumWordLength: 128 CastBeforeSum: true

Cuadro 1.5 Creación objeto ‘fimath’

El procedimiento usado para el establecimiento de las propiedades es idéntico al usado para los objetos ‘fi’. 1.4.1 Manejo del desbordamiento en objetos ‘fi’ La principal función de la propiedad ‘fimath’ es el manejo de desbordamientos en operaciones aritméticas, en concreto sumas y productos, que se llevan a cabo con objetos ‘fi’. En sumas y multiplicaciones con objetos ‘fi’ como operandos, los resultados que se generan pueden ser exactamente representados por objetos ‘fi’ hasta longitudes de palabra de 65.535 bits o hasta la memoria disponible en la máquina. Cuando dichos resultados exceden el tamaño disponible para su almacenamiento, tendrán lugar desbordamientos con la consiguiente pérdida de información. Manejar y controlar estos desbordamientos es importante, y esto es lo que permite la herramienta en punto fijo a través de la propiedad ‘OverflowMode’ asociada al objeto ‘fimath’. En las divisiones en cambio no se podrá hacer esto, ya que algunos de los resultados obtenidos en ellas pueden ser expresiones binarias infinitas. Las divisiones con objetos ‘fi’ se deben realizar usando la función ‘divide’, la cual requiere que uno mismo especifique el tipo de dato numérico usado para el resultado con un objeto ‘numerictype’ T. Otra función del objeto ‘fimath’ es el manejo del redondeo, en concreto la propiedad ‘RoundMode’ asociada a este objeto es la que permitirá seleccionar el tipo de redondeo usado en la implementación del sistema. 1.4.2 Manejo de las operaciones aritméticas

___________________________________________________________________

13

Page 14: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ Se pasa ahora a ver con más profundidad algunos de los valores de las propiedades más importantes asociadas al manejo de operaciones aritméticas, enmarcadas todas ellas dentro del objeto ‘fimath’. Estas propiedades son ‘SumMode’, ‘ProductMode’ y ‘CastBeforeSum’.

1.4.2.1 ‘Fullprecisión’ (precisión entera) Este valor está asociado como se pudo ver a las propiedades ‘SumMode’ y ‘ProductMode’ del objeto ‘fimath’. Las matemáticas de precisión entera es la opción establecida por defecto en todas las operaciones matemáticas. Esta opción permite que si es necesario, crezca el número de bits usados para almacenar el resultado de la operación aritmética, con el fin de almacenar el dato obtenido al completo. No se perderá por tanto ningún bit, es decir no se tendrán ni desbordamientos ni redondeos en los resultados. El número de bits que va a crecer dependerá del tipo de operación que se lleve a cabo. Para los productos de precisión entera, la longitud de palabra asignada al resultado debe ser igual a la suma de las longitudes de palabra de los operandos. Para las sumas de precisión entera, se necesitará una longitud de palabra para almacenar el resultado que crezca log2(n) bits, donde ‘n’ sea el número de sumandos. Sólo se generará un error cuando la longitud de la palabra del resultado calculado sea mayor que el valor dado por la propiedad ‘MaxProductWordLength’ (para los productos) o ‘MaxSumWordLength’ (para las sumas) Ejemplos

Productos de precisión entera Sumas de precisión entera

a = fi(pi,1,20); b = fi(exp(1),1,16); c = a * b c = 8.53967452421784

DataType: Fixed Scaling: BinaryPoint Signed: true WordLength: 36 FractionLength: 30 RoundMode: round OverflowMode: saturate ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: FullPrecision MaxSumWordLength: 128 CastBeforeSum: true

a = fi(pi,1,24); b = fi(exp(1),1,24); c = a + b c = 5.85987424850464

DataType: Fixed Scaling: BinaryPoint Signed: true WordLength: 25 FractionLength: 21 RoundMode: round OverflowMode: saturate ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: FullPrecision MaxSumWordLength: 128 CastBeforeSum: true

Tabla 1.4 Ejemplos opción ‘fullprecision’

1.4.2.2 ‘KeepMSB’ Este valor está asociado a las propiedades ‘SumMode’ y ‘ProductMode’ del objeto ‘fimath’.

___________________________________________________________________

14

Page 15: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ Si estas propiedades se establecen al modo ‘KeepMSB’, sólo los bits más significativos del resultado de las sumas o de los productos se mantendrán. Para almacenar el resultado de las operaciones aritméticas, la longitud de la palabra viene dada por la propiedad ‘ProductWordLength’ ( para productos ) o ‘SumWordLength’ ( para sumas ). La longitud de la fracción será establecida automáticamente en ambos casos para mantener los bits más significativos del resultado. Si la longitud de la palabra del resultado es lo suficientemente grande para almacenar el valor con precisión entera, éste será colocado en los bits más significativos. Si la longitud de palabra para el resultado es menor que el necesario para almacenar el valor con precisión entera, se mantienen los bits más significativos del resultado teniendo que eliminar parte de los bits menos significativos. Esto dará lugar a un redondeo con la consecuente pérdida de precisión. Ejemplos En primer lugar se define en la columna de la izquierda del Cuadro 1.6 un objeto ‘numerictype’ ‘U8’ y ‘fimath’ ‘F8’. Posteriormente en la columna de la derecha del mismo cuadro, se hace uso de estos dos objetos definidos para crear el objeto ‘a’, y se lleva a cabo una multiplicación de ‘a’ consigo mismo. Mientras que el objeto ‘numerictype’ ‘U8’ simula números fraccionales de 8 bits sin signo, el objeto ‘fimath’ ‘F8’ establece la aritmética tanto para las sumas como para los productos a ‘KeepMSB’, además se inicializan los valores de las propiedades ‘productWordLength’ y ‘sumWordLength’ a 8 bits.

a = fi(0.1, U8, F8); b=a*a ans =

0.01171875 DataType: Fixed Scaling: BinaryPoint Signed: false WordLength: 8 FractionLength: 8 RoundMode: round OverflowMode: saturate ProductMode: KeepMSB ProductWordLength: 8 SumMode: KeepMSB SumWordLength: 8 CastBeforeSum: true

bin(b) ans = 00000011

U8=numerictype('Signed',0,'WordLength',8,.. 'FractionLength',8) U8 =

DataType: Fixed Scaling: BinaryPoint Signed: false WordLength: 8 FractionLength: 8

F8 = fimath('ProductMode','KeepMSB'… 'ProductWordLength',8,... 'SumMode','KeepMSB',…. 'SumWordLength',8)

F8 = RoundMode: round OverflowMode: saturate ProductMode: KeepMSB ProductWordLength: 8 SumMode: KeepMSB SumWordLength: 8 CastBeforeSum: true

Cuadro 1.6 Ejemplo opción ‘keepMSB’

En el ejemplo, al realizar el producto de ‘a’ consigo mismo se obtiene como resultado del mismo 0.01171875, que discrepa del que se debería haber obtenido realmente 0.0103149. Esto se debe a los efectos de redondeo, ya que al mantener sólo los 8 bits más significativos del resultado se tendrá una pérdida de precisión.

___________________________________________________________________

15

Page 16: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ 1.4.2.3 ‘KeepLSB’ Este valor está asociado a las propiedades ‘SumMode’ y ‘ProductMode’ del objeto ‘fimath’. Si estas propiedades se establecen a modo ‘KeepLSB’ sólo los bits menos significativos del resultado de las sumas o de los productos se mantendrán. Para almacenar el resultado de las operaciones aritméticas, la longitud de la palabra viene dada por la propiedad ‘ProductWordLength’ (para productos) o ‘SumWordLength’ (para sumas). La longitud de la fracción será establecida automáticamente en ambos casos para mantener los bits menos significativos del resultado. Si la longitud de la palabra del resultado es lo suficientemente grande para almacenar el valor con precisión entera, éste será colocado en los bits menos significativos. Si la longitud de palabra para el resultado es menor que el necesario para almacenar el valor con precisión entera, se mantienen los bits menos significativos del resultado teniendo que eliminar parte de los bits más significativos. Esto generará posibles desbordamientos. Ejemplos En el ejemplo se establece el modo de la suma y del producto a ‘KeepLSB’ y el modo de desbordamiento a ‘wrap’. Para ello se usan los objetos ‘S8’ del tipo ‘fimath’ y ‘C8’ del tipo ‘numerictype’ que se definen a continuación en la columna de la izquierda del Cuadro 1.7.

S8 = numerictype('Signed',1,'WordLength',8,. 'FractionLength',0) S8 = DataType: Fixed

Scaling: BinaryPoint Signed: true WordLength: 8 FractionLength: 0

C8 = fimath('RoundMode','floor',… 'OverflowMode','wrap',... ‘ProductMode','KeepLSB',…

'ProductWordLength',8,... 'SumMode','KeepLSB',…

'SumWordLength',8) C8 = RoundMode: floor

OverflowMode: wrap ProductMode: KeepLSB ProductWordLength: 8 SumMode: KeepLSB SumWordLength: 8 CastBeforeSum: true

a = fi(64, S8, C8); b=a+a ans =

-128 DataType: Fixed Scaling: BinaryPoint Signed: true WordLength: 8 FractionLength: 0 RoundMode: floor OverflowMode: wrap ProductMode: KeepLSB ProductWordLength: 8 SumMode: KeepLSB SumWordLength: 8 CastBeforeSum: true

Cuadro 1.7 Ejemplo opción ‘KeepLSB’

El objeto ‘a’ definido en la columna de la derecha del Cuadro 1.7 representará un entero de valor inicial 64, con 8 bits para su representación y signo. Después de definir el tipo de dato, se lleva a cabo la suma del objeto ‘a’ consigo mismo. En una aritmética definida como precisión entera a + a = 128. En este caso al tener 8 bits para ‘SumWordlength’ el máximo valor representable sería 127, estando por tanto el resultado de la

___________________________________________________________________

16

Page 17: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ suma fuera del rango y generándose un desbordamiento. Al tener establecido ‘OverflowMode’ a ‘wrap’, se convierte +128 en –128. 1.4.2.4 ‘CastBeforeSum’ Determina si los operandos de la suma son convertidos al tipo de dato de la suma antes o después de realizar la operación. Cuando ‘CastBeforeSum’ está a valor ‘true’ (1) los operandos son convertidos al tipo númerico de la suma antes de llevarla a cabo. Este comportamiento modela la mayor parte de los chips DSP. En cambio, cuando ‘CastBeforeSum’ tiene como valor ‘false’ (0), los operadores son sumados con precisión entera y después convertidos al tipo numérico de la suma. Este modelo caracteriza el comportamiento de muchas implementaciones ASIC o FPGA. Esta diferencia sólo importará cuando el tipo numérico de la suma tenga menor precisión o rango que el tipo numérico de los operandos. Ejemplos Se define el tipo de dato para el resultado de la suma como un entero (parte fraccional cero). Los operandos tienen en cambio un bit fraccional. Si los operandos se convierten al tipo de la suma antes de realizar la operación, el bit fraccional se pierde. Si se suman los operandos y después se convierten al tipo de dato de la suma, el bit fraccional podría ser significativo. F = fimath('RoundMode','floor',... 'SumMode','SpecifyPrecision',... 'SumWordLength',16,….. 'SumFractionLength',0,... 'CastBeforeSum',true) F =

RoundMode: floor OverflowMode: saturate ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: SpecifyPrecision SumWordLength: 16 SumFractionLength: 0

CastBeforeSum: true

a = fi(0.5,'fimath',F) a = 0.5

DataType: Fixed Scaling: BinaryPoint Signed: true WordLength: 16 FractionLength: 15 RoundMode: floor OverflowMode: saturate ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: SpecifyPrecision SumWordLength: 16 SumFractionLength: 0 CastBeforeSum: true

CastBeforeSum: true CastBeforeSum: false

b=a + a b.data ans=

0

b=a + a b.data ans =

1

___________________________________________________________________

17

Page 18: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________

Tabla 1.5 Ejemplo opción ‘CastBeforeSum’

Con CastBeforeSum: true Se cuantiza 0.5 a 0 para pasar los sumandos al tipo del resultado (16 bits de palabra y 0 bits de fracción ), después se efectúa la suma cuyo resultado será 0. CastBeforeSum: false

Se suman los sumandos en sus respectivos tipos, 0.5+0.5 = 1, después se convierte al tipo del resultado (16 bits de palabra y 0 bits de fracción) obteniéndose un ‘1’.

1.4.3 Compartir objetos ‘fimath’ El objeto ‘fimath’ encapsula las propiedades matemáticas de la herramienta en punto fijo y es en sí mismo una propiedad del objeto ‘fi’. Basándose en un único objeto ‘fimath’ se pueden crear múltiples objetos ‘fi’. Es importante saber que para poder realizar aritmética con +, -, .*, o *, los dos operandos ‘fi’ deben tener las mismas propiedades ‘fimath’. El poder crear múltiples objetos ‘fi’ con un único objeto ‘fimath’ será útil para llevar a cabo operaciones aritméticas entre ellos. Ejemplo En la Tabla 1.5 se crean dos objetos ‘fi’ con el mismo objeto ‘fimath’ que se tiene por defecto y después se suman.

a = fi(pi); a.fimath ans =

RoundMode: round OverflowMode: saturate ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: FullPrecision MaxSumWordLength: 128 CastBeforeSum: true

b = fi(8); b.fimath ans =

RoundMode: round OverflowMode: saturate ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: FullPrecision MaxSumWordLength: 128 CastBeforeSum: true

a + b

ans = 11.1416

Tabla 1.5 Compartición objeto ‘fimath’ 1.5 Objeto ‘numerictype’ El objeto ‘numerictype’ define el tipo de dato y los atributos de escalado del objeto ‘fi’. Para crear el objeto ’numerictype’ en la herramienta punto fijo y establecer sus propiedades asociadas se usan los mismos métodos usados para los objetos definidos con anterioridad.

___________________________________________________________________

18

Page 19: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ El objeto ‘NumericType’ con sus propiedades asociadas inicializadas por defecto se muestran a continuación:

T = numerictype T = DataType: Fixed Scaling: BinaryPoint Signed: true WordLength: 16 FractionLength: 15

Cuadro 1.8 Objeto ‘numericType’

Este objeto sólo te deja establecer valores válidos para algunos de sus campos definidos. 1.5.1 Relación entre las propiedades del objeto ‘numerictype’ Una vez vista las propiedades asociadas al objeto ‘numerictype’ en el apartado 1.2.2.3, se muestra en la Tabla 1.6 la relación existente entre ellas.

DataTypeMode Tipo de dato Escalado Signo

Longitud de la palabra

Longitud de la fracción Slope Bias

Fully specified fixed-point data types Fixed-point: binary point scaling

fixed BinaryPoint 1/0 w f 1 0

Fixed-point: slope and bias scaling

fixed SlopeBias 1/0 w N/A s b

Partially specified fixed-point data type Fixed-point: unspecified scaling

fixed Unspecified 1/0 w N/A N/A N/A

Tipos de datos ya incorporados int8

fixed BinaryPoint 1 8 0 1 0

int16 fixed BinaryPoint 1 16 0 1 0

int32

fixed BinaryPoint 1 32 0 1 0

uint8

fixed BinaryPoint 0 8 0 1 0

___________________________________________________________________

19

Page 20: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ uint16 fixed BinaryPoint 0 16 0 1 0

fixed BinaryPoint 0 32 0 1 0 uint32

Tabla 1.6 Interrelación propiedades ‘numericType’

1.5.2 Compartir objetos ‘numerictype’ Al igual que se vio para el objeto ‘fimath’, se pueden usar un mismo objeto ‘numerictype’ para definir tipo de dato y regla de escalado que se desea compartir entre varios objetos ‘fi’. Ejemplo La Tabla 1.7 muestra la creación de dos objetos ‘fi’ con los mismos atributos ‘numerictype’.

format long g T = numerictype('WordLength',32,'FractionLength',28);

a = fi(pi,T)

a = 3.1415926553309

DataType: Fixed Scaling: BinaryPoint

Signed: true WordLength: 32

Tabla 1.7 Compartición propiedad ‘numericType’

Con la primera orden ‘format long g’ se establece el formato de representación usado a la salida, pero esto no afecta a como el PC trabaja con el número, sólo afectará a la manera de visualizarlo por pantalla. Si se tiene el valor ‘format short’ establecido por defecto, la visualización para formatos escalados en punto fijo usará 5 dígitos. Si se establece ‘format long’, el formato de representación para números escalados en punto fijo será de 15 dígitos para el tipo ‘double’ y 7 dígitos para los ‘single’.

FractionLength: 28 RoundMode: round OverflowMode: saturate ProductMode: FullPrecision MaxProductWordLength: 128SumMode: FullPrecision MaxSumWordLength: 128 CastBeforeSum: true

b = fi(pi/2, T) b = 1.5707963258028

DataType: Fixed Scaling: BinaryPoint Signed: true WordLength: 32 FractionLength: 28 RoundMode: round OverflowMode: saturate ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: FullPrecision MaxSumWordLength: 128 CastBeforeSum: true

1.6 Objeto ‘quantizer’

___________________________________________________________________

20

Page 21: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ El objeto ‘quantizer’ se encargará de establecer los parámetros asociados a la cuantización de los datos. La creación de estos objetos e inicialización de sus propiedades asociadas se hace de la manera habitual usada para los tipos de objetos anteriores. El objeto ‘quantizer’ con sus propiedades inicializadas por defecto se muestra en el Cuadro 1.9.

q = quantizer q =

DataMode = fixed RoundMode = floor OverflowMode = saturate Format = [16 15] Max = reset Min = reset NOverflows = 0 NUnderflows = 0 NOperations = 0

Cuadro 1.9 Objeto ‘quantizer’

1.6.1 Propiedades del objeto ‘quantizer’ Se define a continuación las propiedades asociadas al objeto ‘quantizer’. Se distinguen entre las propiedades que no se pueden modificar, es decir que tienen valores de solo lectura, y propiedades que si se pueden modificar. 1.6.1.1 Propiedades modificables del objeto ‘quantizer’ El objeto ‘quantizer’ tiene cuatro propiedades a las que se pueden establecer valores, éstas son: ‘DataMode’

Tipo de aritmética usada en la cuantización. Cuando se establece el valor de esta propiedad a ‘double’ o ‘single’, la propiedad ‘Format’ se vuelve solo de lectura.

El valor por defecto de esta propiedad es ‘fixed’. Sus posibles valores asociados son:

• ‘fixed’: Cálculos en punto fijo con signo. • ‘float’ : Cálculos en punto flotante especificados por el usuario. • ‘double’ : Cálculos en punto flotante en precisión doble. • ‘single’ : Cálculos en punto flotante en precisión simple. • ‘ufixed’ : Cálculos en punto fijo sin signo.

‘Format’ El formato del dato del objeto ‘quantizer’. La interpretación de esta propiedad depende del valor de la propiedad ‘DataMode’.

___________________________________________________________________

21

Page 22: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ La Tabla 1.8 muestra como interpretar los valores de la propiedad ‘Format’ según el valor de

‘DataMode’.

Valores de la propiedad

‘DataMode’ Interpretación de los valores de la propiedad ‘Format’

fixed o ufixed

La propiedad ‘Format’ es un vector.

El número de bits para la longitud de la palabra del objeto ‘quantizer’ es la primera entrada de este vector y el número de bits para la

longitud de la fracción del objeto ‘quantizer’ es la segunda entrada.

float

La propiedad ‘Format’ es un vector.

El número de bits que se quiere para la longitud de palabra del objeto ‘quantizer’ es la primera entrada de este vector, y el número de bits

que se desea para la longitud del exponente del objeto ‘quantizer’ es la segunda entrada.

En este caso la propiedad ‘Format’ es solo de lectura.

double

Tabla 1.8 Propiedades objeto ‘quantizer’

‘OverflowMode’ Modo de manejo del desbordamiento. El valor por defecto de esta propiedad es ‘saturate’. Cuando el valor de la propiedad ‘OverflowMode’ está establecido al valor ‘saturate’, se vuelve una propiedad de solo lectura cuando la propiedad ‘DataMode’ tiene como valores a ‘float’, ‘double’, o ‘single’. Sus valores asociados:

Su valor es [64 11], especificando la longitud de la palabra y la longitud del exponente respectivamente.

single

En este caso la propiedad ‘Format’ es solo de lectura.

Su valor es [32 8], especificando la longitud de la palabra y la longitud del exponente respectivamente.

• ‘saturate’: El desbordamiento satura. Cuando el valor del dato a cuantizar está fuera del

rango de números representables, es decir que es mayor que el máximo representable o menor que el mínimo representable, estos valores son cuantizados al valor máximo o mínimo representable del rango respectivamente.

• ‘wrap’: Cuando los valores de los datos a cuantizar se salen fuera del rango de valores representables se vuelven a colocar dentro del rango de valores posibles usando aritmética de módulo relativa al número más pequeño representable.

‘RoundMode’ El modo de redondeo utilizado. Sus posibles valores asociados:

• ‘ceil’: Redondea hacia arriba, hacia el siguiente valor cuantizado posible.

___________________________________________________________________

22

Page 23: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________

• ‘convergent ‘: Redondea hacia el valor más cercano cuantizado posible. Si el número está justo en la mitad entre dos valores cuantizados posibles, se redondea hacia el entero par más cercano.

• ‘fix’: Redondea los números positivos hacia arriba y los números negativos hacia abajo, hasta los siguientes valores cuantizados posibles.

• ‘floor’: Redondea hacia abajo, al siguiente valor cuantizado posible. • ‘round’: Redondea hacia el valor más cercano cuantizado posible. Si el número está justo en

la mitad de dos valores cuantizados posibles, el redondeo se hace hacia arriba. 1.6.1.2 Propiedades no modificables del objeto ‘quantizer’ Los objetos ‘quantizer’ tienen cinco propiedades que son sólo para lectura y que se muestran en la Tabla 1.9.

‘Max’

El máximo valor que tiene el dato antes de aplicarle el objeto ‘quantizer’,

es decir antes de efectuar la cuantización usando la función ‘quantize’. El valor de ‘Max’ se acumula si se usa el mismo objeto ‘quantizer’ para

cuantizar varios datos establecidos. Se resetea usando ’reset’.

‘Min’

El mínimo valor del dato antes de aplicarle el objeto ‘quantizer’, es decir

antes de la cuantización usando ‘quantize’. El valor de ‘Min’ se acumula si se usa el mismo objeto ‘quantizer’ para

cuantizar varios datos establecidos. Se resetea usando ‘reset’.

‘NOperations’

Número de operaciones de cuantización que ocurren durante la

cuantización. Este valor se acumula cuando se usa el mismo objeto ‘quantizer’ para procesar distintos tipos de datos establecidos. Se resetea

usando reset. El valor por defecto es 0.

‘NOverflows’

Número de desbordamientos por arriba que ocurren durante la

cuantización usando ‘quantize’. Este valor se acumula si se usa el mismo objeto ‘quantizer’ para cuantizar con varios datos establecidos.

Se resetea su valor usando reset. El valor por defecto es 0.

‘NUnderflows’

Número de desbordamientos por debajo que ocurren durante la

cuantización usando ‘quantize’. Este valor se acumula si se usa el mismo objeto ‘quantizer’ para cuantizar varios datos establecidos. Se resetea

usando reset. El valor por defecto es 0.

Tabla 1.9 Propiedades objeto ‘quantizer’

Estas propiedades registran información referente a la cuantización realizada a los datos usando la función ‘quantize’. Esta información cambia cada vez que se cuantiza un objeto ‘quantizer’ dado. Se pueden resetear estos valores a los de defecto usando ‘reset’. Para establecer los valores asociados con el objeto ‘quantizer’: q = quantizer('datamode','fixed','format',[16,14],'overflowmode', 'saturate','roundmode','ceil')

___________________________________________________________________

23

Page 24: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ Se permite también el poder excluir los nombres de las propiedades cuando se establecen los valores de las propiedades del objeto ‘quantizer’. De esta manera la anterior inicialización del objeto ‘quantizer’ quedaría:

q = quantizer('fixed',[16,14],'saturate','ceil')

Tampoco se tienen que introducir los valores de las propiedades que se van a dejar al valor por defecto cuando se construye un objeto ‘quantizer’, luego no sería necesario introducir 'fixed' y 'saturate'. Todo esto último no es extrapolable a los demás objetos. 1.6.2 Proceso de cuantización haciendo uso del objeto ‘quantizer’ En este apartado se explica como usar la función ‘quantize’ con objetos ‘quantizer’. Se construye un objeto ‘quantizer’ para especificar los parámetros de cuantización que se van a usar cuando se cuantizen los datos. La función ‘quantize’ es la que va a permitir aplicar estos parámetros definidos con el objeto ‘quantizer’ a los datos a cuantizar. Una vez realizada la cuantización hay que tener en cuenta, que los parámetros asociados al objeto ‘quantizer’ pueden haber variado. Ejemplo

En la columna de la izquierda del Cuadro 1.9 se genera una secuencia de números aleatorios (‘randn’) reseteando previamente el generador al valor 0 (‘randn(‘state’,0)), también se definen las características del objeto ‘quantizer’. En la columna de la derecha del mismo cuadro se llevará a cabo la cuantización de los datos.

q.max ans =

-1.79769313486232e+308 q.noverflows ans =

0 y = quantize(q,x); q.max ans = 2.3726 q.noverflows ans = 15 reset(q) q.max ans = -1.7977e+308 q.noverflows ans= 0

randn('state',0); x = randn(100,4); q = quantizer([16,14]); q =

DataMode = fixed RoundMode = floor OverflowMode = saturate Format = [16 14] Max = reset Min = reset NOverflows = 0 NUnderflows = 0 NOperations = 0

___________________________________________________________________

24

Page 25: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________ Cuadro 1.9 Ejemplo objeto ‘quantizer’

Se puede observar como algunas propiedades de solo lectura asociadas al objeto ‘quantizer’ son modificadas tras realizar la cuantización usando la función ‘quantize’. Se puede convertir el valor del dato cuantizado a un dato en formato hexadecimal o binario dependiendo de la función que se use.

- ‘num2bin’: Se convierten los datos a binario. - ‘num2hex’: Se convierten los datos a hexadecimal. - ‘hex2num’: Se convierten los datos de formato hexadecimal a decimal. - ‘bin2num’: Se convierten los datos binarios a decimal.

Ejemplo

q = quantizer([3 2]); x = [0.75 -0.25 0.50 -0.50 0.25 -0.75 0 -1 ]; b = num2bin (q,x) b = 011 010 001 000 111 110 101 100

Cuadro 1.10 Ejemplo objeto ‘quantizer’

Se observa como para cada valor de ‘x’ se le asigna su representación en punto fijo y complemento a dos, haciendo uso de palabras de tres bits. De estos tres bits, dos de ellos son para la parte fraccional. 1.7 Conclusiones capítulo 1 En este primer capítulo se ha presentado la herramienta en punto fijo de MATLAB con sus distintos objetos asociados. La herramienta de diseño de filtros es una de las nuevas incorporaciones de la versión MATLAB 7.0 y en su estudio se centrará el siguiente capítulo. La interoperatividad entre la herramienta en punto fijo y la herramienta de diseño de filtros es lo que va a dar paso al diseño de filtros en punto fijo, permitiéndose gracias a esta conjunción la representación en punto fijo de las estados, coeficientes, etc... asociados al filtro, así como el uso de aritmética interna también en punto fijo para la realización de los algoritmos de implementación del filtro. La herramienta en punto fijo es la que va a permitir el uso de capacidades en punto fijo en la herramienta de diseño de filtros.

___________________________________________________________________

25

Page 26: 1. HERRAMIENTA EN PUNTO FIJO - bibing.us.esbibing.us.es/proyectos/abreproy/11177/fichero/Capitulo_1.pdf · punto fijo, la precisión de éste vendrá dado por el número de bits de

Proyecto final de Carrera. Ingeniería de Telecomunicación Diseño de filtros FIR con Herramientas Avanzadas ______________________________________________________________________

___________________________________________________________________

26