Support.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import os.path
  2. import itertools
  3. import Tools
  4. import random
  5. import numpy as np
  6. NBTESTSAMPLES = 10
  7. # Nb vectors for barycenter
  8. NBVECTORS = [4,10,16]
  9. VECDIM = [12,14,20]
  10. def genWsum(config,nb,vecDim):
  11. dims=[]
  12. inputs=[]
  13. weights=[]
  14. output=[]
  15. va = np.random.rand(vecDim)
  16. vb = np.random.rand(vecDim)
  17. e = np.sum(va.T * vb) / np.sum(vb)
  18. inputs += list(va)
  19. weights += list(vb)
  20. output.append(e)
  21. inputs=np.array(inputs)
  22. weights=np.array(weights)
  23. output=np.array(output)
  24. config.writeInput(nb, inputs,"Inputs")
  25. config.writeInput(nb, weights,"Weights")
  26. config.writeReference(nb, output,"Ref")
  27. def genBarycenter(config,nb,nbTests,nbVecs,vecDim):
  28. dims=[]
  29. inputs=[]
  30. weights=[]
  31. output=[]
  32. dims.append(nbTests)
  33. dims.append(nbVecs)
  34. dims.append(vecDim)
  35. for _ in range(0,nbTests):
  36. vecs = []
  37. b = np.zeros(vecDim)
  38. coefs = np.random.rand(nbVecs)
  39. for i in range(nbVecs):
  40. va = np.random.rand(vecDim)
  41. b += va * coefs[i]
  42. vecs += list(va)
  43. b = b / np.sum(coefs)
  44. inputs += list(vecs)
  45. weights += list(coefs)
  46. output += list(b)
  47. inputs=np.array(inputs)
  48. weights=np.array(weights)
  49. output=np.array(output)
  50. config.writeInput(nb, inputs,"Inputs")
  51. config.writeInputS16(nb, dims,"Dims")
  52. config.writeInput(nb, weights,"Weights")
  53. config.writeReference(nb, output,"Ref")
  54. def writeTestsF32(config):
  55. NBSAMPLES=256
  56. va = np.random.rand(NBSAMPLES)
  57. config.writeInput(1,va,"Samples")
  58. config.writeInputQ15(3,va,"Samples")
  59. config.writeInputQ31(4,va,"Samples")
  60. config.writeInputQ7(5,va,"Samples")
  61. # This is for benchmarking the weighted sum and we use only one test pattern
  62. genWsum(config,6,256)
  63. def writeTestsQ31(config):
  64. NBSAMPLES=256
  65. va = np.random.rand(NBSAMPLES)
  66. config.writeInput(1,va,"Samples")
  67. config.writeInputQ15(3,va,"Samples")
  68. config.writeInputQ7(4,va,"Samples")
  69. def writeTestsQ15(config):
  70. NBSAMPLES=256
  71. va = np.random.rand(NBSAMPLES)
  72. config.writeInput(1,va,"Samples")
  73. config.writeInputQ31(3,va,"Samples")
  74. config.writeInputQ7(4,va,"Samples")
  75. def writeTestsQ7(config):
  76. NBSAMPLES=256
  77. va = np.random.rand(NBSAMPLES)
  78. config.writeInput(1,va,"Samples")
  79. config.writeInputQ31(3,va,"Samples")
  80. config.writeInputQ15(4,va,"Samples")
  81. def writeBarTests(config):
  82. # For testing
  83. genBarycenter(config,1,NBTESTSAMPLES,10,14)
  84. # For benchmarks
  85. va = np.random.rand(128*15)
  86. vb = np.random.rand(128)
  87. config.writeInput(1,va,"Samples")
  88. config.writeInput(1,vb,"Coefs")
  89. PATTERNDIR = os.path.join("Patterns","DSP","Support","Support")
  90. PARAMDIR = os.path.join("Parameters","DSP","Support","Support")
  91. configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
  92. configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
  93. configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
  94. configq7=Tools.Config(PATTERNDIR,PARAMDIR,"q7")
  95. writeTestsF32(configf32)
  96. writeTestsQ31(configq31)
  97. writeTestsQ15(configq15)
  98. writeTestsQ7(configq7)
  99. # For benchmarking we need to vary number of vectors and vector dimension separately
  100. PATTERNBARDIR = os.path.join("Patterns","DSP","SupportBar")
  101. PARAMBARDIR = os.path.join("Parameters","DSP","SupportBar")
  102. configBarf32=Tools.Config(PATTERNBARDIR,PARAMBARDIR,"f32")
  103. writeBarTests(configBarf32)