import numpy as np from numpy import * import matplotlib matplotlib.use('TkAgg') from matplotlib import pyplot as plt from matplotlib import animation # low pass filter # b0*1 + b1*1 + b2*1 + b3*1 = 0 # b0*0 + b1*1 + b2*2 + b3*3 = 0 # high pass filter # c0*b0 + c1*b1 + c2*b2 + c3*b3 = 0 # b0 = c3, b1 = -c2, b2 = c1, b3 = -c0 dim = 12 N = 2**dim def formCoeffMatrix(c,b,N): # Form the matrix of coefficients rowc = append(c, zeros(N-len(c))) rowb = append(b, zeros(N-len(b))) cc = zeros([N,N]) for i in arange(0,N,2): cc[i] = roll(rowc, i) cc[i+1] = roll(rowb, i) return cc def formSplititngMatrix(N): # Form the splitting matrix row1 = append([1, 0], zeros(N-2)) row2 = append([0, 1], zeros(N-2)) sp = zeros([N,N]) for i in arange(0,N/2,2): sp[i] = roll(row1, 2*i) sp[i+1] = roll(row2, 2*i+1) j = 0 for i in arange(N/2,N-1,2): sp[i] = roll(row2, 2*j) sp[i+1] = roll(row1, 2*j+3) j = j+2 sp[N-1] = roll(row2, 2*j) return sp c = [(1+pow(3,.5))/(4*pow(2,.5)), (3+pow(3,.5))/(4*pow(2,.5)), (3-pow(3,.5))/(4*pow(2,.5)), (1-pow(3,.5))/(4*pow(2,.5))] b = [-c[3], -c[2], c[1], -c[0]] xw = zeros(N) xw[4] = 1 xw[29] = 1 for i in range(2,dim+1): print i filt = formCoeffMatrix(c, b, 2**i) split = formSplititngMatrix(2**i) xw[:2**i] = dot(dot(filt.T,split.T),xw[:2**i]) fig = plt.figure() ax = plt.axes(xlim=(0,len(xw)), ylim=(min(xw)*1.2,max(xw)*1.2)) ax.plot(xw) plt.show()