FastMath.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 and format != 16:
  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 writeTestsFloat(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 and other tests
  49. samples=np.random.randn(NBSAMPLES)
  50. samples = np.abs(Tools.normalize(samples))
  51. config.writeInput(1, samples,"Samples")
  52. v = 1.0 / samples
  53. config.writeReference(1, v,"Inverse")
  54. def generatePatterns():
  55. PATTERNDIR = os.path.join("Patterns","DSP","FastMath","FastMath")
  56. PARAMDIR = os.path.join("Parameters","DSP","FastMath","FastMath")
  57. configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
  58. configf16=Tools.Config(PATTERNDIR,PARAMDIR,"f16")
  59. configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
  60. configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
  61. writeTestsFloat(configf32,0)
  62. writeTestsFloat(configf16,16)
  63. writeTests(configq31,31)
  64. writeTests(configq15,15)
  65. if __name__ == '__main__':
  66. generatePatterns()