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