| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- import os.path
- import numpy as np
- import itertools
- import Tools
- import statsmodels.tsa.stattools
- # Those patterns are used for tests and benchmarks.
- # For tests, there is the need to add tests for saturation
- def cartesian(*somelists):
- r=[]
- for element in itertools.product(*somelists):
- r.append(element)
- return(r)
- def autocorr(x):
- result = np.correlate(x, x, mode='full')
- return result[result.size//2:]
- def writeTests(config,format):
- config.setOverwrite(False)
- NBSAMPLES=128
- inputsA=np.random.randn(NBSAMPLES)
- inputsB=np.random.randn(NBSAMPLES)
- inputsA = Tools.normalize(inputsA)
- inputsB = Tools.normalize(inputsB)
- if format==31:
- # To avoid overflow. There is no saturation in CMSIS code for Q31 conv/corr
- inputsA = inputsA / 16
- inputsB = inputsB / 16
-
- config.writeInput(1, inputsA,"InputsA")
- config.writeInput(1, inputsB,"InputsB")
- if format == 15:
- nbs = [(14, 15), (14, 16), (14, 17), (14, 18), (14, 33), (15, 15),
- (15, 16), (15, 17), (15, 18), (15, 33), (16, 15), (16, 16),
- (16, 17), (16, 18), (16, 33), (17, 15), (17, 16), (17, 17),
- (17, 18), (17, 33), (32, 15), (32, 16), (32, 17), (32, 18), (32, 33)]
- elif format == 7 :
- nbs = [(30, 31), (30, 32), (30, 33), (30, 34), (30, 49), (31, 31),
- (31,32), (31, 33), (31, 34), (31, 49), (32, 31), (32, 32),
- (32, 33), (32,34), (32, 49), (33, 31), (33, 32), (33, 33), (33, 34),
- (33, 49), (48,31), (48, 32), (48, 33), (48, 34), (48, 49)]
- else:
- nbs = [(4, 1), (4, 2), (4, 3), (4, 8), (4, 11), (5, 1), (5, 2), (5, 3), (5, 8), (5, 11), (6, 1), (6, 2), (6, 3), (6, 8), (6, 11), (9, 1), (9, 2),
- (9, 3), (9, 8), (9, 11), (10, 1), (10, 2), (10, 3), (10, 8), (10, 11), (11, 1), (11, 2), (11, 3), (11, 8), (11, 11), (12, 1), (12, 2),
- (12, 3), (12, 8), (12, 11), (13, 1), (13, 2), (13, 3), (13, 8), (13, 11)]
- nbTest = 1
- for (na,nb) in nbs:
- #print(na,nb)
- ref = np.correlate(inputsA[0:na],inputsB[0:nb],"full")
- if na > nb:
- padding = na - nb
- z = np.zeros(padding)
- ref = np.concatenate((z,ref))
- else:
- padding = nb - na
- z = np.zeros(padding)
- ref = np.concatenate((ref,z))
- config.writeReference(nbTest, ref)
- nbTest = nbTest + 1
- for (na,nb) in nbs:
- #print(na,nb)
- ref = np.convolve(inputsA[0:na],inputsB[0:nb],"full")
- config.writeReference(nbTest, ref)
- nbTest = nbTest + 1
- # Levinson durbin tests
- a = [Tools.loopnb(format,Tools.TAILONLY),
- Tools.loopnb(format,Tools.BODYONLY),
- Tools.loopnb(format,Tools.BODYANDTAIL),
- ]
- a = list(np.unique(np.array(a)))
- #a = [3]
- # Errors of each levinson durbin test
- err=[]
- errTestID = nbTest
- for na in a:
-
- s = np.random.randn(na+1)
- s = Tools.normalize(s)
- phi = autocorr(s)
- phi = Tools.normalize(phi)
- config.writeInput(nbTest, phi,"InputPhi")
- sigmav,arcoef,pacf,sigma,phi=statsmodels.tsa.stattools.levinson_durbin(phi,nlags=na,isacov=True)
-
- err.append(sigmav)
-
- config.writeReference(nbTest, arcoef)
- nbTest = nbTest + 1
- config.writeReference(errTestID, err,"LDErrors")
- # Partial convolutions
- config.setOverwrite(True)
- inputsA=np.random.randn(NBSAMPLES)
- inputsB=np.random.randn(NBSAMPLES)
- inputsA = Tools.normalize(inputsA)
- inputsB = Tools.normalize(inputsB)
- config.writeInput(2, inputsA,"InputsA")
- config.writeInput(2, inputsB,"InputsB")
- (na,nb) = (6, 8)
- # First = 3
- numPoints=4
- ref = np.convolve(inputsA[0:na],inputsB[0:nb],"full")
-
- first=3
- config.writeReference(nbTest, ref[first:first+numPoints])
- nbTest = nbTest + 1
- first=9
- config.writeReference(nbTest, ref[first:first+numPoints])
- nbTest = nbTest + 1
- first=7
- config.writeReference(nbTest, ref[first:first+numPoints])
- nbTest = nbTest + 1
-
-
- def generatePatterns():
- PATTERNDIR = os.path.join("Patterns","DSP","Filtering","MISC","MISC")
- PARAMDIR = os.path.join("Parameters","DSP","Filtering","MISC","MISC")
-
- configf64=Tools.Config(PATTERNDIR,PARAMDIR,"f64")
- configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
- configf16=Tools.Config(PATTERNDIR,PARAMDIR,"f16")
- configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
- configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
- configq7=Tools.Config(PATTERNDIR,PARAMDIR,"q7")
- configf32.setOverwrite(False)
- configf16.setOverwrite(False)
- configq31.setOverwrite(False)
- configq15.setOverwrite(False)
- configq7.setOverwrite(False)
- writeTests(configf64,Tools.F64)
- writeTests(configf32,0)
- writeTests(configf16,16)
- writeTests(configq31,31)
- writeTests(configq15,15)
- writeTests(configq7,7)
- if __name__ == '__main__':
- generatePatterns()
|