fixedpoint.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import numpy as np
  2. def q31sat(x):
  3. if x > 0x7FFFFFFF:
  4. return(np.int32(0x7FFFFFFF))
  5. elif x < -0x80000000:
  6. return(np.int32(0x80000000))
  7. else:
  8. return(np.int32(x))
  9. q31satV=np.vectorize(q31sat)
  10. def toQ31(x):
  11. """
  12. Return an array of Q31 scalars from an array of floats
  13. :param x: array of float.
  14. :type x: array
  15. :return: array of Q31 scalars.
  16. :rtype: array
  17. """
  18. return(q31satV(np.round(np.array(x) * (1<<31))))
  19. def q15sat(x):
  20. if x > 0x7FFF:
  21. return(np.int16(0x7FFF))
  22. elif x < -0x8000:
  23. return(np.int16(0x8000))
  24. else:
  25. return(np.int16(x))
  26. q15satV=np.vectorize(q15sat)
  27. def toQ15(x):
  28. """
  29. Return an array of Q15 scalars from an array of floats
  30. :param x: array of float.
  31. :type x: array
  32. :return: array of Q15 scalars.
  33. :rtype: array
  34. """
  35. return(q15satV(np.round(np.array(x) * (1<<15))))
  36. def q7sat(x):
  37. if x > 0x7F:
  38. return(np.int8(0x7F))
  39. elif x < -0x80:
  40. return(np.int8(0x80))
  41. else:
  42. return(np.int8(x))
  43. q7satV=np.vectorize(q7sat)
  44. def toQ7(x):
  45. """
  46. Return an array of Q7 scalars from an array of floats
  47. :param x: array of float.
  48. :type x: array
  49. :return: array of Q7 scalars.
  50. :rtype: array
  51. """
  52. return(q7satV(np.round(np.array(x) * (1<<7))))
  53. def Q31toF32(x):
  54. """
  55. Return an array of float values from an array of Q31 values
  56. :param x: Array of Q31 values.
  57. :type x: array
  58. :return: Array of float values.
  59. :rtype: array
  60. """
  61. return(1.0*np.array(x) / 2**31)
  62. def Q15toF32(x):
  63. """
  64. Return an array of float values from an array of Q15 values
  65. :param x: Array of Q15 values.
  66. :type x: array
  67. :return: Array of float values.
  68. :rtype: array
  69. """
  70. return(1.0*np.array(x) / 2**15)
  71. def Q7toF32(x):
  72. """
  73. Return an array of float values from an array of Q7 values
  74. :param x: Array of Q7 values.
  75. :type x: array
  76. :return: Array of float values.
  77. :rtype: array
  78. """
  79. return(1.0*np.array(x) / 2**7)