и нулевым средним. Однако произвольный ЦВЗ этим свойством не обладает. Идея заключается в том, что исходный ЦВЗ преобразуется с помощью ЛПМ в последовательность, обладающую нужными свойствам. Но для этого она должна быть достаточно длинной. В этой связи и матрица А в ЛПМ должна иметь большой размер, чтобы ее порядок р, А1' = I был больше длины ЦВЗ. Поскольку сопровождающая матрица строится известным способом, создаем функцию, порождающую эту матрицу по многочлену (см. скрипт 6 ). Скрипт 6. Создание, сопровождающей матрицы по многочлену def c r ea t eMa t r (Po ly ,Red ix=2 ) : WithOutFirst = np . i n t _ ( P o l y [ 1 : ] ) WithOutFirst = -WithOutFirst'/.Redix Ln = len(Wi thOutF irs t ) Matr = np . i n t _ ( n p . z e r o s ( (L n ,L n ) ) ) f o r I in x r a n g e (L n - l ) : Ma tr [ I ,1+1] = 1 f o r I in xrange (Ln ) : Ma tr [Ln - l , I ] = WithOutFirst[Ln - I -1] re turn Matr Теперь сравним работу с оригинальным и преобразованным водяными знаками. Скрипт 7. Сравнение результатов внедрения оригинального ЦВЗ и шифрованного с помощью ЛПМ. ConvPoly = n p . i n t _ ( [ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 ] ) ConvState = n p . i n t _ ( n p . o n e s (11 ) ) ConvState[5] = 0 [Fr,Dat] = r e ad ( ’ka .wav ’ ) Wtr = ’Я автор этого произведения. Оно принадлежит мне’ Coef = 5 Pos =1300 # позиция, с которой начинается знак B i t = b i t a r r a yO B i t . frombytes(Wtr)
RkJQdWJsaXNoZXIy MTExODQxMg==