Следующий скрипт демонстрирует построение обратимого 1Щ- фильтра. Для построения нужных многочленов используем функцию poly Id из модуля numpy. Скрипт 22. Процедура построения обратимого ІІІІ-филыпра В,А = s g n . b u t t e r ( 7 , . 8 , ’h i g h p a s s ’ ) # фильтр Баттеруорта РВ= n p . p o l y l d ( [ 0 . 6 , - . l j , . l j ] .T r u e ) # вещественный многочлен # с корнями по модулю меньше 1 В = РВ. c o e f f s . r e a l Сделаем несколько комментариев к скрипту 22. В качестве HR-филмра выбран фильтр Баттеруорта (butter) длины 7, который является устойчивым. Это гарантирует выполнение условия корни многочлена a[0]z7 -f a \ z 6 + • • • + ay меньше 1. Однако многочлен, построенный по коэффициентам В, вообще говоря, этим свойством не обладает. В этой связи строится новый многочлен, модули корней которого заведомо меньше 1. Параметр True в функции poly Id означает, что числа из списка являются корнями построенного многочлена. Поскольку мы хотим, чтобы коэффициенты многочлена были вещественными, вместе с комплексным корнем должен присутствовать и сопряженный ему. После завершения построения фильтра сигнал пропускается через этот фильтр, выбирается позиция в полученном сигнале и внедряется водяной знак на основе РСА, как указано в предыдущем параграфе. Чтобы проверить эффективность процедуры, с помощью обратного фильтра создаем модифицированный сигнал и проверяем наличие ЦВЗ в известной позиции, подсчитывая корреляцию отрезка файла в нужной позиции с ЦВЗ. Из рис.3.4 следует, что обнаружить ЦВЗ не удалось. С другой стороны, пропустив модифицированный сигнал через исходный фильтр, легко обнаруживаем наличие ЦВЗ, как это следует из рис. 3.5. Весь набор операторов помещен в скрипт 23. Скрипт 23. Внедрение ЦВЗ с использованием IIR фильтра
RkJQdWJsaXNoZXIy MTExODQxMg==