Support.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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):
  11. DIM=10
  12. inputs=[]
  13. weights=[]
  14. output=[]
  15. va = np.random.rand(DIM)
  16. vb = np.random.rand(DIM)
  17. inputs += list(va)
  18. weights += list(vb)
  19. nbiters = Tools.loopnb(0,Tools.TAILONLY)
  20. e = np.sum(va[0:nbiters].T * vb[0:nbiters]) / np.sum(vb[0:nbiters])
  21. output.append(e)
  22. nbiters = Tools.loopnb(0,Tools.BODYONLY)
  23. e = np.sum(va[0:nbiters].T * vb[0:nbiters]) / np.sum(vb[0:nbiters])
  24. output.append(e)
  25. nbiters = Tools.loopnb(0,Tools.BODYANDTAIL)
  26. e = np.sum(va[0:nbiters].T * vb[0:nbiters]) / np.sum(vb[0:nbiters])
  27. output.append(e)
  28. inputs=np.array(inputs)
  29. weights=np.array(weights)
  30. output=np.array(output)
  31. config.writeInput(nb, inputs,"Inputs")
  32. config.writeInput(nb, weights,"Weights")
  33. config.writeReference(nb, output,"Ref")
  34. def genBarycenter(config,nb,nbTests,nbVecsArray,vecDimArray):
  35. dims=[]
  36. inputs=[]
  37. weights=[]
  38. output=[]
  39. dims.append(nbTests)
  40. for i in range(0,nbTests):
  41. nbVecs = nbVecsArray[i % len(nbVecsArray)]
  42. vecDim = vecDimArray[i % len(vecDimArray)]
  43. dims.append(nbVecs )
  44. dims.append(vecDim)
  45. vecs = []
  46. b = np.zeros(vecDim)
  47. coefs = np.random.rand(nbVecs)
  48. for i in range(nbVecs):
  49. va = np.random.rand(vecDim)
  50. b += va * coefs[i]
  51. vecs += list(va)
  52. b = b / np.sum(coefs)
  53. inputs += list(vecs)
  54. weights += list(coefs)
  55. output += list(b)
  56. inputs=np.array(inputs)
  57. weights=np.array(weights)
  58. output=np.array(output)
  59. config.writeInput(nb, inputs,"Inputs")
  60. config.writeInputS16(nb, dims,"Dims")
  61. config.writeInput(nb, weights,"Weights")
  62. config.writeReference(nb, output,"Ref")
  63. def writeTestsF32(config):
  64. NBSAMPLES=256
  65. va = np.random.rand(NBSAMPLES)
  66. va = Tools.normalize(va)
  67. config.writeInput(1,va,"Samples")
  68. config.writeInputQ15(3,va,"Samples")
  69. config.writeInputQ31(4,va,"Samples")
  70. config.writeInputQ7(5,va,"Samples")
  71. # This is for benchmarking the weighted sum and we use only one test pattern
  72. genWsum(config,6)
  73. def writeTestsQ31(config):
  74. NBSAMPLES=256
  75. va = np.random.rand(NBSAMPLES)
  76. va = Tools.normalize(va)
  77. config.writeInputF32(1,va,"Samples")
  78. config.writeInputQ15(3,va,"Samples")
  79. config.writeInput(4,va,"Samples")
  80. config.writeInputQ7(5,va,"Samples")
  81. def writeTestsQ15(config):
  82. NBSAMPLES=256
  83. va = np.random.rand(NBSAMPLES)
  84. va = Tools.normalize(va)
  85. config.writeInputF32(1,va,"Samples")
  86. config.writeInput(3,va,"Samples")
  87. config.writeInputQ31(4,va,"Samples")
  88. config.writeInputQ7(5,va,"Samples")
  89. def writeTestsQ7(config):
  90. NBSAMPLES=256
  91. va = np.random.rand(NBSAMPLES)
  92. va = Tools.normalize(va)
  93. config.writeInputF32(1,va,"Samples")
  94. config.writeInputQ15(3,va,"Samples")
  95. config.writeInputQ31(4,va,"Samples")
  96. config.writeInput(5,va,"Samples")
  97. def writeBarTests(config):
  98. # For testing
  99. NBSAMPLES = 10
  100. nbVecsArray = [4,8,9]
  101. vecDimArray = [4,4,4,8,8,8,9,9,9]
  102. genBarycenter(config,1,NBTESTSAMPLES,nbVecsArray,vecDimArray)
  103. # For benchmarks
  104. va = np.random.rand(128*15)
  105. vb = np.random.rand(128)
  106. config.writeInput(1,va,"Samples")
  107. config.writeInput(1,vb,"Coefs")
  108. def generatePatterns():
  109. PATTERNDIR = os.path.join("Patterns","DSP","Support","Support")
  110. PARAMDIR = os.path.join("Parameters","DSP","Support","Support")
  111. configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
  112. configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
  113. configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
  114. configq7=Tools.Config(PATTERNDIR,PARAMDIR,"q7")
  115. writeTestsF32(configf32)
  116. writeTestsQ31(configq31)
  117. writeTestsQ15(configq15)
  118. writeTestsQ7(configq7)
  119. # For benchmarking we need to vary number of vectors and vector dimension separately
  120. PATTERNBARDIR = os.path.join("Patterns","DSP","SupportBar")
  121. PARAMBARDIR = os.path.join("Parameters","DSP","SupportBar")
  122. configBarf32=Tools.Config(PATTERNBARDIR,PARAMBARDIR,"f32")
  123. writeBarTests(configBarf32)
  124. if __name__ == '__main__':
  125. generatePatterns()