Nu:Tekt NTS-1 digital SDK  v1.1-0
fixed_math.h File Reference

Fixed Point Math Utilities. More...

#include <stdint.h>
#include "cortexm4.h"

Go to the source code of this file.


Fixed-Point and Floating Point Type Conversions
Should get properly compiled to VCVT instructions on ARM Cortex-M4
#define q15_to_f32_c   3.05175781250000e-005f
#define q31_to_f32_c   4.65661287307739e-010f
#define q15_to_f32(q)   ((float)(q) * q15_to_f32_c)
#define q31_to_f32(q)   ((float)(q) * q31_to_f32_c)
#define f32_to_q15(f)   ((q15_t)ssat((q31_t)((float)(f) * ((1<<15)-1)),16))
#define f32_to_q31(f)   ((q31_t)((float)(f) * (float)0x7FFFFFFF))
Fixed point Constants
#define M_HALPI_Q1_14   0x6488
#define M_HALPI_Q1_30   0x6487ED51
#define M_PI_Q2_13   0x6488
#define M_PI_Q2_29   0x6487ED51
#define M_1OVERPI_Q15   0x28BE
#define M_1OVERPI_Q31   0x28BE60DC
#define M_TWOPI_Q3_12   0x6488
#define M_TWOPI_Q3_28   0x6487ED51
#define M_1OVER48K_Q31   0x0000AEC3
#define M_1OVER44K_Q31   0x0000BE38
#define M_1OVER22K_Q31   0x00017C70


Fixed point Types
typedef int8_t q7_t
typedef int8_t q7_0_t
typedef uint8_t q8_t
typedef uint8_t q8_0_t
typedef int16_t q15_t
typedef int16_t q1_14_t
typedef int16_t q2_13_t
typedef int16_t q3_12_t
typedef int16_t q4_11_t
typedef int16_t q5_10_t
typedef int16_t q6_9_t
typedef int16_t q7_8_t
typedef int16_t q8_7_t
typedef int16_t q13_2_t
typedef int16_t q15_0_t
typedef uint16_t uq16_t
typedef uint16_t uq16_0_t
typedef int32_t q23_t
typedef int32_t q31_t
typedef int32_t q1_30_t
typedef int32_t q2_29_t
typedef int32_t q3_28_t
typedef int32_t q4_27_t
typedef int32_t q5_26_t
typedef int32_t q6_25_t
typedef int32_t q7_24_t
typedef int32_t q8_23_t
typedef int32_t q15_16_t
typedef int32_t q16_15_t
typedef int32_t q17_14_t
typedef int32_t q18_13_t
typedef int32_t q19_12_t
typedef int32_t q20_11_t
typedef int32_t q21_10_t
typedef int32_t q22_9_t
typedef int32_t q23_8_t
typedef int32_t q31_0_t
typedef uint32_t uq32_t
typedef uint32_t uq14_18_t
typedef uint32_t uq32_0_t
typedef int64_t q63_t
typedef int64_t q1_62_t
typedef int64_t q2_61_t
typedef int64_t q3_60_t
typedef int64_t q4_59_t
typedef int64_t q5_58_t
typedef int64_t q6_57_t
typedef int64_t q7_56_t
typedef int64_t q8_55_t
typedef int64_t q16_47_t
typedef int64_t q23_40_t
typedef int64_t q31_32_t
typedef int64_t q63_0_t
typedef uint64_t uq64_t
typedef uint64_t uq64_0_t


Some arguments are used multiple times, make sure not to pass expressions.
#define q15add(a, b)   ((q15_t)(qadd16((q15_t)(a),(q15_t)(b)) & 0xFFFF))
#define q15sub(a, b)   ((q15_t)(qsub16((q15_t)(a),(q15_t)(b)) & 0xFFFF))
#define q15mul(a, b)   ((q15_t)(((int32_t)(q15_t)(a) * (q15_t)(b))>>15))
#define q15absmul(a, b)   (-q15mul(a, -b))
#define q15abs(a)   ((q15_t)(qsub16(((q15_t)(a) ^ ((q15_t)(a)>>15)), ((q15_t)(a)>>15)) & 0xFFFF))
#define q15addp(a, b)   ((simd32_t)(qadd16((simd32_t)(a),(simd32_t)(b))))
#define q15subp(a, b)   ((simd32_t)(qsub16((simd32_t)(a),(simd32_t)(b))))
#define q15absp(a)   ((simd32_t)(qsub16((simd32_t)(a) ^ ((simd32_t)(a)>>15), (simd32_t)(a)>>15)))
static q15_t q15max (q15_t a, q15_t b)
static q15_t q15min (q15_t a, q15_t b)
static simd32_t q15maxp (simd32_t a, simd32_t b)
static simd32_t q15minp (simd32_t a, simd32_t b)


Some arguments are used multiple times, make sure not to pass expressions.
#define q31add(a, b)   (qadd((q31_t)(a),(q31_t)(b)))
#define q31sub(a, b)   (qsub((q31_t)(a),(q31_t)(b)))
#define q31mul(a, b)   ((q31_t)(((q63_t)(q31_t)(a) * (q31_t)(b))>>31))
#define q31absmul(a, b)   (-q31mul(a,-b))
#define q31abs(a)   (qsub((q31_t)(a) ^ ((q31_t)(a)>>31), (q31_t)(a)>>31))
static q31_t q31max (q31_t a, q31_t b)
static q31_t q31min (q31_t a, q31_t b)

Detailed Description

Fixed Point Math Utilities.

Definition in file fixed_math.h.