RF Wireless World

Browse articles, tutorials, tools, and vendors.

CORDIC Algorithm Basics

This page covers the basics of the CORDIC algorithm, including its function and common uses. CORDIC stands for Coordinate Rotation Digital Computer.

It’s a clever algorithm used to calculate trigonometric functions (like sine and cosine) and hyperbolic functions (like the inverse tangent). It relies on the concept of a lookup table.

Let’s say you want to calculate sin(φ) for some angle φ. A simple way to do this is to store all the values of sin(φ) for every possible value of φ in memory (RAM). Then, based on the input φ, you simply output the corresponding stored value.

CORDIC becomes especially useful when a hardware multiplier isn’t available. It’s frequently used in FPGAs (Field-Programmable Gate Arrays) and DSPs (Digital Signal Processors) where only subtraction, addition, table lookup, and bit-shift operations are readily available.

CORDIC is employed for operations such as sine, cosine, polar-to-rectangular coordinate conversion, general rotation, arctangent, vector magnitude, rectangular-to-polar conversion, arcsine, arccosine, and more.

It can also be adapted for linear functions, hyperbolic functions, square rooting, logarithms, and exponentials.

OperationModeInitializeDirection
Sine, CosineRotationx = 1/Aₙ , y = 0, z = αReduce z to Zero
Polar to Rect.Rotationx = (1/Aₙ)X mag , y = 0, z = X phaseReduce z to Zero
General RotationRotationx = (1/Aₙ)X₀ , y = (1/Aₙ)y₀ , z = αReduce z to Zero
ArctangentVectorx = (1/Aₙ)X₀ , y = (1/Aₙ)y₀ , z = 0Reduce y to zero
Vector MagnitudeVectorx = (1/Aₙ)X₀ , y = (1/Aₙ)y₀ , z = 0Reduce y to zero
Rect. to PolarVectorx = (1/Aₙ)X₀ , y = (1/Aₙ)y₀ , z = 0Reduce y to zero
Arcsine, ArccosineVectorx = (1/Aₙ), y = 0, arg = sin(α) or cos(α)Reduce y to value in arg register

CORDIC Rotation Mode and Vector Mode

There are two primary operational modes for CORDIC: rotation mode and vector mode.

Rotation Mode

CORDIC rotation mode

Vector Mode

CORDIC vector mode

The following table of CORDIC rotation angles is very useful and is typically stored in a lookup table for quick retrieval when needed.

CORDIC rotation angles