1import os.path 2import numpy as np 3import itertools 4import Tools 5 6 7# Those patterns are used for tests and benchmarks. 8# For tests, there is the need to add tests for saturation 9 10def randComplex(nb): 11 data = np.random.randn(2*nb) 12 data = Tools.normalize(data) 13 data_comp = data.view(dtype=np.complex128) 14 return(data_comp) 15 16def asReal(a): 17 #return(a.view(dtype=np.float64)) 18 return(a.reshape(np.size(a)).view(dtype=np.float64)) 19 20def writeTests(config,format): 21 NBSAMPLES=256 22 23 data1=randComplex(NBSAMPLES) 24 data2=randComplex(NBSAMPLES) 25 data3=np.random.randn(NBSAMPLES) 26 data3 = Tools.normalize(data3) 27 28 29 config.writeInput(1, asReal(data1)) 30 config.writeInput(2, asReal(data2)) 31 config.writeInput(3, data3) 32 33 ref = np.conj(data1) 34 config.writeReference(1, asReal(ref)) 35 36 nb = Tools.loopnb(format,Tools.TAILONLY) 37 ref = np.array(np.dot(data1[0:nb],data2[0:nb])) 38 if format==31: 39 ref = ref / 2**15 # Because CMSIS format is 16.48 40 config.writeReferenceQ63(2, asReal(ref)) 41 elif format==15: 42 ref = ref / 2**7 # Because CMSIS format is 8.24 43 config.writeReferenceQ31(2, asReal(ref)) 44 else: 45 config.writeReference(2, asReal(ref)) 46 47 nb = Tools.loopnb(format,Tools.BODYONLY) 48 ref = np.array(np.dot(data1[0:nb] ,data2[0:nb])) 49 if format==31: 50 ref = ref / 2**15 # Because CMSIS format is 16.48 51 config.writeReferenceQ63(3, asReal(ref)) 52 elif format==15: 53 ref = ref / 2**7 # Because CMSIS format is 8.24 54 config.writeReferenceQ31(3, asReal(ref)) 55 else: 56 config.writeReference(3, asReal(ref)) 57# 58 nb = Tools.loopnb(format,Tools.BODYANDTAIL) 59 ref = np.array(np.dot(data1[0:nb] ,data2[0:nb])) 60 if format==31: 61 ref = ref / 2**15 # Because CMSIS format is 16.48 62 config.writeReferenceQ63(4, asReal(ref)) 63 elif format==15: 64 ref = ref / 2**7 # Because CMSIS format is 8.24 65 config.writeReferenceQ31(4, asReal(ref)) 66 else: 67 config.writeReference(4, asReal(ref)) 68# 69 ref = np.absolute(data1) 70 if format==31: 71 ref = ref / 2 # Because CMSIS format is 2.30 72 elif format==15: 73 ref = ref / 2 # Because CMSIS format is 2.14 74 config.writeReference(5, ref) 75# 76 ref = np.absolute(data1)**2 77 if format==31: 78 ref = ref / 4 # Because CMSIS format is 3.29 79 elif format==15: 80 ref = ref / 4 # Because CMSIS format is 3.13 81 config.writeReference(6, ref) 82# 83 ref = data1 * data2 84 if format==31: 85 ref = ref / 4 # Because CMSIS format is 3.29 86 elif format==15: 87 ref = ref / 4 # Because CMSIS format is 3.13 88 config.writeReference(7, asReal(ref)) 89# 90 ref = data1 * data3 91 config.writeReference(8, asReal(ref)) 92 93 ref = np.array(np.dot(data1 ,data2)) 94 if format==31: 95 ref = ref / 2**15 # Because CMSIS format is 16.48 96 config.writeReferenceQ63(9, asReal(ref)) 97 elif format==15: 98 ref = ref / 2**7 # Because CMSIS format is 8.24 99 config.writeReferenceQ31(9, asReal(ref)) 100 else: 101 config.writeReference(9, asReal(ref)) 102 103def generatePatterns(): 104 PATTERNDIR = os.path.join("Patterns","DSP","ComplexMaths","ComplexMaths") 105 PARAMDIR = os.path.join("Parameters","DSP","ComplexMaths","ComplexMaths") 106 107 configf64=Tools.Config(PATTERNDIR,PARAMDIR,"f64") 108 configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32") 109 configf16=Tools.Config(PATTERNDIR,PARAMDIR,"f16") 110 configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31") 111 configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15") 112 113 configf32.setOverwrite(False) 114 configf16.setOverwrite(False) 115 configq31.setOverwrite(False) 116 configq15.setOverwrite(False) 117 118 writeTests(configf64,Tools.F64) 119 writeTests(configf32,0) 120 writeTests(configf16,16) 121 writeTests(configq31,31) 122 writeTests(configq15,15) 123 124if __name__ == '__main__': 125 generatePatterns() 126 127 128