Файл: 1. Функциональная схема системы передачи информации, назначение ее составляющих.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 29.04.2024

Просмотров: 16

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

15
В блочных кодах кодирование (формирование проверочных символов) и декодирование (обнаружение и исправление ошибок) выполняются в пределах каждой кодовой комбинации (блока) в отдельности по соответствующим алгоритмам.
Непрерывные или рекуррентные коды образуют последовательность символов, не разделяемую на отдельные кодовые комбинации.
Кодирование и декодирование непрерывно совершаются над последовательностью символов без деления их на блоки.
Формирование проверочных символов ведётся по рекуррентным
(возвратным) правилам, поэтому непрерывные коды часто называют рекуррентными или цепными.
18. Структура и матричное описание блоковых кодов *
https://studfile.net/preview/1757715/page:3/
https://studme.org/109992/informatika/porozhdayuschie_matritsy_blochnyh
_kodov
19. Связь корректирующей способности с кодовым расстоянием
Степень отличия любых двух кодовых комбинаций характеризуется расстоянием между ними в смысле Хэмминга или просто кодовым расстоянием. Оно выражается числом символов, в которых комбинации отличаются одна от другой.
Чтобы получить кодовое расстояние между двумя комбинациями двоичного кода, достаточно подсчитать число единиц в сумме этих комбинаций по модулю 2. Например:
Рисунок 19.1 – пример получения кодового расстояния

16
Минимальное расстояние, взятое по всем парам разрешенных комбинаций кода, называют минимальным кодовым расстоянием.
Код обнаруживает одиночные ошибки, а также другие ошибки нечетной кратности.
20. Кодирование Хэмминга
Код Хэмминга — самоконтролирующийся и самокорректирующийся код. Построен применительно к двоичной системе счисления.
Позволяет исправлять одиночную ошибку (ошибка в одном бите слова) и находить двойную.
Назван в честь американского математика Ричарда Хэмминга, предложившего код.
Систематические коды образуют большую группу из блочных, разделимых кодов (в которых все символы слова можно разделить на проверочные и информационные). Особенностью систематических кодов является то, что проверочные символы образуются в результате линейных логических операций над информационными символами. Кроме того, любая разрешенная кодовая комбинация может быть получена в результате линейных операций над набором линейно независимых кодовых комбинаций.
Коды, в которых возможно автоматическое исправление ошибок, называются самокорректирующимися.
21. Общие принципы построения циклических кодов *
Построение циклического кода производится, исходя из разрядности m исходного кода и требуемой от циклического кода корректирующей способности, задаваемой в виде числа обнаруживаемых r и числа исправляемых s ошибок. По сути дела, построение кода сводится к выбору образующего полинома P(x) и составлению образующей матрицы.
Корректирующая способность зависит от кодового расстояния d. Под кодовым расстоянием между двумя комбинациями F1 и F2 понимают число разрядов, в которых эти комбинации отличаются друг от друга. Кодовое расстояние равно


17 числу единиц (весу) W в сумме двух комбинаций по модулю 2, т.е. d WF F =
⊕ ( ) 1 2 .
Рисунок 21.1 – слайд с информацией о циклических кодах
22. Алгоритмы декодирования циклических кодов *
Процедура декодирования циклического кода с обнаружением ошибок, по аналогии с процессом кодирования, использует два способа:
- при кодировании "классическим" способом декодирование основано на использовании свойства делимости без остатка кодового многочлена u(x) циклического (n,k)-кода на порождающий многочлен g(x). Поэтому алгоритм декодирования включает в себя деление принятого кодового слова, описываемого многочленом на g(x), вычисление и анализ остатка r(x).
Если r(x)=0, то принятое кодовое слово считается неискаженным. Если r(x)№0, то принятое кодовое слово стирается и формируется сигнал "ошибка".
- при кодировании способом МККТТ декодирование основано на свойстве получения определенного контрольного остатка R
0
(x) при делении принятого кодового многочлена u(x) на порождающий многочлен. Поэтому, если полученный при делении остаток
, то принятое кодовое слово

18 считается неискаженным. Если остаток
, то принятое кодовое слово стирается и формируется сигнал "ошибка".
Рисунок 22.1 – слайд с информацией о циклических кодах
23. Принципы построения кодов БЧХ
Теоретически коды БЧХ могут исправлять произвольное количество ошибок, но при этом существенно увеличивается длительность кодовой комбинации, что приводит к уменьшению скорости передачи данных и усложнению приемо-передающей аппаратуры (схем кодеров и декодеров).
Методика построения кодов БЧХ отличается от обычных циклических, в основном, выбором определяющего полинома P(х). Коды БЧХ строятся по заданной длине кодового слова n и числа исправляемых ошибок S , при этом количество информационных разрядов k не известно пока не выбран определяющий полином.
24. Алгоритмы декодирования кодов БЧХ
Основным алгоритмом декодирования кодов БЧХ является так называемый алгебраический или синдромный метод декодирования.
Принципом, лежащим в основе этого метода, является использование

19 элементов поля Галуа для нумерации позиций элементов принятого кодового слова r(x)
25. Способы задания и характеристики сверточных кодов *
Сверточные коды широко применяются в самых различных областях техники передачи и хранения информации. Наиболее наглядными примерами их эффективного применения являются системы связи, системы мобильной связи, модемы для телефонных каналов.
Формально сверточный код — это корректирующий ошибки код, в котором:
1. на каждом такте работы кодера k символов входной полубесконечной последовательности преобразуются в n > k символов выходной последовательности
2. в преобразовании также участвуют m предыдущих символов
3. выполняется свойство линейности (если двум кодируемым последовательностям x и y соответствуют кодовые последовательности X и Y, то кодируемой последовательности ax + by соответствует aX + bY.
Свёрточный код является частным случаем древовидных и решетчатых кодов.
Рисунок 25.1 – решение задачи по сверочным кодом с помощью схемы


20
26. Декодирование сверточных кодов по алгоритму Витерби *
Декодер Витерби реализует метод максимального правдоподобия в несколько ином смысле, но очень близком к классическому. В наиболее распространенном варианте применения
ВД находит кодовую последовательность, ближайшую к принятой, обрабатывая ее бит за битом
Вместо подсчета веса каждой из возможных кодовых последовательностей декодер Витерби прослеживает состояния решетки и проходящие через них пути.

21
ПРИЛОЖЕНИЕ А
def GammaEnc(n): answer = [] k = str(DTB(n)) l = len(str(k)) - 1 res = "" for i in range(0, l, 1): res += "0" res += k answer.append("Кодирование с помощью гамма-кода") answer.append(f"1. Записать число в двоичном представлении: {k}") answer.append( f"2. Перед двоичным представлением дописать нули, количество нулей на единицу меньше количества битов двоичного представления числа: {res}") answer.append(f"{res}") return answer def GammaDec(n): answer = [] s = 0 for i in range(0, len(n), 1): if str(n)[i] == "0": s += 1 else: break res = BTD(str(n)[s:len(n)]) answer.append("Декодирование с помощью гамма-кода") answer.append(f"1. Считать все нули, встречающиеся до первой 1, всего их:
{s}") answer.append( f"2. Принимая во внимание единицу, которая станет первым битом целого числа, со значением 2^N, считать оставшиеся N цифр целого числа и перевести в десятичное представление: {res}") answer.append(f"{res}") return answer def DeltaEnc(n): answer = []

22
L = len(str(DTB(n)))
M = len(str(DTB(L)))
S1 = "" for i in range(0, M - 1, 1):
S1 += "0"
S1 += "1"
L2 = str(DTB(L))
Ll = 0 for i in range(0, len(L2), 1): if str(L2)[i] == "1":
Ll += 1 break else: break
L2 = str(L2)[Ll:len(L2)]
M2 = str(DTB(n))
Ml = 0 for i in range(0, len(M2), 1): if str(M2)[i] == "1":
Ml += 1 break else: break
M2 = str(M2)[Ml:len(M2)]
S2 = S1 + str(L2)
S3 = S2 + str(M2) answer.append("Кодирование с помощью дельта-кода") answer.append(f"1. Сосчитать L — количество значащих битов в двоичном представлении числа N: L = {L}") answer.append(f"2. Сосчитать M — количество значащих битов в двоичном представлении числа L: M = {M}") answer.append(f"3. Записать M — 1 нулей и одну единицу: {S1}") answer.append(f"4. С правой стороны дописать биты числа L без старшей единицы: {S2}") answer.append(f"5. С правой стороны дописать биты числа N без старшей единицы
(N2): {S3}") answer.append(f"{S3}") return answer def DeltaDec(n):

23 answer = []
M = 0 for i in range(0, len(n), 1): if str(n)[i] == "0":
M += 1 else: break n = str(n)[M + 1:len(n)] r = pow(2, M) + BTD(n[0:2]) nn = str(n)[M:len(n)] rr = pow(2, r - 1) + BTD(nn) answer.append("Декодирование с помощью дельта-кода") answer.append(f"1. Считаем количество нулей до первой единицы во входном потоке: M = {M}") answer.append(f"2. Читаем из потока следующие M бит ({n[0:2]}). Это дает нам
L=2^M + {n[0:2]} = {r}") answer.append(f"3. Прочитать из потока следующие L-1 = {r - 1} бита ({nn}), это даёт N=2^(L-1) + {nn} = {rr}") answer.append(f"{rr}") return answer def OmegaEnc(n): answer = [] k = "0" answer.append("Кодирование с помощью омега-кода") answer.append(f"1. Записываем 0: {k}")
N = n answer.append(f"2. N = {N}") while int(N) > 1: k = str(DTB(N)) + k answer.append(f"3. Добавляем справа от нуля двоичное представление N:
{k}")
N = len(str(DTB(N))) - 1 answer.append(f"2. N = {N}") answer.append(k) return answer def OmegaDec(n):


24 answer = [] k = "1" answer.append("Декодирование с помощью омега-кода") answer.append(f"1. Записываем 1: {k}")
N = 1 while n[0] == "1":
N = N + 1 k = n[0:N] n = n[N:len(n)] answer.append(f"2. Считываем группу {k}, N = {BTD(k)}")
N = BTD(k) answer.append(N) return answer