def __init__(self, scale, fs, Ls, real=True, matrixform=False, reducedform=0, multichannel=False, measurefft=False, multithreading=False, dtype=float): assert fs > 0 assert Ls > 0 assert 0 <= reducedform <= 2 self.scale = scale self.fs = fs self.Ls = Ls self.real = real self.measurefft = measurefft self.multithreading = multithreading self.reducedform = reducedform self.frqs,self.q = scale() # calculate transform parameters self.g,rfbas,self.M = nsgfwin(self.frqs, self.q, self.fs, self.Ls, sliced=False, dtype=dtype) if real: assert 0 <= reducedform <= 2 sl = slice(reducedform,len(self.g)//2+1-reducedform) else: sl = slice(0,None) # coefficients per slice self.ncoefs = max(int(ceil(float(len(gii))/mii))*mii for mii,gii in zip(self.M[sl],self.g[sl])) if matrixform: if self.reducedform: rm = self.M[self.reducedform:len(self.M)//2+1-self.reducedform] self.M[:] = rm.max() else: self.M[:] = self.M.max() if multichannel: self.channelize = lambda s: s self.unchannelize = lambda s: s else: self.channelize = lambda s: (s,) self.unchannelize = lambda s: s[0] # calculate shifts self.wins,self.nn = calcwinrange(self.g, rfbas, self.Ls) # calculate dual windows self.gd = nsdual(self.g, self.wins, self.nn, self.M) self.fwd = lambda s: nsgtf(s, self.g, self.wins, self.nn, self.M, real=self.real, reducedform=self.reducedform, measurefft=self.measurefft, multithreading=self.multithreading) self.bwd = lambda c: nsigtf(c, self.gd, self.wins, self.nn, self.Ls, real=self.real, reducedform=self.reducedform, measurefft=self.measurefft, multithreading=self.multithreading)
def __init__(self,scale,fs,Ls,real=True,measurefft=False,matrixform=False,reducedform=0,multichannel=False): assert fs > 0 assert Ls > 0 assert 0 <= reducedform <= 2 self.scale = scale self.fs = fs self.Ls = Ls self.real = real self.measurefft = measurefft self.reducedform = reducedform self.frqs,self.q = scale() # calculate transform parameters self.g,rfbas,self.M = nsgfwin(self.frqs,self.q,self.fs,self.Ls,sliced=False) if matrixform: if self.reducedform: rm = self.M[self.reducedform:len(self.M)//2+1-self.reducedform] self.M[:] = rm.max() else: self.M[:] = self.M.max() if multichannel: self.channelize = lambda s: s self.unchannelize = lambda s: s else: self.channelize = lambda s: (s,) self.unchannelize = lambda s: s[0] # calculate shifts self.wins,self.nn = calcwinrange(self.g,rfbas,self.Ls) # calculate dual windows self.gd = nsdual(self.g,self.wins,self.nn,self.M) self.fwd = lambda s: nsgtf(s,self.g,self.wins,self.nn,self.M,real=self.real,reducedform=self.reducedform,measurefft=self.measurefft) self.bwd = lambda c: nsigtf(c,self.gd,self.wins,self.nn,self.Ls,real=self.real,reducedform=self.reducedform,measurefft=self.measurefft)