Digital Signal Processing (DSP) Fixed-Point Math Library
LibQ Fixed-Point Math Library
Digital Signal Processing (DSP) Fixed-Point Math Library
The DSP Fixed-Point Library uses fixed-point fractional functions to optimize execution speed. These functions limit the accuracy of the calculations to the bits specified for the function. Due to parallelism in some operations, the 16-bit version of the functions are more efficient than their 32-bit counterparts. In many cases, both 16-bit and 32-bit functions are available to give the user the choice of balance between speed and functional resolution.
A majority of the DSP Fixed-Point Library uses functions with variables in the Q15 or Q31 format. This limits the equivalent numerical range to roughly -1.0 to 0.999999999. It is possible to represent other number ranges but scaling before and after the function call is necessary. All library functions will saturate the output if the value exceeds the maximum or is lower than the minimum allowable value for that resolution. Some pre-scaling may be necessary to prevent unwanted saturation in functions that may otherwise create calculation errors.
The DSP Library supports the following functions:
- Complex Math Functions: general mathematical operations using a complex structure with the form (a + bi)
- Vector Math Functions: mathematical operations on an array of numbers or vectors
- Matrix Math Functions: mathematical operations on a matrix
- Digital Filter Functions: FIR and IIR filtering functions with various architectures
- Transform Functions: FFT, Windows, and related transform elements
- Support Functions: quick support functions for numerical transform
LibQ Fixed-Point Math Library
The LibQ Fixed-Point Math Library simplifies writing fixed point algorithms, supporting Q15, Q31, and other 16-bit and 32-bit data formats. Using the simple C callable functions contained in the library, fast fixed-point mathematical operations can be easily executed. Fixed-point mathematical calculations may replace some functions implemented in the floating-point library (math.h), depending on performance and resolution requirements.
Functions included in the LibQ library include capabilities for trigonometric, power and logarithms, and data conversion. In many cases, the functions are identical other than the precision of their operands and the corresponding value that they return.
These functions are implemented in an efficient assembly and generally tuned to optimize performance over code size. In some cases, the library breaks out functions that enable one to be optimized for accuracy, while another version is optimized for speed. These functions such as _LIBQ_Q2_29_acos_Q31() and _LIBQ_Q2_29_acos_Q31_Fast() are otherwise identical and can be used interchangeably. Each of these functions is typically used in computationally intensive real-time applications where execution time is a critical parameter.
The LibQ Fixed-Point Math Library supports the following functions:
- Divide
- Square Root
- Exponential
- Log
- Power
- Sine
- Cosine
- Tangent
- Arcsin
- Arccos
- Arctan
- Arctan2
- Random Number
- Float
- String