example_1_4.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. # New functions for version 1.4 of the Python wrapper
  2. import cmsisdsp as dsp
  3. import cmsisdsp.fixedpoint as f
  4. import numpy as np
  5. import math
  6. import colorama
  7. from colorama import init,Fore, Back, Style
  8. init()
  9. def printTitle(s):
  10. print("\n" + Fore.GREEN + Style.BRIGHT + s + Style.RESET_ALL)
  11. def printSubTitle(s):
  12. print("\n" + Style.BRIGHT + s + Style.RESET_ALL)
  13. printTitle("ArcTan2")
  14. angles=[0,
  15. math.pi/4,
  16. math.pi/2,
  17. 3*math.pi/4,
  18. math.pi,
  19. 5*math.pi/4,
  20. 3*math.pi/2,
  21. 7*math.pi/4
  22. ]
  23. x = np.cos(angles)
  24. y = np.sin(angles)
  25. vals=list(zip(y,x))
  26. printSubTitle("Atan2 Referebce")
  27. ref=np.array([np.arctan2(yv,xv) for (yv,xv) in vals])/math.pi*180
  28. print(ref)
  29. printSubTitle("Atan2 F32")
  30. resf32=np.array([dsp.arm_atan2_f32(yv,xv)[1] for (yv,xv) in vals])/math.pi*180
  31. print(resf32)
  32. print(np.isclose(ref,resf32,1e-6,1e-6))
  33. printSubTitle("Atan2 Q31")
  34. xQ31=f.toQ31(x)
  35. yQ31=f.toQ31(y)
  36. valsQ31=list(zip(yQ31,xQ31))
  37. resq31=4*f.Q31toF32(np.array([dsp.arm_atan2_q31(yv,xv)[1] for (yv,xv) in valsQ31]))/math.pi*180
  38. print(resq31)
  39. print(np.isclose(ref,resq31,1e-8,1e-8))
  40. printSubTitle("Atan2 Q15")
  41. xQ15=f.toQ15(x)
  42. yQ15=f.toQ15(y)
  43. valsQ15=list(zip(yQ15,xQ15))
  44. resq15=4*f.Q15toF32(np.array([dsp.arm_atan2_q15(yv,xv)[1] for (yv,xv) in valsQ15]))/math.pi*180
  45. print(resq15)
  46. print(np.isclose(ref,resq15,1e-3,1e-3))
  47. printTitle("MSE")
  48. NBSAMPLES = 50
  49. def mse(a,b):
  50. err = a - b
  51. return(np.dot(err,err) / len(a))
  52. a=np.random.randn(NBSAMPLES)
  53. a = a / np.max(np.abs(a))
  54. b=np.random.randn(NBSAMPLES)
  55. b = b / np.max(np.abs(b))
  56. printSubTitle("MSE Reference")
  57. ref = mse(a,b)
  58. print(ref)
  59. printSubTitle("MSE f64")
  60. resf64= dsp.arm_mse_f64(a,b)
  61. print(resf64)
  62. print(np.isclose(ref,resf64,1e-14,1e-14))
  63. printSubTitle("MSE f32")
  64. resf32 = dsp.arm_mse_f32(a,b)
  65. print(resf32)
  66. print(np.isclose(ref,resf32,1e-7,1e-7))
  67. printSubTitle("MSE Q31")
  68. aQ31 = f.toQ31(a)
  69. bQ31 = f.toQ31(b)
  70. resQ31 = f.Q31toF32(dsp.arm_mse_q31(aQ31,bQ31))
  71. print(resQ31)
  72. print(np.isclose(ref,resQ31,1e-7,1e-7))
  73. aQ15 = f.toQ15(a)
  74. bQ15 = f.toQ15(b)
  75. printSubTitle("MSE Q15")
  76. resQ15 = dsp.arm_mse_q15(aQ15,bQ15)
  77. print("%04X" % resQ15)
  78. resQ15 = f.Q15toF32(resQ15)
  79. print(resQ15)
  80. print(np.isclose(ref,resQ15,1e-4,1e-4))
  81. aQ7 = f.toQ7(a)
  82. bQ7 = f.toQ7(b)
  83. printSubTitle("MSE Q7")
  84. resQ7 = dsp.arm_mse_q7(aQ7,bQ7)
  85. print("%04X" % resQ7)
  86. resQ7 = f.Q7toF32(resQ7)
  87. print(resQ7)
  88. print(np.isclose(ref,resQ7,1e-2,1e-2))