Основная идея метода фазового кодирования состоит в замене фазы исходного звукового сегмента на опорную фазу, характер изменения которой отражает собой данные, которые необходимо скрыть. Для того чтобы сохранить разностную фазу между сегментами, фазы последних соответствующим образом согласовываются.
Фазовое кодирование, когда оно может быть использовано, является одним из наиболее эффективных методов по критерию отношения сигнал/воспринимаемый шум. Существенное изменение соотношения фаз между каждыми частотными составляющими приводит к значительному рассеиванию фазы. Тем не менее, до тех пор, пока модификация фазы в достаточной мере мала, может быть достигнуто скрытие, неощутимое на слух. Разумеется, модификация считается малой по отношению к конкретному наблюдателю, поскольку специалисты по спектральному анализу способны обнаружить те изменения, которые непрофессионалу могут показаться незначительными.
Процедура фазового кодирования заключается в следующем:
1. Звуковая последовательность разбивается на серию N коротких сегментов (блоков) — рис. 5.66, а, б.
2. К n -му сегменту сигнала применяется K-точечное ДПФ, где K=I/N, и создаются массивы фаз и амплитуд для (рис. 5.66, в).
3. Запоминается разность фаз между каждыми соседними сегментами для (рис. 5.66,г):
(5.59)
4. Двоичная последовательность данных представляется как или , отображая, соответственно, "1" или "0" (рис. 5.66, д):
5. С учетом разности фаз воссоздается новый массив фаз для n> 1 (рис. 5.66, е).
(5.60)
6. Восстановление звукового сигнала осуществляется путем применения операции обратного ДПФ к исходной матрице амплитуд и модифицированной матрице фаз (рис. 5.66, ж, з).
Перед процессом расшифровывания должна быть проведена синхронизация последовательности. Приемной стороне должны быть известны длина сегмента, точки ДПФ и интервал данных. Значение основной фазы первого сегмента определяется как "0" или "1", которые представляют закодированную двоичную последовательность.
Поскольку фаза является модифицированной, соответствующим образом будут изменены и абсолютные фазы последующих сегментов. Однако относительная разность фаз между каждыми смежными сегментами будет сохранена. Именно к этой относительной разности в фазе и обнаруживается наибольшая чувствительность человеческого слуха.
(а) Исходный сигнал
(б) Разбитие 5 на N сегментов
(в) Выделение амплитуды и фазы каждого сегмента
(г) Вычисление разности фаз между соседними сегментами
(д) Для сегмента 5, создается искусственная абсолютная фаза
(е) Для всех остальных сегментов создаются новые массивы фаз
(ж) Новая фаза и исходная амплитуда объединяются для получения нового сегмента S
(з) Новые сегменты объединяют вместе для получения "заполненного" сигнала-контейнера
Рис. 5.66. Блок-схема фазового кодирования
Разброс фаз — искажение, вызванное нарушением корреляции фаз между каждой из частотных составляющих. Уменьшение разброса фаз ограничивает скорость передачи данных при фазовом кодировании. Одной из причин разброса фаз можно назвать замещение фазы двоичным кодом. Для уменьшения искажений, значение модифицированной фазы должно быть близким к ее первичному значению. А для того чтобы снизить чувствительность встроенных данных к шуму, должна увеличиваться разность между структурами модифицированной фазы. Для этого, например, биту "0" может отвечать значение , а биту "1" — значение .
Еще одним источником искажения является скорость изменения модифицированной фазы. Если искажение применено к каждому элементу дискретизации ДПФ, это с большой вероятностью разрушит связи между фазами соседних частотных составляющих, что, в результате, приведет к наложению фонового биения. Путем более медленного изменения фазы и согласования переходов между изменениями фазы, достигается существенное снижение ощутимых на слух искажений.
На рис. 5.67 изображены резкие переходы фазы в сравнении со сглаженными. Крутые фронты фазовых переходов вызывают значительные искажения контейнера (а); уровень искажения уменьшается, если фронты были предварительно сглажены (б).
Рис. 5.67. Сравнение резких и сглаженных переходов фазы
Следует отметить, что в обоих случаях, изображенных на рис. 5.67, информационные точки соответствуют одним и тем же значениям частоты. Такое плавное изменение характеризуется, к сожалению, таким недостатком, как сокращение полосы пропускания, поскольку для того чтобы сделать возможным плавный переход, необходимо зарезервировать достаточно места между каждой информационной точкой.
Недостатком схемы, построенной на основе метода фазового кодирования, является низкая пропускная способность. В экспериментах [14] ПС канала варьировалась от 8 до 32 бит/с в зависимости от звукового контекста.
Нами предлагается следующая реализация метода фазового кодирования.
Шаг 1
Импортируем файл исходного аудиоконтейнера в массив квантованных амплитуд дискретных отсчетов документа MathCAD:
С:= READWAV ("C.wav").
Скрываемые данные будем вносить в первый канал исходного звукового файла: .
Количество элементов в указанном канале-контейнере: I:= rows(S), І = 20191; i:= 1.. I. Временная диаграмма первого канала ИКМ сигнала изображена на рис. 5.63.
Шаг 2
Допустим, скрытию подлежит сообщение следующего содержания:
М:= "© Пузыренко А.Ю., 2005 г.".
Битовая длина сообщения: LM:= 8 strlen(M), LM = 200 бит.
Шаг 3
Проведем разбиение звуковой последовательности на сегменты. Количество сегментов N определяется длиной К отдельного сегмента. Как будет в дальнейшемпоказано, параметр К должен быть результатом возведения двойки в степень , где — целое число, зависящее от длины LM скрываемого сообщения. При этом биты информации будут заноситься в массив фаз, полученный в результате вычисления для сегмента быстрого преобразования Фурье (БПФ).
Отмеченный массив имеет размерность вдвое меньшую размерности сегмента, для которого проводилось вычисление БПФ. Следовательно, значение параметра можно найти из решения неравенства , откуда
v:=cell(tog(LM,2) + 1),
где log (z, 2) — стандартная запись вычисления логарифма по основанию 2 от аргумента z; функция сеil(х) возвращает наименьшее целое, которое превышает или равняется аргументу х.
Результатом решения при LM = 200 будет =9. Следовательно, (степень увеличена на единицу для уменьшения искаженности контейнера после внедрения в него скрываемой информации). При этом К = 1024; k:=1.. K.
Определим количество сегментов N, на которое необходимо разбить последовательность аудиоданных: N:= ceil(l/K), N = 20; n:= 1.. N; l/К = 19,718. 1
Если целое значение N превышает результат отношения l/К, то контейнер необходимо расширить. Например, путем дописывания в конец вектора-сигнала нулей — (М. 109).
Таким образом, новое значение I:= rows(S), I =20480. Окончательно определившись с основными размерностями, проведем разбиение первичной звуковой последовательности S, используя программный модуль (М. 110).
Схема разбиения приведена на рис. 5.68
Рис. 5.68 Сигнал , разбитый на N сегментов
Шаг 4
С помощью встроенной в MathCAD функции FFT(V) выполняем БПФ для данных, записанных в векторе-аргументе V. Последний должен содержать элементов, где — целое число. Результатом выполнения функции является вектор размерностью
В нашем случае, в качестве аргумента функции БПФ будут выступать векторы отдельных сегментов sn (М. 111, а).
Каждый n -й элемент полученного в результате массива а содержит подмассив из элементов, которые представляют собой продукт вычисления БПФ для сегмента sn.
Используя известные зависимости, получаем массивы амплитуд и фаз — (М.111 б,в).
Запись вида означает операцию векторизации — выполнение заданной операции для всех элементов массива V.
В качестве примера, приведем результат вычисления (первые 15 элементов) для 1-го сегмента (рис. 5.69).
S1= | |||||||||||||
-8 | -16.17i | 16.171 | 3.142 | -16.17i | |||||||||
-1 | -16.039-0.37i | 16.043 | -3.118 | -16.039-0.37i | |||||||||
-16.548-0.428i | 16.554 | 3.116 | -16.548-0.428i | ||||||||||
-11.696+0.936i | 11.773 | 3.062 | -11.696+0.936i | ||||||||||
-22.515+1.469i | 22.562 | 3.076 | -22.515+1.469i | ||||||||||
-18.979-1.948i | 19.078 | -3.039 | -18.979-1.948i | ||||||||||
-18.442-2.908i | 18.670 | -2.985 | -18.442-2.908i | ||||||||||
-1 | -18.062-2.386i | 18.219 | -3.010 | -18.062-2.386i | |||||||||
-4 | -13.601-1.661i | 13.702 | -3.020 | -13.601-1.661i | |||||||||
-5 | -21.488-11.192i | 24.228 | -2.661 | -21.488-11.192i | |||||||||
-7 | -21.555-1.861i | 21.635 | -3.055 | -21.555-1.861i | |||||||||
-7 | -16.348-1.132i | 16.387 | -3.072 | -16.348-1.132i | |||||||||
-12 | -17.928-7.227i | 19.329 | -2.758 | -17.928-7.227i | |||||||||
-8 | -20.536-6.973i | 21.687 | -2.814 | -20.536-6.973i | |||||||||
-11 | -22.17-4.883i | 22.701 | -2.925 | -22.17-4.883i |
Рис. 5.69 Пример вычисления программных модулей (М.110) и (М.111)
На рис. 5.70 представлена графическая интерпретация амплитудного и фазового массивов для первого сегмента.
Шаг 5
С помощью программного модуля (М.112) сохраняем информацию о разнице фаз между каждыми соседними сегментами
Рис. 5.70 Пример выделенного амплитудного сегмента s1
На рис. 5.71 проиллюстрирован результат вычисления разности фаз между вторым и первым сегментами.
Рис. 5.71 Пример вычисления разности фаз между сегментами s1 и s2
Шаг 6
С помощью программного модуля (М.113), учитывая разность фаз , воссоздаем новую матрицу фаз. При этом двоичную последовательность, в которую предварительно преобразовываем скрываемые данные, встраиваем как значение фазы, которое равняется , если скрывается бит "1" и , если скрывается бит "0". Результат вычисления модуля, на примере новых фаз сегментов s1 и s2, приведен на рис. 5.72.
При формировании массива новых фаз внесение скрываемых данных начинается с высокочастотных составляющих. Кроме того, остаются без изменений первая и последняя составляющие полученного фазового спектра, поскольку их модификация приводит к значительному искажению исходного сигнала.
После внесения данных, которые необходимо было скрыть, массив дописывается элементами из первичного фазового массива.
Рис. 5.72. Результаты встраивания данных в фазовый спектр сегмента S1 (а),вычисления новых значений фаз спектра сегмента S2 (б), проверки разности фаз между спектрами сегментов S2 и S1 (в)
Шаг 7
Восстанавливаем сегменты путем применения обратного БПФ (ОБПФ) к n исходным массивам амплитуд (Аn) и модифицированным массивам фаз — программный модуль (М.114). При этом используем встроенную функцию ОБПФ вида IFFT(W), где вектор W должен содержать [(К/2) + 1] элементов. Результатом выполнения функции является вектор V, количество элементов в котором равняется К.
Результат объединения приведен на рис. 5.73 (напомним, что в данном случае нами было скрыто 200-битовое сообщение).
Рис. 5.73 Сигнал, восстанавливаемый по сегментам при объеме скрытого сообщения 200 бит
На рис. 5.74 изображен восстановленный звуковой сигнал, в случае скрытия в нем 512-битового сообщения при сохранении неизменной длины сегмента (К = 1024). Очевидно, что в данном случае уровень скрытости конфиденциального сообщения является недопустимо низким.
Рис. 5.74 Сигнал, восстанавливаемый по сегментам при объеме скрытого сообщения 512 бит
Шаг 8
Перед записью звукового файла необходимо увеличить размерность вектора, который соответствует модифицированному каналу (в нашем случае — второму), до размерности модифицированного канала (первого). Для этого можно воспользоваться модулем (М.116), который при необходимости дописывает нули в конец исходного массива.
В результате появляется возможность объединить массивы обоих каналов в общий массив: СМ:= augment(S’, С2) и, в конечном итоге, провести запись в файл:
WRITEWAV("CM_Phase.wav", fД, Q):= СМ
Шаг 9
Рассмотрим алгоритм извлечения скрытой информации. На основе аудиофайла, представляющего собой заполненный стеганоконтейнер, формируем массив квантованных амплитуд дискретных отсчетов1
СМ* = READWAV("CM_Phase wav").
Получателю должны быть известны длина каждого из сегментов (в нашем случае — К*:= 1024); точки БПФ, в которые встраивались данные; алгоритм встраивания данных (канал, в который вносилась информация, метод ее внесения и т.п.)
Пусть известно, что скрытые данные могут содержаться в первом канапе. Следовательно, S *=СМ*<1> Общее количество элементов в указанном контейнере: l*=rows(S*), l*= 20480 Количество сегментов, на которое необходимо разделить контейнер N*=l */К*, N*=20
В соответствии с программным модулем (МЛ.110) проводим разбитие звуковой последовательности S* на сегменты s*n.
Для первого сегмента вычисляем БПФ и определяем массив фаз:
Для извлечения скрытой информации из полученного массива фаз используем программный модуль (M.117) В данном модуле последовательно анализируются значения фаз каждой частотной составляющей спектра, первого сегмента на факт отклонения от установленного порога (как в сторону отрицательных, так и в сторону положительных значений).
В качестве значения порога не рекомендуется использовать строгое равенство , поскольку аудиофайл в процессе передачи может претерпеть определенные изменения. Кроме того, операции БПФ возвращают значения, округленные в некотором приближении. Исходя из этого, для "смягчения" критериев поиска порог рекомендуется несколько снизить (в нашем случае был установлен уровень ). При значении фазы, меньшем отрицательного значения порога, принимается решение о скрытом бите "1", в случае значения фазы, которое превышает положительный порог, делается вывод о скрытии бита "0".
Если анализируемый аудиофайл содержит скрытую фазовым методом информацию, результатом выполнения модуля (МЛ 17) будет строка символов: М* = М. Рассчитанные показатели звукового искажения сведены в табл. 5|6(стр. 231).