FastMath.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import os.path
  2. import numpy as np
  3. import itertools
  4. import Tools
  5. import math
  6. # Those patterns are used for tests and benchmarks.
  7. # For tests, there is the need to add tests for saturation
  8. def writeTests(config,format):
  9. a1=np.array([0,math.pi/4,math.pi/2,3*math.pi/4,math.pi,5*math.pi/4,3*math.pi/2,2*math.pi-1e-6])
  10. a2=np.array([-math.pi/4,-math.pi/2,-3*math.pi/4,-math.pi,-5*math.pi/4,-3*math.pi/2,-2*math.pi-1e-6])
  11. a3 = a1 + 2*math.pi
  12. angles=np.concatenate((a1,a2,a3))
  13. refcos = np.cos(angles)
  14. refsin = np.sin(angles)
  15. vals=np.array([0.0, 0.0, 0.1,1.0,2.0,3.0,3.5,3.6])
  16. sqrtvals=np.sqrt(vals)
  17. # Negative values in CMSIS are giving 0
  18. vals[0] = -0.4
  19. sqrtvals[0] = 0.0
  20. if format != 0:
  21. angles=np.concatenate((a1,a2,a1))
  22. angles = angles / (2*math.pi)
  23. config.writeInput(1, angles,"Angles")
  24. config.writeInput(1, vals,"SqrtInput")
  25. config.writeReference(1, refcos,"Cos")
  26. config.writeReference(1, refsin,"Sin")
  27. config.writeReference(1, sqrtvals,"Sqrt")
  28. def writeTestsF32(config,format):
  29. writeTests(config,format)
  30. data1 = np.random.randn(20)
  31. data1 = np.abs(data1)
  32. data1 = data1 + 1e-3 # To avoid zero values
  33. data1 = data1/max(data1)
  34. samples=np.concatenate((np.array([0.1,0.3,0.5,1.0,2.0]) , data1))
  35. config.writeInput(1, samples,"LogInput")
  36. v = np.log(samples)
  37. config.writeReference(1, v,"Log")
  38. samples=np.concatenate((np.array([0.0,1.0]),np.linspace(-0.4,0.4)))
  39. config.writeInput(1, samples,"ExpInput")
  40. v = np.exp(samples)
  41. config.writeReference(1, v,"Exp")
  42. PATTERNDIR = os.path.join("Patterns","DSP","FastMath","FastMath")
  43. PARAMDIR = os.path.join("Parameters","DSP","FastMath","FastMath")
  44. configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
  45. configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
  46. configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
  47. writeTestsF32(configf32,0)
  48. writeTests(configq31,31)
  49. writeTests(configq15,15)