Пример #1
0
    def  decode(self, data, verbose=False):
        """ Найти 2 единицы, убрать последнюю
            развернуть последовательность,
            получить цифру

            data - binary
        """
        bits, decoded = [], []

        br = BitStreamReader(data)
        while not br.finished():
            bit = br.get()
            
            if bit and bits and bits[-1]:                
                if verbose:
                    bits.append(bit)
                    if verbose: print ''.join(str(int(b)) for b in bits)
                    bits = bits[:-1]

                number = 0
                for i,b in enumerate(bits):
                    self.fibonacci_to_index(i)
                    number += b * self.fib_series[i]

                if verbose: print number
                decoded.append(number)
                bits = []
            else:
                bits.append(bit)

        return map(int,decoded)
Пример #2
0
    def  decode(self, data, verbose=False):
        """ Найти 2 единицы, убрать последнюю
            развернуть последовательность,
            получить цифру

            data - binary
        """
        bits, decoded = [], []

        br = BitStreamReader(data)
        while not br.finished():
            bit = br.get()
            
            if bit and bits and bits[-1]:                
                if verbose:
                    bits.append(bit)
                    if verbose: print ''.join(str(b) for b in bits)
                    bits = bits[:-1]

                number = 0
                for i,b in enumerate(bits):
                    number += b * self.fib_series[i]

                if verbose: print number
                decoded.append(number)
                bits = []
            else:
                bits.append(bit)

        return decoded
Пример #3
0
    def decode(self, data, verbose=False):
        """ Return decoded sequence """
        decoded = []
        if verbose:
            print

        coded, j, k, control = [0] * self.n_data, 0, 0, 0
        br = BitStreamReader(data)
        while not br.finished():
            bit = br.get()

            if j < self.n_ctrl:
                control |= bit << ((self.n_ctrl - 1) - j)
                j += 1
            else:
                coded[k] = bit
                k += 1

                if k >= self.n_data:
                    n_bits = self.counts[::-1][control] - 1

                    if verbose:
                        print "".join([str(b) for b in self.bits(control)[-self.n_ctrl :]]), "  ",
                        print "".join([str(c) for c in coded[:k]])

                    n_packed = self.n_data / (self.counts[control])
                    for n in xrange(self.counts[control]):
                        number = 0
                        for m in xrange(n_packed):
                            index = n * n_packed + m
                            number |= (1 if coded[index] else 0) << (n_bits - m)
                        decoded.append(number)

                    if verbose:
                        print decoded[-self.counts[control] :]
                    j, k, control = 0, 0, 0

        return decoded
Пример #4
0
    def  decode(self, data, verbose=False):
        """ Return decoded sequence """
        decoded = []
        if verbose: print

        coded, j, k, control = [0] * self.n_data, 0, 0, 0
        br = BitStreamReader(data)
        while not br.finished():
            bit = br.get()

            if j < self.n_ctrl:
                control |= (bit << ((self.n_ctrl - 1) - j))
                j += 1
            else:
                coded[k] = bit
                k += 1
            
                if k >= self.n_data:                    
                    n_bits   = (self.counts[::-1][control] - 1)

                    if verbose:
                        print ''.join([ str(b) for b in self.bits(control)[-self.n_ctrl:]]), '  ',
                        print ''.join([ str(c) for c in coded[:k]])

                    n_packed = (self.n_data / (self.counts[control]))
                    for n in xrange(self.counts[control]):
                        number = 0
                        for m in xrange(n_packed):
                            index = n * n_packed + m
                            number |= ((1 if coded[index] else 0) << (n_bits - m))
                        decoded.append(number)

                    if verbose: print decoded[-self.counts[control]:]
                    j, k, control = 0, 0, 0

        return decoded