FastMath.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. # For benchmarks
  9. NBSAMPLES=256
  10. def writeTests(config,format):
  11. 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])
  12. 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])
  13. a3 = a1 + 2*math.pi
  14. angles=np.concatenate((a1,a2,a3))
  15. refcos = np.cos(angles)
  16. refsin = np.sin(angles)
  17. vals=np.array([0.0, 0.0, 0.1,1.0,2.0,3.0,3.5,3.6])
  18. sqrtvals=np.sqrt(vals)
  19. # Negative values in CMSIS are giving 0
  20. vals[0] = -0.4
  21. sqrtvals[0] = 0.0
  22. if format != 0:
  23. angles=np.concatenate((a1,a2,a1))
  24. angles = angles / (2*math.pi)
  25. config.writeInput(1, angles,"Angles")
  26. config.writeInput(1, vals,"SqrtInput")
  27. config.writeReference(1, refcos,"Cos")
  28. config.writeReference(1, refsin,"Sin")
  29. config.writeReference(1, sqrtvals,"Sqrt")
  30. # For benchmarks
  31. samples=np.random.randn(NBSAMPLES)
  32. samples = np.abs(Tools.normalize(samples))
  33. config.writeInput(1, samples,"Samples")
  34. def writeTestsF32(config,format):
  35. writeTests(config,format)
  36. data1 = np.random.randn(20)
  37. data1 = np.abs(data1)
  38. data1 = data1 + 1e-3 # To avoid zero values
  39. data1 = Tools.normalize(data1)
  40. samples=np.concatenate((np.array([0.1,0.3,0.5,1.0,2.0]) , data1))
  41. config.writeInput(1, samples,"LogInput")
  42. v = np.log(samples)
  43. config.writeReference(1, v,"Log")
  44. samples=np.concatenate((np.array([0.0,1.0]),np.linspace(-0.4,0.4)))
  45. config.writeInput(1, samples,"ExpInput")
  46. v = np.exp(samples)
  47. config.writeReference(1, v,"Exp")
  48. # For benchmarks
  49. samples=np.random.randn(NBSAMPLES)
  50. samples = np.abs(Tools.normalize(samples))
  51. config.writeInput(1, samples,"Samples")
  52. def generatePatterns():
  53. PATTERNDIR = os.path.join("Patterns","DSP","FastMath","FastMath")
  54. PARAMDIR = os.path.join("Parameters","DSP","FastMath","FastMath")
  55. configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
  56. configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
  57. configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
  58. writeTestsF32(configf32,0)
  59. writeTests(configq31,31)
  60. writeTests(configq15,15)
  61. if __name__ == '__main__':
  62. generatePatterns()