Автор работы: Пользователь скрыл имя, 15 Декабря 2010 в 13:39, курсовая работа
Цель исследования: на основе теоретического анализа изучить механизм действия помехоустойчивого кодирования.
Объект исследования: код Шеннона – Фано.
В соответствии с целью работы были определены следующие задачи исследования:
1. Изучить основные типы кодов помехоустойчивого кодирования;
2. Исследовать один из выбранных кодов (код Шеннона - Фано)
3. Реализовать код Шеннона – Фано на языке программирования Pascal.
Введение……………………………………………………………………………3
Глава 1.
1.1 Основные принципы. Типы кодов …………………………………………...5
1.2 Линейные блочные коды………………………………………………..7
1.2.1 Код с проверкой на четность……………………………………….9
1.2.2 Порождающая матрица линейного блочного кода …………………12
1.2.3 Синдром и обнаружение ошибок ……………………………………16
1.2.4 Синдромное декодирование линейных блочных кодов …………18
1.2.5 Вес и расстояние Хемминга. Способность кодов обнаруживать и исправлять ошибки ………………………………………………………………21
1.3 Циклические коды……………………………………………………..26
1.3.1 Кодирование с использованием циклических кодов……………..27
1.3.2 Вычисление синдрома и исправление ошибок в циклических кодах………………………………………………………………………………32
1.3.3 Неалгебраические методы декодирования циклических кодов …..34
1.4 Сверточные коды……………………………………………………..38
1.4.1 Кодирование с использованием сверточных кодов ………………..39
1.4.2 Синдромное декодирование сверточных кодов………………….43
1.4.3 Декодирование сверточных кодов. Алгоритм Витерби …………46
Глава 2
2.1 Коды Шеннона – Фано (Теоритическая часть)……………………..50
2.2 Описание Кода Шеннона – Фано……………………………………55
Заключение ……………………………………………………………………….56
Литература………………………………………………………………………..57
Приложение1……………………………………………………………………..58
Если же вероятность ошибки в канале будет в сто раз меньше Рош = 10 -5, то вероятность ее неисправления составит уже Р(N) » 2×10 -9, или в 5000 раз меньше!
Таким образом, выигрыш от помехоустойчивого кодирования (который можно определить как отношение числа ошибок в канале к числу оставшихся неисправленными ошибок) существенно зависит от свойств канала связи.
Если вероятность ошибок в канале велика, то есть канал не очень хороший, ожидать большого эффекта от кодирования не приходится, если же вероятность ошибок в канале мала, то корректирующее кодирование уменьшает ее в значительно большей степени.
Другими
словами, помехоустойчивое
кодирование существенно
улучшает свойства хороших
каналов, в плохих же
каналах оно большого
эффекта не дает. [17]
1.3 Циклические коды
Линейный (n,k)-код называется циклическим, если в результате циклического сдвига кодового слова получается другое кодовое слово данного кода. Другими словами, если U = ( U0, U1, ...Un- 1 ) является кодовым словом, то и V = ( Un- 1, U0, U1, ...Un- 2 ), полученное циклическим сдвигом U, является кодовым словом данного кода.[4]
Циклические коды привлекательны по двум причинам.
Во-первых, операции кодирования и вычисления синдрома для них выполняются очень просто с использованием сдвиговых регистров.
Во-вторых, этим кодам присуща алгебраическая структура, и можно найти более простые и эффективные способы их декодирования.
Основные свойства циклических кодов:
g(x)=1
+ g1 × x + g2 ×
x2 +...+ gn-k-1 ×
xn-k-1 + xn-k,
Существует только один кодовый полином g(x) степени (n-k)
вида
называемый порождающим
полиномом кода.
U(x)= m(x) ×
g(x).
1.3.1
Кодирование с использованием
циклических кодов
Предположим, надо закодировать некоторую информационную последовательность
Соответствующий ей полином выглядит следующим образом:
m(x)= m0 + m1 ×
x + m2 × x2
+...+mk- 1 × xk-1.
Умножив m(x) на xn-k:
xn-k × m(x)= m0 ×
xn-k + m1 ×
xn-k+1 +...+mk-
1 × xn-1
,
получим полином степени n-1 или меньшей.
Воспользовавшись теоремой о делении полиномов, можно записать
xn-k × m(x) = q(x) ×
g(x) + r(x) ,
где q(x) и r(x) — частное и остаток от деления полинома xn-k × m(x) на порождающий полином g(x).
Поскольку степень g(x) равна (n-k), то степень r(x) должна быть (n-k-1) или меньше, а сам полином r(x) будет иметь вид
r(x)= r0 + r1 × x + r2 × x2 +...+ rn- k- 1 × xn-k-1 . (1.66)
С учетом правил арифметики в GF(2) данное выражение можно переписать следующим образом:
r(x) + xn-k × m(x) = q(x)× g(x) , (1.67)
откуда видно, что полином r(x)+xn-k × m(x) является кратным g(x) и имеет степень n-1 или меньшую. Следовательно, полином r(x)+xn-k × m(x) - это кодовый полином, соответствующий кодируемой информационной последовательности m(x).
Раскрыв последнее выражение, получим
r(x)+m(x)× xn-k =r0 +r1 x +r2 x2 ..+rn- k-1 xn-k-1 + m0 xn-k + m1 × xn-k+1 + ..+ mk-1 xn-1,
что соответствует кодовому слову
U = | ( r0, r1 ... rn- k-1 , | m0, m1 ... mk-1), |
проверочные символы | информационные символы |
Таким образом, кодовое слово состоит из неизменной информационной части m, перед которой расположено (n-k) проверочных символов. Проверочные символы являются коэффициентами полинома r(x), то есть остатка от деления m(x) × xn-k на порождающий полином g(x).
Чтобы полученный результат был понятнее, напомним, что умножению некоторого двоичного полинома на xn-k соответствует сдвиг двоичной последовательности m = (m0, m1 ... mk-1) на n-k разрядов вправо.
Рассмотрим пример. С использованием кода, задаваемого порождающим полиномом g(x) = 1 + x + x3, закодируем произвольную последовательность, например m = (0111).
Последовательности m =(0111) соответствует полином m (x)=x+ x2 + x3.
Умножим m(x) на xn-k :
m(x) × xn-k =m(x) × x3 =(x + x2 + x3) × x3 = x4 + x5 + x6 . (1.68)
Разделим m(x) × xn-k на порождающий полином g(x) :
X5
+ 0 + X3
X5
+ 0 + X3 +X2
X2=r(x).
Таким образом, кодовый полином, соответствующий информационной последовательности m = (0111), будет иметь следующий вид:
U(x) = 0*X0 + 0*X1 + 1*X2 + 0*X3 + 1*X4 + 1*X5 + 1*X6, (1.70)
а соответствующее кодовое слово U = (0010111).
Итак, циклический (n,k)-код k-разрядной информационной последовательности m = (m0, m1 ... mk-1) получают следующим образом:
-
информационную
- полином полученной последовательности делят на порождающий полином кода g(x);
Информация о работе Программная модель помехоустойчивого кодирования