sturlamolden wrote: > def D4_Transform(x, s1=None, d1=None, d2=None): > """ > D4 Wavelet transform in NumPy > (C) Sturla Molden > """ > C1 = 1.7320508075688772 > C2 = 0.4330127018922193 > C3 = -0.066987298107780702 > C4 = 0.51763809020504137 > C5 = 1.9318516525781364 > if d1 == None: > d1 = numpy.zeros(x.size/2) > s1 = numpy.zeros(x.size/2) > d2 = numpy.zeros(x.size/2) > odd = x[1::2] > even = x[:-1:2] > d1[:] = odd[:] - C1*even[:] > s1[0] = even[0] + C2*d1[0] + C3*d1[-1] #typ0 > s1[1:] = even[1:] + C2*d1[1:] + C3*d1[:-1] #typo > d2[0] = d1[0] + s1[-1] > d2[1:] = d1[1:] + s1[:-1] > even[:] = C4 * s1[:] > odd[:] = C5 * d2[:] > if x.size > 2: > D4_Transform(even,s1[0:even.size/2], > d1[0:even.size/2],d2[0:even.size/2])
Actually, there was a typo in the original code. I used d1[l-1] where I should have used d1[l+1]. Arrgh. Here is the corrected version, the Matlab code must be changed similarly. It has no relevance for the performance timings though. def D4_Transform(x, s1=None, d1=None, d2=None): """ D4 Wavelet transform in NumPy (C) Sturla Molden """ C1 = 1.7320508075688772 C2 = 0.4330127018922193 C3 = -0.066987298107780702 C4 = 0.51763809020504137 C5 = 1.9318516525781364 if d1 == None: d1 = numpy.zeros(x.size/2) s1 = numpy.zeros(x.size/2) d2 = numpy.zeros(x.size/2) odd = x[1::2] even = x[:-1:2] d1[:] = odd[:] - C1*even[:] s1[:-1] = even[:-1] + C2*d1[:-1] + C3*d1[1:] s1[-1] = even[-1] + C2*d1[-1] + C3*d1[0] d2[0] = d1[0] + s1[-1] d2[1:] = d1[1:] + s1[:-1] even[:] = C4 * s1[:] odd[:] = C5 * d2[:] if x.size > 2: D4_Transform(even,s1[0:even.size/2], d1[0:even.size/2],d2[0:even.size/2]) -- http://mail.python.org/mailman/listinfo/python-list