Nu:Tekt NTS-1 digital SDK  v1.1-0
Fixed-Point Math

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
 

Fixed-Point and Floating Point Type Conversions

Note
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
 

Q15.

Note
Some arguments are used multiple times, make sure not to pass expressions.
static q15_t q15max (q15_t a, q15_t b)
 Maximum.
 
static q15_t q15min (q15_t a, q15_t b)
 Minimum.
 
static simd32_t q15maxp (simd32_t a, simd32_t b)
 Maximum.
 
static simd32_t q15minp (simd32_t a, simd32_t b)
 Minimum.
 
#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)))
 

Q31.

Note
Some arguments are used multiple times, make sure not to pass expressions.
static q31_t q31max (q31_t a, q31_t b)
 Maximum.
 
static q31_t q31min (q31_t a, q31_t b)
 Minimum.
 
#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))
 

Detailed Description