Exemple #1
0
 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
Exemple #2
0
 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]
Exemple #3
0
    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
Exemple #4
0
 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
Exemple #5
0
    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
Exemple #6
0
 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')
Exemple #9
0
 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")
Exemple #10
0
 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]
Exemple #11
0
 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
Exemple #13
0
 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
Exemple #14
0
 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