Punto fijo sobre template - facultad.efn.uncor.edu
Transcript of Punto fijo sobre template - facultad.efn.uncor.edu
Herramientas de Diseño y Aritmética de Punto Fijo
Página 1 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
CAPÍTULO V INTRODUCCIÓN
El objetivo de este capítulo es introducir al lector en las técnicas de diseño de sistemas digitales
empleando aritmética de punto fijo. El enfoque del mismo es sustancialmente práctico, dejando las
cuestiones más teóricas a la abundante literatura disponible.
ARITMÉTICAS EXISTENTES
En el mundo de la programación existen dos tipos de representación numérica:
Figura 1. Diferencias entre punto fijo y punto flotante
En el caso de la aritmética de punto fijo, el punto binario se encuentra siempre en la misma posición, es
decir, existirán m bits para la parte entera y n bits para la parte decimal. En algunos casos puede ocurrir
que 0=m (no existe parte entera) o bien, 0=n (no existe parte decimal). En cambio, para la
aritmética de punto flotante, la ubicación del punto binario puede variar (Figura 1).
En el presente apunte se ahondará sobre la aritmética de punto fijo ya que es la utilizada tanto por la
familia DSP5680x como por la mayoría de los DSP´s disponibles en el mercado.
ARITMÉTICA DE PUNTO FIJO
Muchas veces cuando se trabaja con procesadores digitales pasa por desapercibido el tipo de aritmética
utilizada. En cambio, una de las cuestiones donde se hace más hincapié es la longitud de palabra. Así, se
Herramientas de Diseño y Aritmética de Punto Fijo
Página 2 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
sabe bien que un registro de 4 bits permite representar 16 combinaciones diferentes, pero pocas veces
el programador se detiene a pensar qué está diciendo ese conjunto combinaciones o cómo
interpretarlos.
Se supone que un ADC de 4 bits, el cual se encuentra digitalizando una señal cualquiera, entrega la
siguiente muestra (en base binaria):
20101=Qx (1)
Ahora bien, ¿qué número decimal representa esta muestra? La respuesta no es una sola, ni varias, sino
infintas, ya que la interpretación de esa combinación dependerá de lo que el programador defina como
convención en su proyecto. Por ejemplo, se podría suponer la siguiente interpretación (en base
decimal):
( )100123 .4.5,0.2 bbbbxQ +++= (2)
Así, el número decimal representado por la muestra anterior será:
( ) 1010 5,41.401.5,00.2 =+++=Qx (3)
Pero la cuestión no es tan liberal. En microcontroladores, DSP´s y microprocesadores comerciales esta
convención no es determinada por el usuario sino por el fabricante.
Para un conjunto de bits como el de la Figura 2, existe una serie de interpretaciones posibles que son
ampliamente aceptadas y que se resumen en la Tabla 1.
Figura 2. Conjunto de bits
Herramientas de Diseño y Aritmética de Punto Fijo
Página 3 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Tabla 1. Posibles interpretaciones de un conjunto de bits
Interpretación Expresión Rango
Entero sin signo ∑−
=
=1
0
2.)(m
i
iibnx 120 −≤≤ m
Qx
Entero con signo ∑−
=
−− +−=
2
0
11 2.2.)(
m
i
ii
mm bbnx 122 11 −≤≤− −− m
Qm x
Fraccional sin signo en complemento a 2 ( )∑−
=
−−=1
0
2.)(m
i
imibnx m
Qx −−≤≤ 210
Fraccional con signo en complemento a 2 ( )∑−
=
−−−− +−=
2
0
11 2.)(
m
i
imim bbnx ( )1211 −−−≤≤− m
Qx
Generalmente, para el procesamiento de señales se emplea la aritmética fraccional con signo en
complemento a 2, mientras que para indexado y punteros a memoria se utiliza la aritmética entera.
Este es el caso de los DSP de la familia DSP5680x.
Implementar por hardware una aritmética de punto fijo conlleva una mayor simplicidad, lo cual se
traduce directamente en menores costos. Además ocupa menor superficie de silicio respecto a una
unidad de punto flotante, lo que permite agregar al procesador más módulos y memoria.
Entre las desventajas más significativas se encuentra el hecho de que los errores de truncamiento con
esta arquitectura pueden ser significativos, degradando la calidad de los algoritmos implementados.
Para lograr en punto fijo la misma precisión que se logra con punto flotante se necesitaría una cantidad
muy grande de bits. De hecho, recurriendo al standard ANSI/IEEE Std. 754‐1985 se encuentra que el
menor valor representable en punto flotante de 32 bits es 3810.2,1 −± . Para lograr la misma precisión en
punto fijo se requerirían ni más ni menos que:
( )382
38 10.2,1log10.2,12 −−− −=⇒= nn (4)
Herramientas de Diseño y Aritmética de Punto Fijo
Página 4 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
¡ bits bits n 12697,125 ≅= ! (5)
casi el cuádruplo de bits que para la misma precisión en aritmética flotante.
RELACIÓN SEÑAL‐RUIDO
Se supone que se está digitalizando una señal unipolar (Figura 3) cuyo rango dinámico es RD. El paso de
cuantización es Q. Existen dos métodos de cuantización:
• Redondeo. La señal digitalizada toma el valor más cercano.
• Truncado. La señal digitalizada toma siempre el menor valor.
Para la señal de la Figura 3 se aplica una cuantización por redondeo. Ahora bien, si la señal de entrada
x(n) (continua en amplitud, discreta en tiempo) varía dentro del mismo paso de cuantización, la salida
digitalizada xQ(n) (discreta en amplitud y tiempo) será constante, aún cuando la señal x(n) esté
cambiando. Este efecto se interpreta como ruido ya que implica una degradación irreversible de la señal
analógica. Por lo tanto, siempre es interesante conocer cuál es la relación señal‐ruido del sistema digital
empleado:
⎟⎠⎞
⎜⎝⎛=
QRDSNR log.20 (6)
y como:
QRDRDQ n
n =⇒= 22
(7)
Reemplazando (7) en (6):
( ) ( )2log..202log.20 nSNR n == (8) Finalmente:
nQ
RDSNR .02,6log.20 =⎟⎠⎞
⎜⎝⎛= (9)
Herramientas de Diseño y Aritmética de Punto Fijo
Página 5 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Esta última ecuación es muy conocida como la regla de los “6dB por bit”, ya que la relación señal‐ruido
aumenta aproximadamente 6dB por cada bit de resolución que se agrega. Esto es lógico ya que,
suponiendo que se mantiene constante el paso de cuantización Q, agregar un bit extra implica duplicar
la cantidad de combinaciones binarias o lo que es lo mismo aumentarla en 6dB.
Figura 3. Proceso de cuantificación por redondeo
La ecuación 9 permite determinar la cantidad de bits requeridos para lograr una SNR de diseño.
PUNTO FIJO EN LA FAMILIA DSP56800
La ALU (Arithmetic Logic Unit, Unidad Lógica y Aritmética) de un DSP es el lugar o bloque dentro de
núcleo donde se realizan todas las operaciones aritméticas y lógicas, tal como sus siglas lo indican. El
DSP56805 tiene una ALU que ofrece las siguientes características:
• Tres registros de entrada de 16 bits (X0, Y0 y Y1)
• Dos registros acumuladores (A y B) de longitud extendida (36 bits), los cuales pueden ser
divididos en los siguientes subregistros (Figura 4):
Dos registros de 16 bits (A0 y B0)
Dos registros de 16 bits (A1 y B1)
Herramientas de Diseño y Aritmética de Punto Fijo
Página 6 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Dos registros de extensión de 4 bits (A2 y B2)
• Un limitador (data limiter). Previene desbordamientos (overflows).
• Una unidad de rotación de 16 bits (16‐bit barrel shifter). Permite rotar entre 0 y 15 posiciones un
conjunto de bits en un solo ciclo de instrucción.
• Una unidad de multiplicación y acumulación (MAC). Permite ejecutar una operación de
multiplicación y acumulación en un único ciclo de instrucción.
Figura 4. Registros de la ALU (DSP56800 Family manual, 2005)
Esta unidad es capaz de operar con datos enteros o fraccionales, dependiendo de la instrucción
empleada para realizar el cálculo. Por ejemplo, la instrucción MAC opera por defecto con números
fraccionarios, mientras que la instrucción IMPY16 realiza una multiplicación con signo entre dos
operandos de tipo entero (para más detalles sobre este tipo de instrucciones recurrir a la página pág.
3.20, sección “3.3.5.2 Integer multiplication” del DSP56800 Family manual). La diferencia entre ambas
multiplicaciones tiene que ver con la cantidad de bits requeridos en el registro donde se almacenará el
resultado.
El ejemplo de la Figura 5, se supone número binario de cuatro dígitos el cual puede ser interpretado de
de dos maneras distintas:
Herramientas de Diseño y Aritmética de Punto Fijo
Página 7 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Figura 5. Valor binario arbitrario
Si se realiza la multiplicación de este valor por si mismo. Se obtendrán dos resultados distintos según
cómo sean considerados los operandos (ver Figura 6 y Figura 7).
Figura 6. Resultado de la multiplicación considerando operandos enteros
Figura 7. Resultado de la multiplicación considerando operandos en punto fijo
Para el caso de la Figura 6, los operandos son interpretados como enteros sin signo, lo cual conduce a un
resultado cuya longitud es (2.m ‐ 1) bits. En este caso m = 4 por lo tanto el resultado de esta operación
requiere 7 bits. Por el contrario, para el resultado expuesto en la Figura 7, los operandos fueron
considerados como fraccionarios (en punto fijo) sin signo. El resultado sigue siendo de 4 bits de longitud
(la misma no se modifica).
Herramientas de Diseño y Aritmética de Punto Fijo
Página 8 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Sin entrar en detalles respecto a su funcionamiento, la Figura 8 muestra la arquitectura de la ALU del
DSP56805. Se observa que la misma es alimentada por los buses CGDB (Core global data bus) y XDB2 (X
memory data bus 2). Los elementos más importantes son el multiplicador, el sumador y el conjunto de
registros de entrada y salida de datos. Entre estos tres simples componentes, sumados al retardo digital,
es posible realizar prácticamente todas las operaciones de procesamiento digital.
El ancho de las variables de punto fijo en este DSP es de 16 bits y están expresadas en complemento a 2
con signo. Su rango es:
1521156805
−−≤≤−DSPQx (10)
Expresando una variable en forma de sumatoria:
150
141
213
11415 2.2....2.2.
56805
−−−− +++++−= bbbbbxDSPQ (11)
Multiplicación y adición de números en punto fijo. Para la multiplicación de dos números en punto fijo
cuyo rango sea el especificado por la ecuación 10, el resultado siempre será menor que 1. Sin embargo,
para la adición de dos números en punto fijo, se debe cuidar que el resultado se mantenga entre ‐1 y 1
para evitar desbordamientos. Por ejemplo, si se quiere sumar 2,17,05,0 =+ se deberá realizar un
escalamiento previo de la siguiente manera: ( ) 6,07,05,0.5,0 =+ . En realidad, si los operandos son aún
mayores el factor de escala deberá ser menor para permitir que el resultado permanezca dentro de los
límites de las variables de punto fijo.
HERRAMIENTAS DE DISEÑO
Gracias a la existencia de una gran cantidad de herramientas de diseño y simulación es posible evaluar el
desempeño de un filtro o cualquier sistema digital sin necesidad de hacer una prueba sobre algún
hardware específico, con el agregado de la seguridad que brindan las técnicas digitales de poder repetir
los resultados de una simulación en un sistema real con un grado de exactitud muy alto.
Herramientas de Diseño y Aritmética de Punto Fijo
Página 9 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
A continuación, se realiza una introducción a las herramientas más importantes provistas por Matlab
para el diseño de filtros digitales empleando aritmética de punto fijo.
Figura 8. Arquitectura de la ALU del DSP56805 (DSP56800 Family manual, 2005)
FDA TOOL ‐ MATLAB
Esta herramienta es muy amiga de quienes deben diseñar filtros digitales de cualquier tipo y con
cualquier clase de especificaciones. Para ejecutarla es suficiente con tipear la sentencia “fdatool” en el
command window de Matlab.
Unidad MAC
Herramientas de Diseño y Aritmética de Punto Fijo
Página 10 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Figura 9. Vista general de la interfase del FDAtool
La función de este toolbox es generar los coeficientes de un filtro digital a partir de su hoja de
especificaciones. El recuadro verde de la Figura 9 abarca el sector de la interfase donde se ingresan las
características del filtro, mientras que el recuadro azul engloba el área donde se presentan los
resultados del filtro diseñado (respuesta en amplitud, en fase, al impulso, al escalón, mapa de ceros y
polos, coeficientes, etc.) con su conjunto de herramientas.
Ejemplo. Se necesita diseñar un filtro con las siguientes características:
• Tipo de filtro: FIR pasabajo
• KHzfc 5=
• dBGBP 0=
• dBAttKHzBR 60
6−=
• KHzfm 48=
• Plataforma: DSP56805
Herramientas de Diseño y Aritmética de Punto Fijo
Página 11 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Se requiere un filtro FIR que corte en 5KHz y que atenúe 60dB a 6KHz (en la banda de rechazo). La
ganancia en la banda de paso es de 0dB. La señal de entrada se muestrea a 48KHz y la plataforma
empleada es el DSP56805 de 16 bits. Recurriendo al FDAtool se obtiene un filtro de orden 120 para
lograr estos requerimientos. La respuesta en frecuencia se presenta en la Figura 10.
Figura 10. Respuesta en amplitud del filtro requerido
Hasta aquí todo funciona bien. Pero cuando el programador quiera llevar este filtro al DSP deberá
cuantizar o cuantificar los coeficientes para poder cargarlos en la memoria del procesador. Cuantizar
quiere decir convertir un dato cuya variación en amplitud es continua en otro cuya variación en amplitud
es discreta. Este proceso ocurre también en la digitalización de una señal analógica a través de un ADC.
Cuando el filtro es diseñado por primera vez en FDAtool, la aritmética empleada por defecto es punto
flotante de 64 bits (doble precisión), la cual provee una precisión tan grande que se puede suponer que
los valores representados son de amplitud continua. Ahora bien, en FDAtool para cuantizar los
coeficientes se hace click en el botón “Set quantization parameters” ubicado a la izquierda de la
interfase del programa, tal como lo muestra la Figura 11.
Herramientas de Diseño y Aritmética de Punto Fijo
Página 12 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Figura 11. Acceso al módulo de cuantización
Una vez que se haya accedido al módulo de cuantización se verá que la precisión seleccionada por
defecto es la mencionada anteriormente (Figura 12). Haciendo click en esta caja de opciones se
selecciona la aritmética de punto fijo (fixed‐point).
Figura 12. Aritmética seleccionada por defecto
Una vez que se ha seleccionado la opción fixed‐point se debe especificar la longitud de palabra a
emplear (en la casilla “Numerator word length”). En este caso, debido al tipo de arquitectura del DSP, se
escribe un valor igual a 16. Se desactiva el checkbox “Best precision fraction length” y se indica que la
longitud de la fracción del numerador (“Numerator fraction length”) es de 15 bits (ya que un bit es para
el signo y otros 15 para el número propiamente dicho). Mediante esta configuración se están
respetando las características del DSP.
Objeto fi. Tipeando la sentencia “fi” en el command window de Matlab se puede acceder a un objeto
que permite analizar en detalle el funcionamiento de las variables en punto fijo. En este apunte no se
ahondará sobre el funcionamiento del mismo. Para más detalles recurrir al help de este comando
tipeando “help fi”.
Herramientas de Diseño y Aritmética de Punto Fijo
Página 13 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Figura 13. Módulo de configuración de las propiedades de las variables en punto fijo
IMPACTO DE LA ARITMÉTICA DE PUNTO FIJO EN EL DESEMPEÑO DE FILTROS DIGITALES
Uno de los puntos más importantes a tener en cuenta a la hora de implementar sistemas digitales es el
error introducido por trabajar en aritmética de punto fijo. El proceso de cuantificación equivale a añadir
a cada valor una componente de ruido (Figura 14), el cual puede ser modelado como ruido blanco
gaussiano.
Figura 14. Modelo equivalente para un cuantificador de punto fijo
Herramientas de Diseño y Aritmética de Punto Fijo
Página 14 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Las consecuencias de este error en general no son menores y deben ser tenidas en cuenta con el fin
aplicar las acciones correctivas o preventivas necesarias. A modo de ejemplo, la Figura 15 muestra la
respuesta en amplitud de un filtro FIR tipo notch o eliminabanda cuya frecuencia central es de 8,25KHz.
Si ahora se examina con mayor detalle esta respuesta (Figura 16) se observarán dos curvas:
• Línea de puntos: Respuesta en frecuencia del filtro precuantización
• Línea continua: Respuesta en frecuencia del filtro postcuantización
El análisis muestra que en este caso el efecto de cuantizar los coeficientes produce una variación de la
respuesta en frecuencia, respecto a la original. Quedará a criterio del diseñador aceptar o rechazar este
resultado.
En otros casos más extremos, la cuantización de los coeficientes de un filtro realimentado (IIR) puede
llevar a la inestabilidad del conjunto, aún cuando el filtro original es estable.
Figura 15. Respuesta en amplitud de un filtro notch
Herramientas de Diseño y Aritmética de Punto Fijo
Página 15 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Figura 16. Consecuencias de la cuantización
PUNTO FIJO EN CODEWARRIOR
El compilador de Codewarrior permite declarar variables de tipo punto fijo dentro del código C. Para ello
se utilizan las sentencias contenidas en la Tabla 2.
Tabla 2. Declaraciones de variables de punto fijo
Tipo Declaración Tamaño Rango
Fixed __fixed__ 16 11 <≤− Qx
Short fixed __shortfixed__ 16 11 <≤− Qx
Long fixed __longfixed__ 32 11 <≤− Qx
Herramientas de Diseño y Aritmética de Punto Fijo
Página 16 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Debido a que el compilador está adaptado a la arquitectura del DSP56805 las variables de punto fijo se
comportarán como una variables fraccionarias de 16 o 32 bits con signo en complemento a 2.
Ejemplo: La declaración de una variable en punto fijo es similar a la de cualquier otro tipo:
__fixed__ mi_variable;
__shortfixed__ mi_variable;
__longfixed__ mi_variable;
Ahora la variable mi_variable será interpretada por el compilador como una variable de punto fijo con
todas las propiedades del lenguaje C.
Existe otro conjunto de sentencias cuya función es relacionar los tipos de variables intrínsecos de C (int, short, char, long, etc.) con las variables de punto fijo. Las mismas se listan en la
Tabla 3.
Tabla 3. Conjunto de sentencias para convertir tipos
Sentencia Descripción
__fixed2int Convierte un valor en punto fijo de 16 bits (declarado como __fixed__) a un entero de 16 bits (declarado como int)
__fixed2long Convierte un valor en punto fijo de 32 bits (declarado como __longfixed__) a un entero de 32 bits (declarado como long)
__fixed2short Convierte un valor en punto fijo de 16 bits (declarado como __shortfixed__) a un entero de 16 bits (declarado como short)
__int2fixed Convierte un valor entero de 16 bits (declarado como int) a un valor en punto fijo de 16 bits (declarado como __fixed__)
__long2fixed Convierte un valor entero de 32 bits (declarado como long) a un valor en punto fijo de 32 bits (declarado como __longfixed__)
__short2fixed Convierte un valor entero de 16 bits (declarado como short) a un valor en punto fijo de 32 bits (declarado como __shortfixed__)
Herramientas de Diseño y Aritmética de Punto Fijo
Página 17 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Ejemplo:
1 __fixed__ var_fixed = -0.25;
2 int var_int;
3 void funcion1(void){
4 var_int = __fixed2int(var_fixed);
5 }
De acuerdo a lo visto anteriormente, la representación a nivel de bits de var_fixed se representa en la
Figura 17.
Figura 17. Representación a nivel de bits del valor -0,25 en punto fijo
Luego de ejecutar la instrucción número 4 el contenido (a nivel de bits) de var_int será el mismo que el
de var_fixed, con la diferencia de que la interpretación por parte del DSP es completamente diferente. El
valor final de var_int será:
57344222intvar_ 131415 =++=
Como se observa estas sentencias permiten copiar el contenido de la variable origen en la variable
destino sin modificar la información a nivel de bits.
Herramientas de Diseño y Aritmética de Punto Fijo
Página 18 de 18
FCEFyN Universidad Nacional de Cordoba
Procesamiento Digital de Señales – FCEFyN – UNC Herramientas de Diseño y Aritmética de Punto Fijo
Vale decir que si se trabaja directamente sobre Assembler el tipo de variable utilizado para las
operaciones aritméticas será interpretado como punto fijo o entero según la instrucción empleada, tal
como se mencionó anteriormente.
BIBLIOGRAFÍA
Steven W. Smith, 2003. The Scientist and Engineer's Guide to Digital Signal Processing..
www.dspguide.com.
B. A. Shenoi, 2006. Introduction to digital signal processing and digital design. Editorial Wiley.
DSP56800 Familiy manual, 16‐bit digital signal controllers. DSP56800FM. Rev. 3.1, 11/2005.
DSP56800 User manual, 16‐bit digital signal controllers. DSP56F801‐7UM. Rev. 8, 13/2007.
CodeWarrior Development Studio for Freescale 56800/E Digital Signal Controllers:
DSP56F80x/DSP56F82x Family Targeting Manual. Rev. November 6, 2007.