РГРТУ / Цифровая связь |
Лабораторная работа №1 по курсу «Цифровая связь».
В процессе передачи информации через канал связи возможно возникновение ошибок передачи. Одним из методов обнаружения ошибок является внесение избыточности в передаваемое сообщение. При его использовании приемник способен определить наличие ошибки в принятом сообщении. В этом случае приемник не предпринимает попыток исправить ошибку, а посылает передатчику запрос на повторную передачу, что в свою очередь требует наличия двусторонней связи.
Если защита от ошибок заключается только в их обнаружении, система связи должна обеспечить передатчик информацией о возникшей недостоверности данных на приемной стороне. Подобные процедуры защиты от ошибок известны как методы автоматического запроса повторной передачи (Automatic Repeat Request – ARQ).
Рисунок 1. Автоматический запрос повторной передачи (ARQ): а) запрос ARQ с остановками (полудуплексная связь), б) непрерывный запрос ARQ с возвратом (полнодуплексная связь), в) непрерывный запрос ARQ с выборочным повторением (полнодуплексная связь).
Главное преимущество схем ARQ перед схемами прямого исправления ошибок (forward error correction) заключается в том, что обнаружение ошибок требует гораздо более простого декодера и меньшей избыточности. Кроме того, она более гибкая: информация передается только при обнаружении ошибки. Ключевым элементом процедуры ARQ является механизм детектирования ошибок, который требует использования циклических блочных кодов.
При использовании блочных кодов передаваемые данные делятся на блоки из k бит, каждый из блоков называют сообщением. В процессе кодирования каждый k-битовый блок данных преобразуется в больший блок из n бит, который называется кодовым битом или канальным символом. К каждому блоку данных кодирующее устройство прибавляет (n – k) бит, которые называются избыточными битами (redundant bits), битами четности (parity bits) или контрольными битами (check bits), которые не несут новой информации. Для обозначения описанного кода используется запись (n, k). Отношение числа избыточных бит к числу информационных бит, (n – k)/k, называется избыточностью (redundancy) кода, отношение числа бит данных к общему числу бит, k/n, именуется кодовой скоростью или степенью кодирования (coding rate).
Важным подклассом линейных блочных кодов являются двоичные циклические коды (cyclic codes). Код легко реализуется на регистре сдвига с обратной связью. Линейный (n, k)-код называется циклическим, если в результате циклического сдвига кодового слова U = (u0, u1, …, un–1) получается другое кодовое слово данного кода U1 = (un–1, u0, u1, …, un–2). Компоненты кодового слова возможно рассматривать как коэффициенты полинома:
Информационное сообщение:
Полиномиальный генератор:
В кодовых словах, выраженных в полиномиальной форме, циклическая природа кода проявляется следующим образом: если U(X) является кодовым словом, представленным полиномом порядка (n – 1), то Ui(X) – остаток от деления XiU(X) на Xn + 1 – также является кодовым словом. То есть:
или, умножая обе части уравнения на Xn + 1:
что в модульной арифметике возможно записать следующим образом:
где x mod y означает остаток от деления x на y.
Процедура кодирования в несистематической форме описывается выражением:
таким образом k = n – p. Тогда:
Полиномиальный генератор g(X) циклического кода (n, k) является множителем Xn + 1, т.е. (Xn + 1)h(X) = g(X).
Обычно элементы кодового слова разделяют на информационные и проверочные биты. В этом случае рассматриваемый код является систематическим.
Для формирования кодового слова U(X) необходимо сдвинуть информационные биты m(X) на (n – k) бит вправо:
и добавить в левые разряды биты четности p(X). Кодовое слово:Здесь p(X) возможно записать как:
Передаваемое кодовое слово искажается помехами. Допустим, что передается кодовое слово U(X), а принимается Z(X) = U(X) + e(X), где e(X) – модель полинома ошибки. Декодер проверяет, является ли Z(X) полиномом кодового слова, т.е. делится ли он на g(X) без остатка. Это осуществляется путем вычисления синдрома принятого полинома. Синдром S(X) равен остатку от деления Z(X) на g(X):
Синдром кодового слова равен синдрому ошибки:
Рисунок 2. Систематический кодер линейного блочного циклического кода.
Рисунок 3. Схема вычисления синдрома.
Передаваемое кодовое слово искажается помехами. Допустим, что передается кодовое слово U(X), а принимается Z(X) = U(X) + e(X), где e(X) – модель полинома ошибки. Декодер проверяет, является ли Z(X) полиномом кодового слова, т.е. делится ли он на g(X) без остатка. Это осуществляется путем вычисления синдрома принятого полинома. Синдром S(X) равен остатку от деления Z(X) на g(X):
Синдром кодового слова равен синдрому ошибки:
Примером использования циклических кодов является контроль ошибок с помощью циклического избыточного CRC кода (Cyclic Redundancy Check), называемого также кодом Абрамсона. При передаче данных в пакетных режимах, эти коды используются для определения целостности блоков данных (FCS – Frame Checking Sequence). CRC коды часто представляют собой расширения циклических кодов Хэмминга. Выбор полинома g(X) зависит от допустимой вероятности необнаруженной ошибки, которая определяется распределением (спектром) весов кода.
Для получения полиномиальной формы записи g(X) необходимо преобразовать число 0x2F к двоичному вектору 1011112, что соответствует полиному:
причем значение старшего бита не учитывается в шестнадцатеричном представлении полинома, т.к. оно всегда будет равно единице.Следует преобразовать необходимые для создания модели параметры в двоичную форму: XorOut = 1111112; Check = 0100112.
Рисунок 4. Кодер систематического двоичного CRC кода
Полиномиальный генератор имеет вид g(X) = 1 + X + X2 + X3 + X5 + X6, что соответствует расположению операций сложения по модулю 2 в цепи обратной связи (отсутствует связь, соответствующая X4).
На выходе регистра производится сложение по модулю 2 проверочных битов с единицей, поскольку XorOut = 1111112 (необходимо сложить с 1 каждый проверочный бит).
Рисунок 5. Схема расчета синдрома систематического двоичного CRC кода
В том случае, если параметры RefIn и/или RefOut принимают значение «true» схема кодирования и вычисления синдрома усложнятся: необходимо добавить регистры LIFO на входах и выходах схем. Операция обращения предполагает изменение порядка следования информационных бит с прямого на обратный (RefIn) или проверочных бит (RefOut) аналогичным образом.
Приобрести первичные навыки для моделирования помехозащищенной передачи данных через канал связи с использованием модуляции и кодирования в SimInTech.
Разработать модель передачи данных через канал связи с помехами.
Изучить зависимость способности декодера к обнаружению ошибок от длины кодового слова, вероятности возникновения ошибок и их количества.
Рисунок 6. Главное окно SimInTech c выделенным меню создания нового проекта
Рисунок 7. Окно проекта «Схема модели общего вида»
Для того, чтобы модель позволяла гибко изменять параметры передачи, такие как длина сообщения, количество проверочных бит и так далее, следует задать значения параметров кодирования и передачи в виде глобальных переменных, которые затем будут использоваться при задании свойств блоков в пределах всего проекта.
Рисунок 8. Окно проекта с выделенной кнопкой «Скрипт».
Рисунок 9. Окно «Скрипт страницы».
Рисунок 10. Окно «Скрипт страницы» с добавленным кодом и выделенной кнопкой «Закрыть и применить».
Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.
Необходимо разработать модель CRC-кодера с полиномиальным генератором кода:
Инвертирование порядка битов на входе и выходе кодера не производится. Проверочные биты должны складываться с логической 1 на выходе кодера.
Рисунок 11. Главное окно SimInTech с выбранной вкладкой «Субструктуры» в палитре блоков.
Рисунок 12. Окно проекта с добавленным блоком «Субмодель».
После установки блока его можно переместить. Для перемещения блока внутри рабочей области окна проекта необходимо нажать на блок левой кнопкой мыши и, удерживая, переместить.
Рисунок 13. Окно проекта с выделенным блоком «Субмодель».
Рисунок 14. Рабочая область блока «Субмодель».
Рисунок 15. Окно проекта с добавленными блоками.
Рисунок 16. Окно проекта с пунктом «Свойства объекта», выбранным в контекстном меню блока.
Рисунок 17. Окно «Свойства» блока «Меандр» со свойствами по умолчанию.
Рисунок 18. Окно «Свойства» блока «Меандр» с заданными для свойств формулами.
Блоки «Запаздывание на период квантования» будут моделировать сдвиговые регистры кодера. Информационный бит должен задерживаться в регистре на 1 период передачи. Также, после завершения кодирования следует сбросить значения, содержащиеся в регистрах, чтобы они не повлияли на кодирование следующего информационного сообщения. Для всех блоков «Запаздывание на период квантования» для свойства «Период квантования» необходимо задать формулу «T» и активировать пункт «Добавить порт сброса».
Следует сформировать сигнал сброса, который будет равен «1» в момент времени перед началом кодирования нового информационного сообщения. Для блока «Генератор единичных импульсов» для свойства «Период, с» требуется задать формулу «N * T».
В алгоритме кодирования используются операции «XOR», поэтому для каждого блока «Логические операции» требуется открыть окно свойств, в поле «Значение» свойства «Тип операнда» открыть список доступных операций и выбрать «(ИСКЛЮЧАЮЩЕЕ ИЛИ, XOR)».
Для корректной работы кодера после передачи информационных бит в цепь обратной связи регистров следует подавать «0». Для блока «Константа», расположенного на схеме выше, требуется задать значение свойства «Значение» равным «0».
Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.
Рисунок 19. Окно проекта с соединенными блоками.
Рисунок 20. Окно проекта с выделенной кнопкой «Возврат из субмодели».
Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.
Следует проверить корректность работы кодера. Для этого необходимо подать на него информационное сообщение, для которого заранее известна последовательность проверочных бит, например, текстовое сообщение ASCII «123456789», которому соответствует последовательность проверочных бит «010011». В двоичном представлении сообщение содержит 72 информационных бита (по 8 бит на каждый символ ASCII).
Рисунок 21. Окно проекта с соединенными блоками.
Блок «Кусочно постоянная» должен формировать информационные биты сообщения на каждом шаге моделирования. Для данного блока необходимо:
Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.
Рисунок 22. Окно проекта с выделенной кнопкой «Параметры расчета».
Рисунок 23. Вкладка «Параметры расчета» окна «Параметры проекта».
Закрыть окно «Параметры расчета», при этом внесенные изменения будут сохранены автоматически.
Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.
Рисунок 24. Окно проекта с выделенной кнопкой «Пуск».
Рисунок 25. Контекстное меню окна «График».
Рисунок 26. Окно «Свойства графика» с измененными значениями свойств.
Рисунок 27. Окно графика с измененными параметрами отображения.
На графике отображается последовательность бит закодированного сообщения. До момента времени 7.2 секунды передаются информационные биты, после – проверочные биты. В результате моделирования получена последовательность проверочных бит «010011», что соответствует ожидаемому результату. Модель CRC-кодера работает корректно.
Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.
Необходимо разработать модель источника передаваемых данных, который будет формировать случайное информационное сообщение заданной длины, а затем формировать 0 на выходе в течение времени формирования заданного числа проверочных бит.
Рисунок 28. Окно проекта с пунктом «Удалить», выбранным в контекстном меню блока.
Рисунок 29. Окно проекта с добавленным блоком «Субмодель».
Рисунок 30. Окно проекта с добавленными и соединенными блоками.
Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо выйти из рабочей области субмодели и сохранить проект.
Для проверки корректности работы декодера необходимо разработать модель канала связи, которая будет случайным образом вносить ошибки в передаваемое сообщение.
Рисунок 31. Окно проекта с добавленным блоком «Субмодель»
Рисунок 32. Окно проекта с добавленными и соединенными блоками.
Для реализации описанной выше логики работы для блока «Равномерный шум» необходимо задать значение свойства «Минимальное значение» равным «0», а для блока «Константа» для свойства «Значение» необходимо задать формулу «E_p».
Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо выйти из рабочей области субмодели и сохранить проект.
Для проверки корректности работы декодера необходимо разработать модель канала связи, которая будет случайным образом вносить заданное количество ошибок в передаваемое сообщение.
Рисунок 33. Окно проекта с добавленным блоком «Субмодель».
Рисунок 34. Окно проекта с добавленными блоками.
Рисунок 35. Окно редактора скрипта блока «Язык программирования».
Рисунок 36. Окно проекта с соединенными блоками.
Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо выйти из рабочей области субмодели и сохранить проект.
Необходимо разработать модель декодера, который должен определять целостность данных в принятом сообщении и, в случае наличия ошибки, формировать единичный сигнал на выходе.
Рисунок 37. Окно проекта с добавленным блоком «Субмодель».
Рисунок 38. Окно проекта с добавленными блоками.
Алгоритм декодирования аналогичен алгоритму кодирования, описанному в одном из предыдущих пунктов данной лабораторной работы.
Для всех блоков «Запаздывание на период квантования» для свойства «Период квантования» необходимо задать формулу «T» и активировать пункт «Добавить порт сброса».
Следует сформировать сигнал сброса, который будет равен «1» в момент времени перед началом декодирования нового информационного сообщения. Для блока «Генератор единичных импульсов» с подписью «Управление сбросом» для свойства «Период, с» требуется задать формулу «N * T».
В алгоритме декодирования используются операции «XOR», поэтому для каждого блока «Логические операции» требуется открыть окно свойств, в поле «Значение» свойства «Тип операнда» открыть список доступных операций и выбрать «(ИСКЛЮЧАЮЩЕЕ ИЛИ, XOR)».
Для определения наличия ошибки в полученном сообщении следует просуммировать значения, оставшиеся в сдвиговых регистрах после завершения декодирования, при помощи блока «Суммирование элементов вектора». Необходимо объединить 6 сигналов с каждого регистра в один вектор, поэтому для блока «Мультиплексор» требуется задать значение свойства «Количество портов» равным «6».
Сигнал о наличии ошибки будет сформирован в момент окончания декодирования, во время декодирования необходимо формировать на выходе декодера нулевой сигнал. Для блока «Константа» требуется задать значение свойства «Значение» равным «0».
Рисунок 39. Окно проекта с соединенными блоками.
Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо выйти из рабочей области субмодели и сохранить проект.
Рисунок 40. Окно проекта с добавленными блоками.
Рисунок 41. Окно проекта с добавленными и соединенными блоками.
Рисунок 42. Окно проекта с заданными подписями блоков.
Рисунок 43. Окно проекта с заданными именами портов субмодели.
Блоки «Буфер последовательного ввода данных» должны объединять принятые биты в вектор сообщения заданной длины. Для этого для каждого блока «Буфер последовательного ввода данных» для свойства «Размер серии» необходимо задать формулу «N».
После окончания принятия сообщения следует очистить буферы и вывести количество отличающихся бит на выходной порт субмодели. Для блока «Генератор единичных импульсов» с подписью «Управление сбросом» для свойства «Период, с» требуется задать формулу «N * T».
Для блока «Генератор единичных импульсов» с подписью «Управление выходом» для свойства «Период, с» требуется задать формулу «N * T» и для свойства «Фаза (опережение), с» задать формулу «T».
Блок «Операция НЕ РАВНО» должен сравнивать между собой элементы двух векторов. Для блока «Операция НЕ РАВНО» для свойства «Тип второго операнда» следует задать значение «Вектор».
Необходимо выйти из рабочей области субмодели и для блока «Сумматор» задать значение свойства «Весовые множители для каждого из входов» равным «[-1, 1]».
Рисунок 44. Окно проекта с соединенными блоками.
Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.
Для получения более корректных результатов моделирования следует увеличить количество передаваемых кодовых слов. Требуется открыть скрипт проекта и задать значение глобальной константы «W» равным «10000».
Необходимо провести моделирование передачи данных и изучить зависимость способности CRC-декодера к обнаружению ошибок от вероятности возникновения ошибки. Вероятность ошибки задается в глобальной константе «E_p» в скрипте проекта. Требуется задать вероятность ошибки равной «0.05» и провести моделирование.
Рисунок 45. Окно проекта с выделенной кнопкой «Показать значения на линиях связи».
Рисунок 46. Окно проекта с активированным режимом «Показать значения на линиях связи».
Вероятность необнаруженной ошибки определяется как отношение количества необнаруженной ошибки к общему количеству ошибок. При значении вероятности битовой ошибки равной «0.05» вероятность необнаруженной ошибки составляет примерно (для данных с рисунка 46):
Требуется задать вероятность ошибки равной «0.15» и провести моделирование. При данном значении вероятности битовой ошибки вероятность необнаруженной ошибки составляет примерно 0.015.
Требуется задать вероятность ошибки равной «0.8» и провести моделирование. При данном значении вероятности битовой ошибки вероятность необнаруженной ошибки составляет примерно 0.016.
В результате увеличения вероятности возникновения ошибки вероятность необнаруженной ошибки увеличивается нелинейно.
Рисунок 47. Окно проекта с измененной моделью.
Длина информационной части передаваемого сообщения задается в глобальной константе «K» в скрипте проекта. Требуется задать длину информационной части равной «10», таким образом длина сообщения составит «16» бит. Количество ошибок задается в глобальной переменной «E_n» в скрипте проекта. Требуется задать количество ошибок равным «1» и провести моделирование. При данном сочетании значений параметров количество необнаруженных ошибок равно «0».
Количество необнаруженных оишбок | Длина сообщения, бит | |||
16 | 32 | 64 | ||
Количество ошибок, бит | 1 | |||
2 | ||||
3 |
В результате моделирования необнаруженные ошибки должны быть зафиксированы только при количестве ошибок равном «2» и длине сообщения равной «32» и «64». Это связано с тем, что CRC-код позволяет обнаружить любое нечетное количество ошибок в сообщении. Данный результат подтверждает, что способность CRC-декодера к обнаружению ошибок зависит от количества ошибок в сообщении.
Отсутствие необнаруженных ошибок при количестве ошибок равном «2» и длине сообщения равной «16» подтверждает, что способность CRC-декодера к обнаружению ошибок зависит от длины передаваемого сообщения.
Перед завершением выполнения лабораторной работы необходимо сохранить проект.
Ep | 0 | 0.01 | 0.02 | 0.03 | 0.04 | 0.05 | 0.06 | 0.07 | 0.08 |
Pнеоб | |||||||||
Ep | 0.09 | 0.1 | 0.11 | 0.12 | 0.13 | 0.14 | 0.15 | 0.16 | 0.17 |
Pнеоб |
№ | Alg | g(X) | Init | RefIn | refOut | XorOut | Check |
---|---|---|---|---|---|---|---|
1 | CRC-8 | 0x07 | 0x00 | false | false | 0x00 | 0xF4 |
2 | CRC-8/CDMA2000 | 0x9B | 0xFF | 0x00 | 0xDA | ||
3 | CRC-8/AUTOSAR | 0x2F | 0xFF | 0xFF | 0xDF | ||
4 | CRC-8/DVB-S2 | 0xD5 | 0x00 | 0x00 | 0xBC | ||
5 | CRC-8/DARC | 0x39 | 0x00 | 0x00 | 0x15 | ||
6 | CRC-8/I-CODE | 0x1D | 0xFD | 0x00 | 0x7E | ||
7 | CRC-8/ITU | 0x07 | 0x00 | 0x55 | 0xA1 | ||
8 | CRC-8/GSM-A | 0x1D | 0x00 | 0x00 | 0x37 | ||
9 | CRC-8/LTE | 0x9B | 0x00 | 0x00 | 0xEA | ||
10 | CRC-8/NRSC-5 | 0x31 | 0xFF | 0x00 | 0xF7 |
В данной лабораторной работе был изучен принцип работы CRC-кодов, разработаны модели кодера, декодера и двух каналов передачи данных с ошибками и проведено моделирование передачи данных через зашумленный канал связи с подсчетом количества ошибок передачи и количества ошибок, обнаруженных декодером. Результаты моделирования подтвердили зависимость способности декодера к обнаружению ошибок от длины кодового слова, вероятности возникновения ошибок и их количества.