Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
CORDIC
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Applications == CORDIC uses simple shift-add operations for several computing tasks such as the calculation of trigonometric, hyperbolic and logarithmic functions, real and complex multiplications, division, square-root calculation, solution of linear systems, [[eigenvalue]] estimation, [[singular value decomposition]], [[QR factorization]] and many others. As a consequence, CORDIC has been used for applications in diverse areas such as [[signal processing|signal]] and [[image processing]], [[communication systems]], [[robotics]] and [[3D graphics]] apart from general scientific and technical computation.<ref name="Meher_2009"/><ref name="Meher_2013_CORDIC"/> === Hardware === The algorithm was used in the navigational system of the [[Apollo program]]'s [[Lunar Roving Vehicle]] to compute [[Bearing (navigation)|bearing]] and range, or distance from the [[Lunar module]].<ref name="Heffron-LaPiana_1970"/><ref name="Smith-Mastin_1973"/> CORDIC was used to implement the [[Intel 8087]] math coprocessor in 1980, avoiding the need to implement hardware multiplication.<ref name="Shirriff_2020"/> CORDIC is generally faster than other approaches when a hardware multiplier is not available (e.g., a microcontroller), or when the number of gates required to implement the functions it supports should be minimized (e.g., in an FPGA or [[ASIC]]). In fact, CORDIC is a standard drop-in [[Semiconductor intellectual property core|IP]] in FPGA development applications such as Vivado for Xilinx, while a power series implementation is not due to the specificity of such an IP, i.e. CORDIC can compute many different functions (general purpose) while a hardware multiplier configured to execute power series implementations can only compute the function it was designed for. On the other hand, when a hardware multiplier is available (''e.g.'', in a [[digital signal processing|DSP]] microprocessor), table-lookup methods and [[power series]] are generally faster than CORDIC. In recent years, the CORDIC algorithm has been used extensively for various biomedical applications, especially in FPGA implementations.{{Citation needed|date=March 2021}} The [[STM32#STM32G4|STM32G4]], [[STM32#STM32U5|STM32U5]] and [[STM32#STM32H5|STM32H5]] series and certain [[STM32#STM32H7|STM32H7]] series of MCUs implement a CORDIC module to accelerate computations in various mixed signal applications such as graphics for [[User interface|human-machine interface]] and [[Vector control (motor)|field oriented control]] of motors. While not as fast as a power series approximation, CORDIC is indeed faster than interpolating table based implementations such as the ones provided by the ARM CMSIS and C standard libraries.<ref name="STM_2021"/> Though the results may be slightly less accurate as the CORDIC modules provided only achieve 20 bits of precision in the result. For example, most of the performance difference compared to the ARM implementation is due to the overhead of the interpolation algorithm, which achieves full floating point precision (24 bits) and can likely achieve relative error to that precision.<ref name="ARM_2021"/> Another benefit is that the CORDIC module is a coprocessor and can be run in parallel with other CPU tasks. The issue with using [[Taylor series]] is that while they do provide small absolute error, they do not exhibit well behaved relative error.<ref name="Error_2021"/> Other means of polynomial approximation, such as [[Minimax approximation algorithm|minimax]] optimization, may be used to control both kinds of error. === Software === Many older systems with integer-only CPUs have implemented CORDIC to varying extents as part of their [[IEEE floating-point]] libraries. As most modern general-purpose CPUs have floating-point registers with common operations such as add, subtract, multiply, divide, sine, cosine, square root, log<sub>10</sub>, natural log, the need to implement CORDIC in them with software is nearly non-existent. Only microcontroller or special safety and time-constrained software applications would need to consider using CORDIC.
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)