import numpy as N import pylab as P import sys,os def getKernels(fs=22050,lofreq=100,nGamma=32,kernelDir='kernels',doPlot=False): ''' Load, normalize and crop kernels. Arguments: - fs, lofreq, N corresponding to gammatone filterbank properties - kernelDir is directory of kernel - doPlot is boolean. If true, we plot the kernels before returning them Returns: - kernels: the kernels (variable length unit norm) Pierre-Antoine Manzagol University of Montreal ''' print 'Getting kernels. Sampling of ' + str(fs) + 'Hz, with ' + str(nGamma) + ' kernels from fs/2 to ' + str(lofreq) + ' Hz.' # load kernels and their frequencies specs = '-fs' + str(fs) + '-lo' + str(lofreq) + '-N' + str(nGamma) kerFn='%s/kernels%s' % (kernelDir,specs) kers = N.loadtxt(kerFn) freqs = N.loadtxt('%s/freqs%s' % (kernelDir,specs)) sf = float( N.loadtxt('%s/fs%s' % (kernelDir,specs))) # Crop and normalize each kernel kers = list(kers) for i in range(len(kers)): # crop when absolute value smaller than percentage of maximum absolute value kerabsmax = max(abs(kers[i])) while kers[i][-1] < 0.001 * kerabsmax: kers[i] = kers[i][:-1] # normalize kers[i] = kers[i] / P.norm(kers[i]) if doPlot: ctr=0 for (k,f) in zip(kers,freqs) : P.plot(k+ctr+1) P.text(-200,ctr+.5,'%iHz' % f) ctr+=1 P.axis([-300,max(map(len,kers)),0,len(kers)+1]) P.title('Kernels from %s' % kerFn ) P.show() return (kers,freqs) if __name__=='__main__' : (kers,freqs) = getKernels(doPlot=True)