fix_math.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #ifndef _FIX_MATH_H__
  2. #define _FIX_MATH_H__
  3. #include "bsp/bsp.h"
  4. #include "os/os_types.h"
  5. #include "libs/utils.h"
  6. typedef signed short s16q14_t;
  7. typedef signed short s16q10_t;
  8. typedef signed short s16q5_t;
  9. typedef signed short s16q4_t;
  10. typedef signed int s32q4_t;
  11. typedef signed int s32q14_t;
  12. #define S16Q4(A) (signed short)((A) * 16.0F)
  13. #define S16Q5(A) (signed short)((A) * 32.0F)
  14. #define S16Q10(A) (signed short)((A) * 1024.0F)
  15. #define S16Q14(A) (signed short)((A) * 16384.0F)
  16. #define S32Q4(A) (signed int)((A) * 16.0F)
  17. #define S32Q14(A) (signed int)((A) * 16384.0F)
  18. #define S32Q14_MUL(a, b) (((a)*(b)) >>14)
  19. static __INLINE float S16Q4toF(s16q4_t v) {
  20. s16 num = (v >> 4) & 0xFFFF;
  21. u16 tail = v & 0x000F;
  22. float f = num + (float)tail / 16.0f;
  23. return f;
  24. }
  25. static __INLINE float S16Q5toF(s16q5_t v) {
  26. s16 num = (v >> 5) & 0xFFFF;
  27. u16 tail = v & 0x001F;
  28. float f = num + (float)tail / 32.0f;
  29. return f;
  30. }
  31. static __INLINE float S16Q10toF(s16q5_t v) {
  32. s16 num = (v >> 10) & 0xFFFF;
  33. u16 tail = v & 0x03FF;
  34. float f = num + (float)tail / 1024.0f;
  35. return f;
  36. }
  37. static __INLINE float S32Q4toF(s32q4_t v) {
  38. s32 num = (v >> 4) & 0xFFFFFFFF;
  39. u16 tail = v & 0x000F;
  40. float f = num + (float)tail / 16.0f;
  41. return f;
  42. }
  43. #define MATH_sat(in, minOut, maxOut) (min((in), MAX((in), (minOut))))
  44. #endif /* _FIX_MATH_H__ */