def ordInvFHWTForNumItersGivenNumFwdIters(signal, num_fwd_iters, num_inv_iters): print("num_fwd_iters = %d" % num_fwd_iters) print("num_inv_iters = %d" % num_inv_iters) sig_len = len(signal) if sig_len < 2 or not NumUtils.isPowOf2(sig_len): raise Exception('sig_len < 2 or not isPowOf2') num_avail_iters = NumUtils.intLog2(sig_len) if num_inv_iters > num_fwd_iters: raise Exception('ordInvFHWTForNumItersGivenNumFwdIters: num_inv_iters > num_fwd_iters') a0, a1 = 0, 0 restored_vals = None gap = int(math.pow(2, num_avail_iters - num_fwd_iters)) print "num_avail_iters", str(num_avail_iters) print "num_fwd_iters", str(num_fwd_iters) print "gap", str(gap) j = 0 for scale in xrange(1, num_inv_iters + 1): restored_vals = [] restored_vals = [0 for i in xrange(2 * gap)] for i in xrange(gap): a0 = signal[i] + signal[gap + i] a1 = signal[i] - signal[gap + i] restored_vals[2 * i] = a0 restored_vals[2 * i + 1] = a1 for i in xrange(2 * gap): signal[i] = restored_vals[i] gap *= 2
def ordFHWTForNumIters(signal, num_iters): sig_len = len(signal) if not NumUtils.isPowOf2(sig_len): return num_sweeps = NumUtils.intLog2(sig_len) if num_iters > num_sweeps: raise Exception('ordFHWTForNumIters: num_iters > num_sweeps') acoeff = 0 ccoeff = 0 if num_sweeps == 1: acoeff = (signal[0] + signal[1]) / 2.0 ccoeff = (signal[0] - signal[1]) / 2.0 signal[0] = acoeff signal[1] = ccoeff return acoeffs = [] ccoeffs = [] for sweep_num in xrange(1, num_iters + 1): size = int(math.pow(2, num_sweeps - sweep_num)) acoeffs = [0.0 for i in xrange(size)] ccoeffs = [0.0 for i in xrange(size)] ai = 0 ci = 0 end = int(math.pow(2.0, num_sweeps - sweep_num + 1)) - 1 for i in xrange(0, end + 1, 2): acoeffs[ai] = (signal[i] + signal[i + 1]) / 2.0 ccoeffs[ci] = (signal[i] - signal[i + 1]) / 2.0 ai += 1 ci += 1 for i in xrange(size): signal[i] = acoeffs[i] signal[i + size] = ccoeffs[i]
def ordFHWT(signal): sig_len = len(signal) if not NumUtils.isPowOf2(sig_len): raise Exception('sig_len is not PowOf2') num_sweeps = NumUtils.intLog2(sig_len) if num_sweeps == 1: acoeff = (signal[0] + signal[1]) / 2.0 ccoeff = (signal[0] - signal[1]) / 2.0 signal[0] = acoeff signal[1] = ccoeff return acoeffs = [] ## step coeffs ccoeffs = [] ## wavelet coeffs for sweep_num in xrange(1, num_sweeps): size = int(math.pow(2, num_sweeps - sweep_num)) acoeffs = [0.0 for i in xrange(size)] ccoeffs = [0.0 for i in xrange(size)] ai = 0 ci = 0 end = int(math.pow(2, num_sweeps - sweep_num + 1)) - 1 for i in xrange(0, end + 1, 2): acoeffs[ai] = (signal[i] + signal[i + 1]) / 2.0 ccoeffs[ci] = (signal[i] - signal[i + 1]) / 2.0 ai += 1 ci += 1 for i in xrange(0, size): signal[i] = acoeffs[i] signal[i + size] = ccoeffs[i] acoeff = (signal[0] + signal[1]) / 2.0 ccoeff = (signal[0] - signal[1]) / 2.0 signal[0] = acoeff signal[1] = ccoeff
def ordInvFHWTForNumItersGivenNumFwdIters(signal, num_fwd_iters, num_inv_iters): print("num_fwd_iters = %d" % num_fwd_iters) print("num_inv_iters = %d" % num_inv_iters) sig_len = len(signal) if sig_len < 2 or not NumUtils.isPowOf2(sig_len): raise Exception('sig_len < 2 or not isPowOf2') num_avail_iters = NumUtils.intLog2(sig_len) if num_inv_iters > num_fwd_iters: raise Exception('ordInvFHWTForNumItersGivenNumFwdIters: num_inv_iters > num_fwd_iters') a0, a1 = 0, 0 restored_vals = None gap = int(math.pow(2, num_avail_iters - num_fwd_iters)) print "num_avail_iters", str(num_avail_iters) print "num_fwd_iters", str(num_fwd_iters) print "gap", str(gap) j = 0 for scale in xrange(1, num_inv_iters+1): restored_vals = [] restored_vals = [0 for i in xrange(2*gap)] for i in xrange(gap): a0 = signal[i] + signal[gap+i] a1 = signal[i] - signal[gap+i] restored_vals[2*i] = a0 restored_vals[2*i+1] = a1 for i in xrange(2*gap): signal[i] = restored_vals[i] gap *= 2
def ordFHWT(signal): sig_len = len(signal) if not OneDHWT.isPowOf2(sig_len): raise Exception('sig_len is not PowOf2') num_sweeps = NumUtils.intLog2(sig_len) if num_sweeps == 1: acoeff = (signal[0] + signal[1])/2.0 ccoeff = (signal[0] - signal[1])/2.0 signal[0] = acoeff signal[1] = ccoeff return acoeffs = [] ccoeffs = [] for sweep_num in xrange(1, num_sweeps): size = int(math.pow(2, num_sweeps - sweep_num)) ## print("size = %d" % size) acoeffs = [0.0 for i in xrange(size)] ccoeffs = [0.0 for i in xrange(size)] ai = 0 ci = 0 end = int(math.pow(2, num_sweeps - sweep_num + 1))-1 for i in xrange(0, end + 1, 2): acoeffs[ai] = (signal[i] + signal[i+1])/2.0 ccoeffs[ci] = (signal[i] - signal[i+1])/2.0 ai += 1 ci += 1 for i in xrange(0, size): signal[i] = acoeffs[i] signal[i+size] = ccoeffs[i] acoeff = (signal[0] + signal[1])/2.0 ccoeff = (signal[0] - signal[1])/2.0 signal[0] = acoeff signal[1] = ccoeff
def ordFHWTForNumIters(signal, num_iters): sig_len = len(signal) if not NumUtils.isPowOf2(sig_len): return num_sweeps = NumUtils.intLog2(sig_len) if num_iters > num_sweeps: raise Exception('ordFHWTForNumIters: num_iters > num_sweeps') acoeff = 0 ccoeff = 0 if num_sweeps == 1: acoeff = (signal[0] + signal[1])/2.0 ccoeff = (signal[0] - signal[1])/2.0 signal[0] = acoeff signal[1] = ccoeff return acoeffs = [] ccoeffs = [] for sweep_num in xrange(1, num_iters+1): size = int(math.pow(2, num_sweeps - sweep_num)) acoeffs = [0.0 for i in xrange(size)] ccoeffs = [0.0 for i in xrange(size)] ai = 0 ci = 0 end = int(math.pow(2.0, num_sweeps - sweep_num + 1)) - 1 for i in xrange(0, end+1, 2): acoeffs[ai] = (signal[i] + signal[i+1])/2.0 ccoeffs[ci] = (signal[i] - signal[i+1])/2.0 ai += 1 ci += 1 for i in xrange(size): signal[i] = acoeffs[i] signal[i + size] = ccoeffs[i]
def testOrdInvFHWT(signal): n = NumUtils.intLog2(len(signal)) orig_signal = copy.deepcopy(signal) print('n = %d' % n) print('signal: %s' % str(signal)) OneDHWT.ordFHWT(signal) print('OneDHWT: %s' % str(signal)) OneDHWT.ordInvFHWT(signal) print('OneInvDHWT: %s' % str(signal)) rslt = NumUtils.areEqualLists(signal, orig_signal) print('signal equality: %s' % str(rslt)) return rslt
def testOrdFHWTForNumIters(signal): n = NumUtils.intLog2(len(signal)) print('n = %d' % n) copy_signal = copy.deepcopy(signal) for i in xrange(1, n): print('num iters %d' % i) print('Original: %s' % str(signal)) OneDHWT.ordFHWTForNumIters(signal, i) print('Transformed: %s' % str(signal)) OneDHWT.orderedInvFHWTForNumIters(signal, i) print('Reversed: %s' % str(signal)) for j in xrange(len(signal)): if signal[j] != copy_signal[j]: print('FALSE') return print('TRUE')
def testOrdFHWTForNumIters(signal): n = NumUtils.intLog2(len(signal)) print("n = %d" % n) copy_signal = copy.deepcopy(signal) for i in xrange(1, n): print("num iters %d" % i) print("Original: %s" % str(signal)) OneDHWT.ordFHWTForNumIters(signal, i) print("Transformed: %s" % str(signal)) OneDHWT.orderedInvFHWTForNumIters(signal, i) print("Reversed: %s" % str(signal)) for j in xrange(len(signal)): if signal[j] != copy_signal[j]: print("FALSE") return print("TRUE")
def ordInvFHWT(signal): sig_len = len(signal) if sig_len < 2 or not NumUtils.isPowOf2(sig_len): raise Exception('sig_len < 2 or not isPowOf2') num_iters = NumUtils.intLog2(sig_len) a0 = 0 a1 = 0 restored_vals = None gap = 0 for scale in xrange(1, num_iters + 1): gap = int(math.pow(2, scale - 1)) restored_vals = [] restored_vals = [0.0 for i in xrange(2 * gap)] for i in xrange(gap): a0 = signal[i] + signal[gap + i] a1 = signal[i] - signal[gap + i] restored_vals[2 * i] = a0 restored_vals[2 * i + 1] = a1 for i in xrange(2 * gap): signal[i] = restored_vals[i]
def ordInvFHWT(signal): sig_len = len(signal) if sig_len < 2 or not NumUtils.isPowOf2(sig_len): raise Exception('sig_len < 2 or not isPowOf2') num_iters = NumUtils.intLog2(sig_len) a0 = 0 a1 = 0 restored_vals = None gap = 0 for scale in xrange(1, num_iters+1): gap = int(math.pow(2, scale-1)) restored_vals = [] restored_vals = [0.0 for i in xrange(2*gap)] for i in xrange(gap): a0 = signal[i] + signal[gap+i] a1 = signal[i] - signal[gap+i] restored_vals[2*i] = a0 restored_vals[2*i + 1] = a1 for i in xrange(2*gap): signal[i] = restored_vals[i]
def testOrdInvFHWTForNumItersGivenNumFwdIters(signal, num_fwd_iters, num_inv_iters): if num_inv_iters > num_fwd_iters: raise Exception('num_inv_iters > num_fwd_iters') num_avail_iters = NumUtils.intLog2(len(signal)) if num_inv_iters > num_avail_iters: raise Exception('num_inv_iters > num_avail_iters') orig_signal = copy.deepcopy(signal) sig_copy = copy.deepcopy(signal) print('num_fwd_iters = %d' % num_fwd_iters) print('num_inv_iters = %d' % num_inv_iters) OneDHWT.ordFHWTForNumIters(signal, num_fwd_iters) OneDHWT.ordFHWTForNumIters(sig_copy, num_fwd_iters - num_inv_iters) OneDHWT.ordInvFHWTForNumItersGivenNumFwdIters(signal, num_fwd_iters, num_inv_iters) rslt = NumUtils.areEqualLists(signal, sig_copy) print(signal) print(sig_copy) print('signal equality: %s' % str(rslt)) return rslt
def ordInvFHWTForNumIters(signal, num_iters): sig_len = len(signal) if sig_len < 2 or not NumUtils.isPowOf2(sig_len): return num_avail_iters = NumUtils.intLog2(sig_len) if num_iters > num_avail_iters: return a0, a1 = 0, 0 restored_vals = None gap = 1 j = 0 for scale in xrange(1, num_iters + 1): restored_vals = [] restored_vals = [0 for i in xrange(2 * gap)] for i in xrange(gap): a0 = signal[i] + signal[gap + i] a1 = signal[i] - signal[gap + i] restored_vals[2 * i] = a0 restored_vals[2 * i + 1] = a1 for i in xrange(2 * gap): signal[i] = restored_vals[i] gap *= 2
def ordInvFHWTForNumIters(signal, num_iters): sig_len = len(signal) if sig_len < 2 or not NumUtils.isPowOf2(sig_len): return num_avail_iters = NumUtils.intLog2(sig_len) if num_iters > num_avail_iters: return a0, a1 = 0, 0 restored_vals = None gap = 1 j = 0 for scale in xrange(1, num_iters+1): restored_vals = [] restored_vals = [0 for i in xrange(2*gap)] for i in xrange(gap): a0 = signal[i] + signal[gap+i] a1 = signal[i] - signal[gap+i] restored_vals[2*i] = a0 restored_vals[2*i+1] = a1 for i in xrange(2*gap): signal[i] = restored_vals[i] gap *= 2