En primer lugar, declaro que nunca usé el núcleo CORDIC de Xilinx, pero conozco Xilinx y sé CORDIC ... Además, los invito a visitar Wikipedia para tener una mejor comprensión de lo que hace el núcleo.
La rotación aproximada es un punto confuso de la documentación de Xilinx Cordic 4.0. De hecho, el primer cuadrante es 0 a pi / 2, pero Xilinx ha modificado el algoritmo, probablemente porque prefirieron tener un ángulo con signo. Para Xilinx Cordic 4.0 en modo de traducción sin rotación aproximada, las coordenadas de entrada deben estar ubicadas entre pi / 4 y -pi / 4 (verificadas con simulaciones por David Quiñones).
El algoritmo CORDIC original opera en un vector con positivos X e Y. Si un vector está fuera de ese rango, debe ingresar los valores absolutos al algoritmo y modificar la salida en consecuencia. Por ejemplo, si X > 0
y Y < 0
, entonces calcule (r, theta) of (X, abs(Y))
y la salida (r, -theta)
. El módulo de rotación aproximada debe ocuparse de eso por usted y permitirle ingresar cualquier vector. Le sugiero que si elimina el módulo de rotación gruesa, verifique qué valores puede ingresar ya que la documentación es confusa.
La escala de compensación se refiere al hecho de que el algoritmo CORDIC escala la amplitud del vector con cada iteración. Cada iteración se escala en sqrt(1+2^(-2i))
, donde i
es el número de iteración. Entonces, si la longitud de tu vector es 1 y tienes infinitas iteraciones, el CORDIC te dará una longitud de aproximadamente 1.65. El módulo de escala de compensación lo reducirá a 1. Como nota al margen, la documentación de Xilinx escribe el factor de escala como 1/cos(atan(2^-i))
, que se reduce al sqrt
que di.