Decimate.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import os.path
  2. import numpy as np
  3. import itertools
  4. import Tools
  5. # Those patterns are used for tests and benchmarks.
  6. # For tests, there is the need to add tests for saturation
  7. def writeTests(config):
  8. NBSAMPLES=256
  9. NUMTAPS = 64
  10. samples=np.random.randn(NBSAMPLES)
  11. taps=np.random.randn(NUMTAPS)
  12. samples = Tools.normalize(samples)
  13. taps =Tools.normalize(taps)
  14. config.writeInput(1, samples,"Samples")
  15. config.writeInput(1, taps,"Coefs")
  16. def generatePatterns():
  17. PATTERNDIR = os.path.join("Patterns","DSP","Filtering","DECIM","DECIM")
  18. PARAMDIR = os.path.join("Parameters","DSP","Filtering","DECIM","DECIM")
  19. configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
  20. configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
  21. configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
  22. #configq7=Tools.Config(PATTERNDIR,PARAMDIR,"q7")
  23. writeTests(configf32)
  24. writeTests(configq31)
  25. writeTests(configq15)
  26. #writeTests(configq7)
  27. # For decimation, number of samples must be a multiple of decimation factor.
  28. # So we cannot use a generator in the test description.
  29. numTaps = [1,2,4,8,16]
  30. blockSizeFactor = [1,2,4,8,16]
  31. decimationFactor = [4,5,8]
  32. combinations = [numTaps,blockSizeFactor,decimationFactor]
  33. finalLength = 3 * len(numTaps) * len(decimationFactor) * len(blockSizeFactor)
  34. r=np.array([(n,blFactor*dFactor,dFactor) for (n,blFactor,dFactor) in itertools.product(*combinations)])
  35. r = r.reshape(finalLength)
  36. configf32.writeParam(1, r)
  37. configq31.writeParam(1, r)
  38. configq15.writeParam(1, r)
  39. # For interpolation, number taps must be a multiple of interpolation factor.
  40. # So we cannot use a generator in the test description.
  41. numTapsFactor = [1,2,4,8,16]
  42. blockSize = [16,64]
  43. interpolationFactor = [2,4,5,8,9]
  44. combinations = [numTapsFactor,blockSize,interpolationFactor]
  45. finalLength = 3 * len(numTapsFactor) * len(interpolationFactor) * len(blockSize)
  46. r=np.array([(nFactor * iFactor,bl,iFactor) for (nFactor,bl,iFactor) in itertools.product(*combinations)])
  47. r = r.reshape(finalLength)
  48. configf32.writeParam(2, r)
  49. configq31.writeParam(2, r)
  50. configq15.writeParam(2, r)
  51. if __name__ == '__main__':
  52. generatePatterns()