Восьмеричное 171 — это двоичное 1111001, восьмеричное 133 — это двоичное 1011011. Таким образом, единица означает наличие связи с сумматором (по модулю 2), ноль — отсутствие связи.
импорт numpy как np из scipy.ndimage.interpolation импорт сдвигакласс ConvolutionalCodes : def __init__ ( self , poly ) : self.poly = poly def poly2regs ( self ): poly = self.poly L = poly [ 0 ] # Ограничить длину Gen = [] # Список генераторов для g in poly [ 1 ]: bin_str = bin ( int ( str ( g ), 8 ))[ 2 : ] # Из восьмеричного в двоичное представление split_str = list ( tuple ( bin_str )) # Разделить биты split_int = [ int ( i ) for i in split_str ] # Преобразовать из символов в целые числа Gen.append ( split_int ) return L , Gen def encoder ( self , message ) : L , Gen = self.poly2regs ( ) Gen = np.matrix ( Gen ) memory = np.zeros ( ( L , ) ) закодировано = [ ] для бита в сообщении : memory = np.abs ( shift ( memory , 1 , cval = np.NaN ) .round ( ) ) memory [ 0 ] = bit y = np.array ( np.dot ( Gen , memory ) % 2 ) [ закодировано.append ( i ) for i in y [ 0 ] ] return закодировано convC = ConvolutionalCodes ([ 7 ,[ 171 , 133 ] ]) convC.poly2regs ( ) convC.encoder ( [ 1 , 0 , 1 , 0 , 0 , 1 , 1 ] )