Файл: Методы кодирования данных (Процесс формирования цифровых сигналов).pdf
Добавлен: 31.03.2023
Просмотров: 168
Скачиваний: 1
Из эвристических соображений сформулируем свойства помехоустойчивого кода с исправлением ошибок, которые позволили бы обеспечить его применение для защиты информации в современных информационных и телекоммуникационных системах в любых из существующих задачах применения.[14]
1. Код имеет режимы обнаружения и исправления ошибок с обеспечением в обоих режимах гарантированной (наперед заданной) вероятности декодирования с ошибкой в произвольном канале связи и надежным отказом от декодирования при невозможности исправления ошибки.
2. Код имеет такую исправляющую способность и позволяет выбрать такие параметры n и k, что использующий их алгоритм передачи информации характеризуется нехудшими вероятностно-временными характеристиками по сравнению с применением альтернативных кодов.
3. Код обеспечивает в режиме исправления ошибок выделение с заданной точностью части правильно принятых символов даже при кратности ошибки, превышающей исправляющую способность кода.
4. Код позволяет декодировать несколько копий (одинаковых по содержанию информации кодовых блоков) блока с эффективностью, превышающей эффективность декодирования исходного кода с обнаружением или исправлением ошибок. Это свойство может применяться для работы по параллельным каналам, при многократной передаче сообщения по одному каналу или в канале с обратной связью при обработке копий после приема повторенного блока.
5. Процедуры кодирования и декодирования кода содержат, в основном, операции по модулю 2.
6. Метод кодирования должен обладать свойствами случайности сигналов на выходе кодера, обеспечивающими совместное решение задач обеспечения помехоустойчивости и секретности в постановке К. Шеннона.
1.4.3 Код Шеннона
Оптимальным кодом можно определить тот, в котором каждый двоичный символ будет передавать максимальную информацию. В силу формул Хартли и Шеннона максимум энтропии достигается при равновероятных событиях, следовательно, двоичный код будет оптимальным, если в закодированном сообщении символы 0 и 1 будут встречаться одинаково часто.[8]
Рассмотрим в качестве примера оптимальное двоичное кодирование букв русского алфавита вместе с символом пробела «-». Полагаем, что известны вероятности появления в сообщении символов русского алфавита, например, приведенные в таблице 3.
Таблица 3.Частота букв русского языка (предположение)
Буква |
Частота |
Буква |
Частота |
Буква |
Частота |
Буква |
Частота |
«-» |
0,145 |
P |
0,041 |
Я |
0,019 |
X |
0,009 |
O |
0,095 |
B |
0,039 |
Ы |
0,016 |
Ж |
0,008 |
E |
0,074 |
Л |
0,036 |
З |
0,015 |
Ю |
0,007 |
A |
0,064 |
K |
0,029 |
Ъ, Ь |
0,015 |
Ш |
0,006 |
И |
0,064 |
M |
0,026 |
Б |
0,015 |
Ц |
0,004 |
T |
0,056 |
Д |
0,026 |
Г |
0,014 |
Щ |
0,003 |
H |
0,056 |
П |
0,024 |
Ч |
0,013 |
Э |
0,003 |
C |
0,047 |
У |
0,021 |
Й |
0,010 |
Ф |
0,002 |
К. Шеннон и Р. Фано независимо предложили в 1948-1949 гг. способ построения кода, основанный на выполнении условия равной вероятности символов 0 и 1 в закодированном сообщении. [10]
Все кодируемые символы (буквы) разделяются на две группы так, что сумма вероятностей символов в первой группе равна сумме вероятностей символов второй группы (то есть вероятность того, что в сообщении встретится символ из первой группы, равна вероятности того, что в сообщении встретится символ из второй группы).
Для символов первой группы значение первого разряда кода присваивается равным «0», для символов второй группы – равными «1».
Далее каждая группа разделяется на две подгруппы, так чтобы суммы вероятностей знаков в каждой подгруппе были равны. Для символов первой подгруппы каждой группы значение второго разряда кода присваивается равным «0», для символов второй подгруппы каждой группы – «1». Такой процесс разбиения символов на группы и кодирования продолжается до тех пор, пока в подгруппах не остается по одному символу.
Пример кодирования символов русского алфавита приведен в табл. 4
Таблица 4. Пример кодирования букв русского алфавита с помощью кода Шеннна-Фано.
Буквы |
Частоты |
Двоичные разряды |
||||||||
I |
II |
III |
IV |
V |
VI |
VII |
VIII |
IX |
||
«-» |
0,145 |
0 |
0 |
0 |
||||||
O |
0,095 |
0 |
0 |
1 |
||||||
E |
0,074 |
0 |
1 |
0 |
0 |
|||||
A |
0,064 |
0 |
1 |
0 |
1 |
|||||
И |
0,064 |
0 |
1 |
1 |
0 |
|||||
T |
0,056 |
0 |
1 |
1 |
1 |
|||||
H |
0,056 |
1 |
0 |
0 |
0 |
|||||
C |
0,047 |
1 |
0 |
0 |
1 |
|||||
P |
0,041 |
1 |
0 |
1 |
0 |
0 |
||||
B |
0,039 |
1 |
0 |
1 |
0 |
1 |
||||
Л |
0,036 |
1 |
0 |
1 |
1 |
0 |
||||
K |
0,029 |
1 |
0 |
1 |
1 |
1 |
||||
M |
0,026 |
1 |
1 |
0 |
0 |
0 |
||||
Д |
0,026 |
1 |
1 |
0 |
0 |
1 |
0 |
|||
П |
0,024 |
1 |
1 |
0 |
0 |
1 |
1 |
|||
У |
0,021 |
1 |
1 |
0 |
1 |
0 |
||||
Я |
0,019 |
1 |
1 |
0 |
1 |
1 |
0 |
|||
Ы |
0,016 |
1 |
1 |
0 |
1 |
1 |
1 |
|||
З |
0,015 |
1 |
1 |
1 |
0 |
0 |
0 |
|||
Ъ, Ь |
0,015 |
1 |
1 |
1 |
0 |
0 |
1 |
|||
Б |
0,015 |
1 |
1 |
1 |
1 |
1 |
0 |
|||
Г |
0,014 |
1 |
1 |
1 |
1 |
0 |
1 |
|||
Ч |
0,013 |
1 |
1 |
1 |
1 |
1 |
0 |
|||
Й |
0,01 |
1 |
1 |
1 |
1 |
0 |
1 |
|||
X |
0,009 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
||
Ж |
0,008 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
||
Ю |
0,007 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
||
Ш |
0,006 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
||
Ц |
0,004 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
|
Щ |
0,003 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
|
Э |
0,003 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
Ф |
0,002 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
Изучение данных в приведенной таблице кодов дает возможность сделать заключение, что наиболее часто встречающиеся буквы кодируются более краткими двоичными кодами, а редко встречающиеся - более длинными двоичными кодами. Соответственно, в среднем для кодирования послания определенной длины необходимо использовать меньшее количество двоичных знаков 0 и 1, чем при ином методе кодирования.
Кроме того, процесс реализации кода Шеннона-Фано полностью удовлетворяет критерию различимости Фано. Данный вид кода считается префиксным и в нем нет потребности в использовании какого-либо специального символа, который будет отделять символы между собой для полностью однозначного декодирования двоичного послания.
Следовательно, задача помехоустойчивого шифрования представляет из себя довольно-таки большую сферу для теоретических и практических исследований. Главными целями в этом процессе можно считать: поиск кодов, с высокой эффективностью находящих и исправляющих ошибки определенного типа; поиск методик кодирования и декодирования и рациональных способов их программной реализации.
Данные задачи хорошо проработаны в области систематических кодов. Эти типы кодов эффективно используются в цифровой технике, различных автоматизированных комплексах и системах передачи данных.
2.Практическая реализация задачи кодирования
2.1 Пример к первой теореме Шеннона
Задача эффективного кодирования описывается триадой:
X = {X 4i 0} - кодирующее устройство - В.
Здесь Х, В - соответственно входной и выходной алфавит. Под множеством х 4i 0 можно понимать любые знаки (буквы, слова, предложения). В - множество, число элементов которого в случае кодирования знаков числами определяется основанием системы счисления 2 (например 2, m = 2 2) . Кодирующее устройство сопоставляет каждому сообщению x 4i 0 из Х кодовую комбинацию, составленную из n 4i символов множества В. Ограничением данной задачи является отсутствие помех. Требуется оценить минимальную среднюю длину кодовой комбинации.
Для решения данной задачи должна быть известна вероятность P 4i появления сообщения x 4i 0, которому соответствует определенное количество символов n 4i алфавита B. Тогда математическое ожидание количества символов из B определится следующим образом: n 4ср = n 4i P 4i (средняя величина).
Этому среднему количеству символов алфавита В соответствует максимальная энтропия H 4max = n 4ср log m. Для обеспечения передачи информации, содержащейся в сообщениях Х кодовыми комбинациями из В, должно выполняться условие H 4max >= H(x) 4, или n 4ср log m >= - P 4i log P 4i . В этом случае закодированное сообщение имеет избыточность
n 4ср >= H(x)/log m, n 4min = H(x)/log 4 m.
Коэффициент избыточности
Ku = (H 4max - H(x))/H 4max = (n 4ср - n 4min )/n 4ср .
Составим соответствующую таблицу. Имеем:
n 4min = H(x)/log 2 = 2.85, Ku = (2.92 - 2.85)/2.92 = 0.024,
т.е. код практически избыточности не имеет. Видно, что среднее количество двоичных символов стремится к энтропии источника сообщений.
2.2 Пример построения кода Шеннона
В таблице 2.2 приведены промежуточные вычисления и результат построения кода Шеннона. Средняя длина кодовых слов l = 2,95. В данном случае избыточность кода Шеннона на 0,5 бита больше, чем избыточность кода Хаффмена. Из этого рисунка понятно, почему код неэффективен. Кодовые слова для букв b , d , e , f могут быть укорочены на 1 бит без потери свойства однозначной декодируемой.
Таблица 2.2 Построение кода Шеннона
Буква |
Вероятность p m |
Кумулятивная вероятность q m |
Длина кодо- вого слова l m |
Двоичная запись [ q]2 |
Кодовое слово c m |
a |
0,35 |
0,00 |
2 |
0,00… |
00 |
b |
0,20 |
0,35 |
3 |
0,0101… |
010 |
c |
0,15 |
0,55 |
3 |
0,10001… |
100 |
d |
0,10 |
0,70 |
4 |
0,10110… |
1011 |
e |
0,10 |
0,80 |
4 |
0,11001… |
1100 |
f |
0,10 |
0,90 |
4 |
0,11100… |
1110 |
Докажем однозначную декодируемость кода Шеннона. Для этого выберем сообщения с номерами i и j , i < j . Кодовое слово ci для i заведомо короче, чем слово cj для j , поэтому достаточно доказать, что эти слова отличаются в одном из первых li символов.
Рассмотрим разность qj − qi =Σ pk − Σ pk =Σ pk ≥ pi
Вспомним, что длина слова и его вероятность связаны соотношением
li = [− log pi ]≥ − log pi .
Поэтому pi ≥2-li .
С учетом этого неравенства
q j − q i ≥ 2-li
В двоичной записи числа в правой части мы имеем после запятой li −1 нулей и единицу в позиции с номером li. Это означает, что по меньшей мере в одном из li разрядов слова ci и cj отличаются и, следовательно, ci не является префиксом для cj. Поскольку это верно для любой пары слов, то код является префиксным.
Заметим, что длины кодовых слов в коде Шеннона точно такие же, какие были выбраны при доказательстве прямой теоремы кодирования. Повторяя выкладки, получим уже известную оценку для средней длины кодовых слов
l ≤ H +1.
Примечательно, что при построении кода Шеннона мы выбрали длины кодовых слов приблизительно равными (чуть большими) собственной информации соответствующих сообщений. В результате средняя длина кодовых слов оказалось приблизительно равной (чуть большей) энтропии ансамбля.
2.3 Пример Кода Шеннона
Допустим, нужно закодировать некоторое сообщение: AABCDAABC
Имеем :
A - 5 5/10 = 0.5
B - 2 2/10 = 0.2
C - 2 2/10 = 0.2
D - 1 1/10 = 0.1
Длина всего сообщения 10 (Вычисляется вероятность встречаемости каждого символа и располагаем их в столбик в порядке убывания вероятностей)
После этого строим кодовые комбинации простым методом. Делим столбик с вероятностями таким образом, чтобы сумма вероятностей верхней части равнялась приблизительно сумме вероятностей нижней части
0.5 - первая часть = 0.5
-----
0.2 \
0.2 | - вторая часть = 0.5
0.1 /
Напротив вероятностей верхней части проставляем нули, напротив нижней - единицы. В нашем примере получим.
0.5 0
0.2 1
0.2 1
0.1 1
Проделываем потом то же с разделёнными частями. В конце концов придём к тому, что делить больше нечего.
А 0.5 0
B 0.2 10
C 0.2 110
D 0.1 111
Итого - AABCDAABC = 0 0 10 110 111 0 0 10 110
Причём закодированное сообщение (это видно) не может быть раскодировано несколькими способами, хотя длина кодов символов отличается. Чтобы прочитать закодированное сообщение стpоится бинаpное деpево. В нашем слyчае оно бyдет такое.
()
/ \
0(A) 1
/ \
0(B) 1
/ \
0(C) 1(D)
Вот еще пример составления кодовых комбинаций по вероятностям:
0.3 00
0.25 01
--------------- (первое деление)
0.1 100
0.1 101
------------- (второе деление)
0.1 1100
0.05 1101
----------- (третье деление)
0.05 1110
0.05 1111
2.4 Пример кодирования и декодирования методом Шеннона-Фано
С помощью табл. 4 можно закодировать и декодировать любое сообщение. В виде примера запишем двоичным кодом фразу: "Теория информаций"
0 111 010000 11 01 000 11 011 11 0000
01101000111111 111 00110 100