Support.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. import os.path
  2. import itertools
  3. import Tools
  4. import random
  5. import numpy as np
  6. from scipy import interpolate
  7. NBTESTSAMPLES = 10
  8. # Nb vectors for barycenter
  9. NBVECTORS = [4,10,16]
  10. VECDIM = [12,14,20]
  11. def genWsum(config,nb):
  12. DIM=50
  13. inputs=[]
  14. weights=[]
  15. output=[]
  16. va = np.random.rand(DIM)
  17. vb = np.random.rand(DIM)
  18. inputs += list(va)
  19. weights += list(vb)
  20. nbiters = Tools.loopnb(0,Tools.TAILONLY)
  21. e = np.sum(va[0:nbiters].T * vb[0:nbiters]) / np.sum(vb[0:nbiters])
  22. output.append(e)
  23. nbiters = Tools.loopnb(0,Tools.BODYONLY)
  24. e = np.sum(va[0:nbiters].T * vb[0:nbiters]) / np.sum(vb[0:nbiters])
  25. output.append(e)
  26. nbiters = Tools.loopnb(0,Tools.BODYANDTAIL)
  27. e = np.sum(va[0:nbiters].T * vb[0:nbiters]) / np.sum(vb[0:nbiters])
  28. output.append(e)
  29. inputs=np.array(inputs)
  30. weights=np.array(weights)
  31. output=np.array(output)
  32. config.writeInput(nb, inputs,"Inputs")
  33. config.writeInput(nb, weights,"Weights")
  34. config.writeReference(nb, output,"Ref")
  35. def genBarycenter(config,nb,nbTests,nbVecsArray,vecDimArray):
  36. dims=[]
  37. inputs=[]
  38. weights=[]
  39. output=[]
  40. dims.append(nbTests)
  41. for i in range(0,nbTests):
  42. nbVecs = nbVecsArray[i % len(nbVecsArray)]
  43. vecDim = vecDimArray[i % len(vecDimArray)]
  44. dims.append(nbVecs )
  45. dims.append(vecDim)
  46. vecs = []
  47. b = np.zeros(vecDim)
  48. coefs = np.random.rand(nbVecs)
  49. for i in range(nbVecs):
  50. va = np.random.rand(vecDim)
  51. b += va * coefs[i]
  52. vecs += list(va)
  53. b = b / np.sum(coefs)
  54. inputs += list(vecs)
  55. weights += list(coefs)
  56. output += list(b)
  57. inputs=np.array(inputs)
  58. weights=np.array(weights)
  59. output=np.array(output)
  60. config.writeInput(nb, inputs,"Inputs")
  61. config.writeInputS16(nb, dims,"Dims")
  62. config.writeInput(nb, weights,"Weights")
  63. config.writeReference(nb, output,"Ref")
  64. def writeTestsF32(config):
  65. NBSAMPLES=256
  66. va = np.random.rand(NBSAMPLES)
  67. va = Tools.normalize(va)
  68. config.writeInput(1,va,"Samples")
  69. config.writeInputQ15(3,va,"Samples")
  70. config.writeInputQ31(4,va,"Samples")
  71. config.writeInputQ7(5,va,"Samples")
  72. # This is for benchmarking the weighted sum and we use only one test pattern
  73. genWsum(config,6)
  74. def writeTestsQ31(config):
  75. NBSAMPLES=256
  76. va = np.random.rand(NBSAMPLES)
  77. va = Tools.normalize(va)
  78. config.writeInputF32(1,va,"Samples")
  79. config.writeInputQ15(3,va,"Samples")
  80. config.writeInput(4,va,"Samples")
  81. config.writeInputQ7(5,va,"Samples")
  82. def writeTestsQ15(config):
  83. NBSAMPLES=256
  84. va = np.random.rand(NBSAMPLES)
  85. va = Tools.normalize(va)
  86. config.writeInputF32(1,va,"Samples")
  87. config.writeInput(3,va,"Samples")
  88. config.writeInputQ31(4,va,"Samples")
  89. config.writeInputQ7(5,va,"Samples")
  90. def writeTestsQ7(config):
  91. NBSAMPLES=256
  92. va = np.random.rand(NBSAMPLES)
  93. va = Tools.normalize(va)
  94. config.writeInputF32(1,va,"Samples")
  95. config.writeInputQ15(3,va,"Samples")
  96. config.writeInputQ31(4,va,"Samples")
  97. config.writeInput(5,va,"Samples")
  98. def writeBarTests(config):
  99. # For testing
  100. NBSAMPLES = 10
  101. nbVecsArray = [4,8,9]
  102. vecDimArray = [4,4,4,8,8,8,9,9,9]
  103. genBarycenter(config,1,NBTESTSAMPLES,nbVecsArray,vecDimArray)
  104. # For benchmarks
  105. va = np.random.rand(128*15)
  106. vb = np.random.rand(128)
  107. config.writeInput(1,va,"Samples")
  108. config.writeInput(1,vb,"Coefs")
  109. def writeTests2(config, format):
  110. data = np.random.randn(11)
  111. data = Tools.normalize(data)
  112. config.writeInput(7, data)
  113. ref = np.sort(data)
  114. config.writeReference(7, ref)
  115. data = np.random.randn(16)
  116. data = Tools.normalize(data)
  117. config.writeInput(8, data)
  118. ref = np.sort(data)
  119. config.writeReference(8, ref)
  120. data = np.random.randn(32)
  121. data = Tools.normalize(data)
  122. config.writeInput(9, data)
  123. ref = np.sort(data)
  124. config.writeReference(9, ref)
  125. data = np.full((16), np.random.randn(1))
  126. data = Tools.normalize(data)
  127. config.writeInput(10, data)
  128. ref = np.sort(data)
  129. config.writeReference(10, ref)
  130. x = [0,3,10,20]
  131. config.writeInput(11,x,"InputX")
  132. y = [0,9,100,400]
  133. config.writeInput(11,y,"InputY")
  134. xnew = np.arange(0,20,1)
  135. config.writeInput(11,xnew,"OutputX")
  136. ynew = interpolate.CubicSpline(x,y)
  137. config.writeReference(11, ynew(xnew))
  138. x = np.arange(0, 2*np.pi+np.pi/4, np.pi/4)
  139. config.writeInput(12,x,"InputX")
  140. y = np.sin(x)
  141. config.writeInput(12,y,"InputY")
  142. xnew = np.arange(0, 2*np.pi+np.pi/16, np.pi/16)
  143. config.writeInput(12,xnew,"OutputX")
  144. ynew = interpolate.CubicSpline(x,y,bc_type="natural")
  145. config.writeReference(12, ynew(xnew))
  146. x = [0,3,10]
  147. config.writeInput(13,x,"InputX")
  148. y = x
  149. config.writeInput(13,y,"InputY")
  150. xnew = np.arange(-10,20,1)
  151. config.writeInput(13,xnew,"OutputX")
  152. ynew = interpolate.CubicSpline(x,y)
  153. config.writeReference(13, ynew(xnew))
  154. def generatePatterns():
  155. PATTERNDIR = os.path.join("Patterns","DSP","Support","Support")
  156. PARAMDIR = os.path.join("Parameters","DSP","Support","Support")
  157. configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
  158. configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
  159. configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
  160. configq7=Tools.Config(PATTERNDIR,PARAMDIR,"q7")
  161. writeTestsF32(configf32)
  162. writeTestsQ31(configq31)
  163. writeTestsQ15(configq15)
  164. writeTestsQ7(configq7)
  165. writeTests2(configf32,0)
  166. # For benchmarking we need to vary number of vectors and vector dimension separately
  167. PATTERNBARDIR = os.path.join("Patterns","DSP","SupportBar")
  168. PARAMBARDIR = os.path.join("Parameters","DSP","SupportBar")
  169. configBarf32=Tools.Config(PATTERNBARDIR,PARAMBARDIR,"f32")
  170. writeBarTests(configBarf32)
  171. if __name__ == '__main__':
  172. generatePatterns()