Friday, November 4, 2016

Fixed Point Representation Binary Options

Números de punto fijo / punto fijo Los números de punto fijo son una forma sencilla y fácil de expresar números fraccionarios, utilizando un número fijo de bits. Los sistemas sin soporte de hardware de punto flotante suelen utilizar números de punto fijo para representar números fraccionarios. (Los sistemas sin soporte de hardware de punto flotante incluyen una amplia gama de hardware, desde DSPs de punto fijo de gama alta, FPGAs y ASICs costosos que procesan los medios de transmisión más rápido que cualquier unidad de punto flotante construida hasta microcontroladores extremadamente bajos ). El término punto fijo se refiere a la posición del punto binario. El punto binario es análogo al punto decimal de un número de base diez, pero dado que éste es binario en lugar de decimal, se utiliza un término diferente. En binario, los bits pueden ser 0 o 1 y no hay ningún símbolo separado para designar dónde se encuentra el punto binario. Sin embargo, imaginamos o asumimos que el punto binario reside en una ubicación fija entre los bits designados en el número. Por ejemplo, en un número de 32 bits, podemos suponer que el punto binario existe directamente entre los bits 15 (15 porque el primer bit está numerado 0, no 1) y 16, dando 16 bits para la parte de número entero y 16 bits para La parte fraccionaria. Obsérvese que el bit más significativo en el campo de número entero se designa generalmente como el bit de signo dejando 15 bits para la magnitud de números enteros. Ancho y precisión La anchura de un número de punto fijo es el número total de bits asignados para el almacenamiento para el número de punto fijo. Si almacenamos la parte entera y la parte fraccionaria en diferentes ubicaciones de almacenamiento, el ancho sería la cantidad total de almacenamiento para el número. El rango de un número de punto fijo es la diferencia entre el número mínimo posible y el número máximo posible. La precisión de un número de punto fijo es el número total de bits para la parte fraccionaria del número. Debido a que podemos definir dónde queremos que se encuentre el punto binario fijo, la precisión puede ser cualquier número hasta e incluyendo el ancho del número. Tenga en cuenta, sin embargo, que cuanto más precisión tenemos, menor es el rango total que tenemos. Hay una serie de normas, pero en este libro vamos a utilizar n para el ancho de un número de punto fijo, p para la precisión, y R para el rango total. No todos los números pueden representarse exactamente por un número de punto fijo, por lo que se utiliza la aproximación más cercana. La fórmula para calcular la representación entera (X) en un formato Qm. n de un número de flotador (x) es: Para convertirlo de nuevo se usa la siguiente fórmula: Algunos ejemplos en formato Q3.4: Flotadores elegidos aleatoriamente: Algunos ejemplos en El formato (muy común) 1 Q7.8: Debido a que la posición del punto binario es totalmente conceptual, la lógica para sumar y restar números de punto fijo es idéntica a la lógica requerida para sumar y restar números enteros. Por lo tanto, al agregar la mitad más una mitad en formato Q3.4, esperamos ver: Que es igual a uno como esperábamos. Esto se aplica igualmente a la resta. En otras palabras, cuando sumamos o restamos números de punto fijo, el punto binario en la suma (o diferencia) estará localizado exactamente en el mismo lugar que en los dos números sobre los cuales estamos operando. Al multiplicar dos números de punto fijo de 8 bits necesitaremos 16 bits para contener el producto. Claramente, puesto que hay un número diferente de bits en el resultado en comparación con las entradas, se espera que el punto binario se mueva. Sin embargo, funciona exactamente de la misma manera en binario que en decimal. Cuando multiplicamos dos números en decimal, la posición del punto decimal es N dígitos a la izquierda del dígito más a la derecha del producto, donde N es la suma del número de dígitos situados al lado derecho del punto decimal en el multiplicador y el multiplicando . Así, en decimal cuando multiplicamos 0,2 veces 0,02, obtenemos: El multiplicador tiene un dígito a la derecha del punto decimal, y el multiplicando tiene dos dígitos a la derecha del punto decimal. Así, el producto tiene tres dígitos a la derecha del punto decimal (es decir, el punto decimal se encuentra tres dígitos a la izquierda). Funciona igual en binario. Del ejemplo de la adición arriba, sabemos que la mitad del número uno en el formato Q3.4 es igual a 0x8 en hexadecimal. Puesto que 0x8 veces 0x8 en hexadecimal es 0x0040 (también en hexadecimal), el resultado de punto fijo también se puede esperar que sea 0x0040 - siempre y cuando sepamos dónde se encuentra el punto binario. Permite escribir el producto en binario: Dado que tanto el multiplicador como el multiplicando tienen cuatro bits a la derecha del punto binario, la ubicación del punto binario en el producto es de ocho bits a la izquierda. Por lo tanto, nuestra respuesta es 00000000.01000000, que es, como cabría esperar, igual a un trimestre. Si queremos que el formato de la salida sea el mismo que el formato de la entrada, debemos restringir el rango de las entradas para evitar el desbordamiento. Convertir de Q7.8 de nuevo a Q3.4 es una simple cuestión de cambiar el producto a la derecha por 4 bits. Los números de punto fijo se usan a menudo internamente en filtros digitales incluyendo filtros FIR y IIR. Hay una serie de consideraciones prácticas para implementar algoritmos FIR e IIR usando números de punto fijo. 2 3 Muchos sistemas embebidos que producen ondas senoidales, como los generadores DTMF, almacenan una tabla sinusoidal en la memoria del programa. (Se utiliza para la aproximación de las funciones matemáticas sine () y coseno ()). Dado que tales sistemas tienen a menudo cantidades muy limitadas de memoria de programa, a menudo los números de punto fijo se usan de dos maneras diferentes cuando se usan tales tablas: los valores almacenados en las tablas y los clavos utilizados para indexar en estas tablas. Valores almacenados en la tabla de seno Editar Normalmente, un cuadrante de las funciones seno y coseno se almacenan en esa tabla. Típicamente es un cuadrante donde esas funciones producen valores de salida en el rango de 0 a 1. Los valores en tales tablas se almacenan generalmente como números de punto fijo - a menudo números de 16 bits en formato Q0.16 sin signo o números de 8 bits en Valores sin signo Q0.8. Parece que hay dos formas populares de manejar el hecho de que Q0.16 no puede manejar exactamente 1.0, solo maneja números de 0 a (1.0-2-16): (a) Escala por exactamente una potencia de dos (en este caso 216 ), Como la mayoría de los otros sistemas de punto fijo, y reemplazar (clip) valores demasiado grandes para almacenar como ese mayor valor que se puede almacenar: por lo que 0 se representa como 0, 0,5 representado como 0x8000, (1,0-2-16) representado como 0xFFFF y 1,0 truncado y también se representa como 0xFFFF. 4 (b) Escala por el mayor valor posible (en este caso 0xFFFF), por lo tanto los valores máximo y mínimo se pueden representar exactamente: por lo que 0 se representa como 0, (1,0-2-16) representado como 0xFFFE, y 1,0 es Representado exactamente como 0xFFFF. 5 Algunas personas dibujan círculos bastante precisos y calculan seno y coseno bastante precisos con una spline de Bezier. La tabla se convierte en 8 valores que representan una sola curva de Bezier que se aproxima 1/8 de un círculo a una precisión de aproximadamente 4 partes por millón, o 1/4 de un círculo a una precisión de aproximadamente 1 parte en mil. 6 7 Muchas personas prefieren representar la rotación (como los ángulos) en términos de giros. La parte entera de las vueltas dice cuántas revoluciones enteras han sucedido. La parte fraccionaria de las vueltas, cuando se multiplica por 360 (o 1 2 8) usando la aritmética de punto fijo firmada estándar, da un ángulo válido en el rango de -180 grados (- radianes) a 180 grados (radianes). En algunos casos, es conveniente utilizar la multiplicación sin signo (en lugar de la multiplicación firmada) en un ángulo binario, que da el ángulo correcto en el rango de 0 a 360 grados (2 radianes). La ventaja principal de almacenar ángulos como una fracción de punto fijo de un giro es la velocidad. Combinar algún ángulo de posición actual con algún ángulo incremental positivo o negativo para obtener la nueva posición es muy rápido, incluso en microcontroladores lentos de 8 bits: toma una sola adición entera, ignorando el desbordamiento. Otros formatos para almacenar ángulos requieren la misma adición, además de casos especiales para manejar los casos de borde de desbordamiento de 360 ​​grados o de 0 grados. En comparación con el almacenamiento de ángulos en un formato de ángulo binario, el almacenamiento de ángulos en cualquier otro formato - como 360 grados para dar una revolución completa, o 2 radianes para dar una revolución completa - inevitablemente da lugar a algunos patrones de bits dando ángulos fuera de ese rango, Requiriendo pasos adicionales para reducir el valor al rango deseado, o resulta en algunos patrones de bits que no son ángulos válidos en absoluto (NaN), o ambos. Usando un formato de ángulo binario en unidades de turnos nos permite rápidamente (usando mayúsculas y minúsculas, evitando multiplicar) separar los bits en: bits que representan turnos enteros (ignorados al mirar el seno del ángulo algunos sistemas nunca se molestan en almacenar estos Bits en primer lugar) 2 bits que representan los bits de cuadrante que se utilizan directamente para indexar en la tabla de búsqueda bits de orden inferior menos de un paso en la tabla de índice (bits de acumulador de fase, ignorados al buscar el seno del ángulo sin Interpolación) Los bits de fase de orden inferior proporcionan una resolución de frecuencia mejorada, incluso sin interpolación. Algunos sistemas usan los bits de orden inferior para interpolar linealmente entre los valores de la tabla. 12 Esto le permite obtener mayor precisión utilizando una tabla más pequeña (ahorrando espacio de programa), sacrificando unos cuantos ciclos en este cálculo de interpolación extra. Algunos sistemas obtienen aún más precisión utilizando una tabla aún más pequeña sacrificando unos cuantos ciclos más para usar esos bits de orden inferior para calcular la interpolación cúbica. 4 Tal vez el formato de ángulo binario más común es brads. Brads Edit Muchos sistemas embebidos almacenan el ángulo, la parte fraccionaria de las curvas, en un formato de ángulo binario de un solo byte. 13 Hay varias maneras de interpretar el valor en ese byte, todos los cuales significan (más o menos) el mismo ángulo: un ángulo en unidades de brads (radianes binarios) almacenado como un entero sin signo de 8 bits, de 0 a 255 brads y Ángulo en unidades de brads almacenados como un entero con signo de 8 bits, de -128 a 127 brads un ángulo en unidades de vueltas, almacenado como una vuelta fraccionada en formato no firmado Q0.8, de 0 a poco menos de 1 vuelta completa un ángulo en unidades De vueltas, almacenado como una vuelta fraccionada en el formato Q0.7 () firmado, de -1/2 a poco menos de 1/2 vuelta completa Una vuelta completa 14 es 256 brads 15 es 360 grados. Si un solo byte no da suficiente precisión, el sistema brad se puede extender fácilmente con más bits fraccionarios - 65.536 cuentas por turno pueden ser representadas en 16 bits. 16 Para una lectura adicional Edit3.7. Punto fijo binario Un sistema binario de punto fijo es otro ejemplo de un sistema de números arábigos. La única diferencia entre decimal es la raíz. Binario usa una base de 2 en lugar de 10. Especificamos la raíz (base) usando un subíndice en el número. De ahora en adelante, no asumimos una base de 10. 1001.101 2 1 2 3 0 2 2 0 2 1 1 2 0 1 2 -1 0 2 -2 1 2 -3 Una forma fácil de leer binario es trabajando a la izquierda y Desde el punto binario, duplicando o reduciendo a la mitad el valor de los dígitos en cada paso: Los dígitos utilizados en cualquier sistema árabe siempre van de 0 a radix-1. El uso de dígitos más grandes haría posible representar un valor de más de una manera. Por ejemplo, si el punto fijo binario permitió el uso del dígito 2, entonces el número dos podría representarse como 2 o 10. 3.7.1.Limitaciones de Binario Convertir 1/10 a binario. No se puede hacer: como tratar de representar 1/3 en decimal. Requiere un número infinito de dígitos. Este es un problema para los cálculos monetarios. Soluciones (BCD, centavos) Convertidor de punto fijo Trabajar con valores de punto fijo Necesidad de traducir fract s entre binario y decimal rápidamente Tenemos una herramienta que hace esto fácil. Esta herramienta requiere que JavaScript esté habilitado en su navegador. Los compiladores ofrecen una variedad de tipos de datos para facilitar el desarrollo. Esto evita que los desarrolladores tengan que realizar conversiones manuales y permite a los compiladores optimizar inteligentemente los cálculos de tipo mixto. Algunos compiladores de Byte Craft Limited pueden utilizar valores de punto fijo: valores fraccionarios entre 0 y 1 de varias precisiones y valores de acumulador con componentes enteros pequeños y componentes fraccionarios. Mientras que nuestros compiladores entienden el punto fijo, otras aplicaciones pueden no hacerlo todavía. La calculadora de Windows, por ejemplo, no convierte partes fraccionarias de números. Incluso JavaScripts propio tipo de número realiza operaciones binarias sólo en 32 bits enteros. Así que escribimos una herramienta que trata con TR 18037 de punto fijo fraccional y tipos de acumuladores. Convierte entre representaciones decimales y binarias de valores fraccionarios y acumuladores. Para usarlo, introduzca un número decimal, hexadecimal (0x) o binario (0b) en la parte superior. Seleccione entre firmado o sin firmar y haga clic en un tipo de datos de destino. Si ingresó un valor decimal, seleccione el tipo al que desea convertir. El resultado será acolchado o truncado en consecuencia. Si introdujo un valor hexadecimal o decimal, especifique el tipo del valor de entrada. El resultado será decimal. Haga clic en el botón de tipo repetidamente para cambiar entre las representaciones. Hemos encontrado esta herramienta muy útil para internalizar cómo funcionan las posiciones de bit de los valores de punto fijo: la mayoría de nosotros puede hacer dos poderes en nuestra cabeza - pero sólo para exponentes positivos Nota: Esta herramienta realmente realiza los cálculos en su máquina local.


No comments:

Post a Comment