CORDIC

CORDIC (COordinate Rotation DIgital Computer), también método de dígito por dígito o algoritmo de Volder, es un simple y eficiente algoritmo para calcular funciones hiperbólicas y trigonométricas. Típicamente es usado cuando no hay disponible un hardware para multiplicaciones (por ejemplo, en microcontroladores y FPGAs simples) pues las únicas operaciones que requiere son suma, resta, desplazamientos de bits (bitshift) y búsqueda en tablas (Lookup table).

El algoritmo CORDIC moderno fue descrito por primera vez en 1959 por Jack E. Volder. Fue desarrollado en el departamento de aeroelectrónica de Convair para substituir un resolver analógico en el computador de navegación del bombardero B-58,[1]​ aunque es similar a las técnicas publicadas por Henry Briggs desde 1624. John Stephen Walther, en Hewlett-Packard, generalizó más el algoritmo, permitiendo calcular funciones hiperbólicas, exponenciales, logaritmos, multiplicación, división, y la raíz cuadrada.[2]

Originalmente, CORDIC fue implementado usando el sistema de numeración binario. En los años 1970, la implementación en el sistema de numeración decimal del CORDIC llegó a ser usado extensamente en las calculadoras de bolsillo, la mayoría de las cuales operaba en binary-coded decimal (BCD) en vez de binario. CORDIC está particularmente bien adaptado para las calculadoras de mano, un uso para las cuales el costo es mucho más importante que la velocidad, es decir, el número de puertas lógicas del chip tiene que ser reducido al mínimo. También las subrutinas CORDIC para las funciones trigonométricas e hiperbólicas pueden compartir la mayor parte de su código.

Historia y desarrollo

Propuestas y métodos similares fueron publicados primero por Henry Briggs en 1624 y Robert Flower in 1771, pero CORDIC está optimizado para CPU de baja complejidad, que no tengan un módulo dedicado a resolver multiplicaciones por hardware.

El planteamiento en el que se basa CORDIC fue concebido en 1956 por Jack E. Volder en el departamento de aeroelectronica de Convair, ya que necesitaba reemplazar un módulo analógico del B-58 por un sistema más preciso que se ejecutara en tiempo real.

En su investigación Volder, se basó en la fórmula del 'CRC Handbook of Chemistry and Physics':

K n R sin ( θ ± φ ) = R sin ( θ ) ± 2 n R cos ( θ ) K n R cos ( θ ± φ ) = R cos ( θ ) 2 n R sin ( θ ) con  K n = 1 + 2 2 n , tan ( φ ) = 2 n . {\displaystyle {\begin{aligned}&K_{n}R\sin(\theta \pm \varphi )=R\sin(\theta )\pm 2^{-n}R\cos(\theta )\\&K_{n}R\cos(\theta \pm \varphi )=R\cos(\theta )\mp 2^{-n}R\sin(\theta )\\{\text{con }}&K_{n}={\sqrt {1+2^{-2n}}},\quad \tan(\varphi )=2^{-n}.\end{aligned}}}

Vemos que se basa en las fórmulas trigonométricas de sumas de ángulos.

Referencias

  1. J. E. Volder, "The Birth of CORDIC", J. VLSI Signal Processing 25, 101 (2000).
  2. J. S. Walther, "The Story of Unified CORDIC", J. VLSI Signal Processing 25, 107 (2000).

Enlaces externos

  • CORDIC Bibliography Site
  • The CORDIC Algorithm
  • CORDIC FAQ
  • FPGAs for Sound Synthesis
  • CORDIC Vectoring with Arbitrary Target Value
  • Double Iteration Method for CORDIC
  • USENET discussion
  • CORDIC-based Computation of ArcCos and 1 t 2 {\displaystyle {\sqrt {1-t^{2}}}}
  • BASIC Stamp, CORDIC math implementation
  • Another USENET discussion
  • CORDIC information
  • CORDIC implementation in verilog.
  • CORDIC as implemented in the ROM of the HP-35 - Jacques Laporte (step by step analysis, simulator running the real ROM with breakpoints and trace facility.
  • Tutorial and MATLAB Implementation - Using CORDIC to Estimate Phase of a Complex Number
  • 50-th Anniversary of the CORDIC Algorithm
Control de autoridades
  • Proyectos Wikimedia
  • Wd Datos: Q116076
  • Wd Datos: Q116076