Синдромное декодирование линейных блоковых кодов

Лабораторная работа №2 по курсу «Цифровая связь».

Введение

Канальное кодирование

Канальное кодирование (channel coding) представляет собой класс преобразований сигнала, выполняемых для повышения качества связи, то есть приведения параметров системы к желаемому соотношению между достоверностью передачи и шириной полосы пропускания. В результате кодирования сигнал становится менее уязвим к таким эффектам ухудшения качества передачи, как шум, помехи и замирание. Канальное кодирование стало возможно благодаря использованию больших интегральных схем (БИС) и применению высокоскоростной цифровой обработки сигналов. Данный метод позволяет более чем на 10 дБ повысить производительность кодирования при значительно меньших затратах по сравнению с другими методами, например, методами увеличения мощности передатчика или размера антенны.

Канальное кодирование затрагивает два раздела теоретических основ радиосвязи: кодирование (или обработка) сигнала и структурированные последовательности (или структурированная избыточность). Кодирование сигнала означает преобразование сигнала, позволяющее сделать процесс детектирования преобразованного сигнала менее подверженным ошибкам. Метод структурированных последовательностей заключается в преобразовании последовательности данных в новую последовательность, обладающую структурной избыточностью (содержащую избыточные биты). Избыточные разряды служат для определения и исправления ошибок. За счет избыточности увеличивается длина кодового слова, что зачастую требует увеличения полосы пропускания для сохранения скорости передачи.

Кодирование с коррекцией ошибок используется как инструмент, позволяющий улучшать одни показатели системы за счет других. На рисунке (Рисунок 1) приведен сравнительный вид двух кривых, описывающих зависимость вероятности появления битовой ошибки PB (достоверности передачи) от отношения энергии бита к спектральной плотности мощности шума Eb/N0 (мощность передатчика).

Рисунок 1. График вероятности битовой ошибки.

Достоверность передачи связана с мощностью передатчика прямым отношением: чем выше мощность, тем выше достоверность передачи и наоборот. Однако в технических системах зачастую присутствует ряд ограничений, которые не позволяют получить желаемое сочетание характеристик системы. Использование кодирования позволяет изменять одну из двух вышеперечисленных характеристик при неизменной другой характеристике:
  1. Повышение достоверности без повышения мощности передатчика.
    Рассматривается система без кодирования, рабочая точка системы (Eb/N0 = 8 дБ, PB = 10-2) совпадает с точкой А на рисунке (Рисунок 2). Необходимо снизить вероятность появления битовой ошибки PB до 10-4. Возможны два варианта решения данной задачи: повышение мощности или применение кодирования.

    Рисунок 2. График вероятности битовой ошибки с отмеченными точками A, B и C.

    В первом случае за счет увеличения мощности снижается отношение энергии бита к спектральной плотности мощности шума Eb/N0 и рабочая точка перемещается из точки А в точку B (Рисунок 2). Достоверность увеличивается. Скорость передачи данных и полоса пропускания остаются прежними, поскольку размер сообщения не изменяется.

    Во втором случае при неизменном отношении Eb/N0 вероятность появления битовой ошибки снижается благодаря кодированию. Это соответствует перемещению рабочей точки из A в точку C (Рисунок 2). Кодирование с коррекцией ошибок требует избыточности, по этой причине полоса пропускания расширяется.

  2. Снижение мощности передатчика без потерь достоверности.
    Рассматривается система без кодирования, рабочая точка системы (Eb/N0 = 14 дБ, PB = 10-6) совпадает с точкой D на рисунке (Рисунок 3). По ряду причин необходимо снизить мощность передатчика до уровня Eb/N0 = 9 дБ. Возможны два варианта решения данной задачи: снижение достоверности или применение кодирования.

    Рисунок 3. График вероятности битовой ошибки с отмеченными точками D, E и F.

    В первом случае за счет уменьшения мощности снижается отношение энергии бита к спектральной плотности мощности шума Eb/N0 и рабочая точка перемещается из точки D в точку F (Рисунок 3). Достоверность снижается. Скорость передачи данных и полоса пропускания остаются прежними, поскольку размер сообщения не изменяется.

    Во втором случае благодаря кодированию возможно уменьшить отношение Eb/N0 с сохранением достоверности. Это соответствует перемещению рабочей точки из D в точку E (Рисунок 3). Полоса пропускания расширяется в связи с избыточностью кодирования.

    В контексте данного примера возможно ввести понятие энергетического выигрыша от кодирования (ЭВК). ЭВК определяется как уменьшение отношения Eb/N0, которое достигается при использовании кодирования:

    где (Eb/N0)и и (Eb/N0)с – требуемые значения Eb/N0 без кодирования и с кодированием соответственно.

    Для рассмотренного примера:

  3. Снижение мощности передатчика без потерь достоверности.

    Рассматривается система без кодирования, рабочая точка системы (Eb/N0 = 14 дБ, PB = 10-6) совпадает с точкой D на рисунке (Рисунок 3). По ряду причин необходимо увеличить скорость передачи Скорость передачи R, отношение энергии бита к спектральной плотности мощности шума Eb/N0 и отношение спектральной плотности мощности несущей к спектральной плотности мощности шума Pс/N0 связаны соотношением:

    Увеличение скорости передачи вызывает уменьшение отношения Eb/N0 и рабочая точка перемещается из точки D в точку F (Рисунок 3). Достоверность снижается. Использование кодирования позволяет сохранить прежний уровень достоверности за счет расширения полосы пропускания. Это соответствует перемещению рабочей точки из D в точку E (Рисунок 3).

  4. Снижение мощности передатчика без потерь достоверности.

    Метод множественного доступа CDMA (Code Division Multiple Access — множественный доступ с кодовым разделением (МДКР)) – это один из стандартов, используемых в сотовой связи. При использовании CDMA все клиенты совместно используют общий спектр частот, каждый клиент является источником помех для других пользователей в той же или соседних ячейках. По этой причине отношение энергии бита к спектральной плотности мощности шума зависит от количества клиентов в ячейке: чем больше клиентов, тем меньше отношение . Использование кодирования в этом случае дает эффект, аналогичный пункту 3.

    Рассматривается система без кодирования, рабочая точка системы (Eb/N0 = 14 дБ, PB = 10-6) совпадает с точкой D на рисунке (Рисунок 3). Увеличение пропускной способности ячейки (максимального числа клиентов) вызывает уменьшение отношения Eb/N0 и рабочая точка перемещается из точки D в точку F (Рисунок 3). Достоверность снижается.

    Использование кодирования позволяет сохранить прежний уровень достоверности за счет расширения полосы пропускания. Это соответствует перемещению рабочей точки из D в точку E (Рисунок 3).

    В каждом случае из перечисленных выше предполагается использование «традиционного» кода с избыточными битами и расширение полосы пропускания (для систем связи реального времени). Существуют методы коррекции ошибок, называемые решетчатым кодированием (TCM – Trellis Coded Modulation), которые не требуют увеличения скорости передачи сигналов или расширения полосы частот для систем связи реального времени, однако в данной лабораторной работе они не рассматриваются.

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

Пример разработки блокового кода

Блоковый код состоит из набора векторов фиксированной длины, называемыми кодовыми словами. Длина кодового слова – это число элементов n в векторах. Элементы кодового слова выбираются из алфавита с q элементами. Если алфавит содержит два элемента 0 и 1, код называется двоичным, а элементы любого кодового слова называют битами (двоичными символами). Если элементы кодового слова выбираются из алфавита, имеющего элементов q > 2, код называют недвоичным. Важно отметить, что если q является степенью 2, т.е. q = 2b, где b – положительное целое число, каждый q-й элемент имеет эквивалентное двоичное представление, состоящее из b битов и, таким образом, недвоичные коды длины N возможно отобразить в двоичный код с блоковой длиной n = b · N.

В двоичном блоковом коде длиной n возможно образовать 2n кодовых слов. Из этих 2n кодовых слов необходимо выбрать M = 2kкодовых слов (k < n), чтобы сформировать код. Таким образом, блок из k информационных бит отображается в кодовое слово длиной n, выбираемое из набора M = 2k кодовых слов. Результирующий блоковый код обозначается как (n, k) код, а отношение k/n = R называется скоростью кода.

Рассматривается разработка блочного кода (7,4), для которого количество кодовых слов:

Предел Плоткина:

При выборе набора кодовых слов следует учитывать ряд ограничений:
  1. Каждое кодовое слово должно содержать 7 двоичных разрядов.
  2. Среди кодовых слов должен быть нулевой вектор.
  3. Сумма по модулю 2 двух любых кодовых слов в пространстве должна давать кодовое слово из этого же пространства (свойство замкнутости).
  4. Поскольку dmin ≤ 3, весовой коэффициент каждого кодового слова (за исключением нулевого) должен быть не менее 3 (в силу замкнутости). Весовой коэффициент кодового слова определяется как число ненулевых элементов этого кодового слова.
  5. Предполагается, что код является систематическим, поэтому 4 крайних левых бита каждого кодового слова должны являться соответствующими битами сообщения.

Формирование кодового слова U производится путем умножения вектора сообщения I на порождающую матрицу G:

При умножении для вычисления значения каждого бита кодового слова вместо обычной операции сложения применяется операция сложения по модулю 2, чтобы результирующее кодовое слово также было двоичным (содержало только 0 и 1).

Для разрабатываемого блочного кода (7,4) порождающая матрица должна иметь 4 строки и 7 столбцов. В силу систематичности кода первые 4 столбца матрицы должны содержать единичную матрицу (чтобы первые 4 бита кодового слова совпадали с соответствующими битами сообщения):

Необходимо определить неизвестные коэффициенты матрицы. Для сообщений [1 0 0 0], [0 1 0 0], [0 0 1 0], [0 0 0 1] следует выбрать кодовые слова и записать их в соответствующие строки матрицы. Предлагается следующее, удовлетворяющее всем перечисленным выше требованиям, соответствие кодовых слов сообщениям (Таблица 1):
Таблица 1. Соответствие кодовых слов сообщениям.
Сообщение Кодовое слово
0000 0000000
1000 1000101
0100 0100111
0010 0010110
0001 0001011

Таким образом возможно записать порождающую матрицу:

Строки матрицы соответствуют кодовым словам из таблицы (Таблица 1). При помощи порождающей матрицы возможно сформировать набор кодовых слов для всех возможных информационных сообщений (Таблица 2).

Таблица 2. Набор кодовых слов.
Сообщение Кодовое слово Сообщение Кодовое слово
0000 0000000 1000 1000101
0001 0001011 1001 1001110
0010 0010110 1010 1010011
0011 0011101 1011 1011000
0100 0100111 1100 1100010
0101 0101100 1101 1101001
0110 0110001 1110 1110100
0111 0111010 1111 1111111

Синдромное декодирование

Синдромный декодер должен принять искаженное кодовое слово и восстановить исходный вектор информационных бит. Для выявления ошибки используется проверочная матрица H размера (3×7). Строки порождающей матрицы G должны быть ортогональны строкам проверочной матрицы H, то есть:

Здесь 0 – это нулевая матрица размера (4×3).

Если записать порождающую матрицу в виде:

где E4 – единичная матрица размера (4×4), а P – матрица размера (4×3), то проверочная матрица будет представлена в виде:
где E3 – единичная матрица размера (3×3).

Для разрабатываемого блочного кода (7,4) проверочная матрица имеет вид:

Поскольку любое кодовое слово из разработанного набора (Таблица 2) является линейной комбинацией строк порождающей матрицы G, то произведение любого кодового слова U на транспонированную проверочную матрицу H также равно 0:

Принятое кодовое слово r рассматривается как сумма по модулю 2 вектора кодового слова U и вектора ошибки e:

В результате умножения принятого кодового слова на проверочную матрицу вычисляется синдром S кодового слова, который равен синдрому ошибки:

Таким образом для устранения ошибки передачи синдромный декодер должен решить следующие задачи:
  • Вычислить синдром кодового слова.
  • Вычислить вектор ошибки.
  • Устранить ошибку.

Для упрощения реализации декодера вычисление синдрома кодового слова производится по следующему алгоритму:

С учетом нулевых элементов матрицы H операция перемножения:

заменяется на 3 операции сложения по модулю 2 (XOR):

Индексы элементов кодового слова соответствуют расположению ненулевых элементов в строках проверочной матрицы H.

В силу систематичности кода первые 4 бита кодового слова совпадают с информационными битами, поэтому вычисление и устранение ошибки возможно производить по следующему алгоритму:
  1. Выбрать из кодового слова первые 4 бита.
  2. Вычислить первые 4 бита ошибки.
  3. Сложить по модулю 2 первые 4 бита кодового слова с 4 битами ошибки. Данная операция позволит исключить ошибку и восстановить передаваемые информационные биты.

Учитывая вид проверочной матрицы H:

и переходя от произведения матриц к сложению по модулю 2, для первых 4 бит ошибки возможно записать соотношение:

Индексы элементов ошибки соответствуют расположению ненулевых элементов в строках первых 4 столбцов проверочной матрицы H.

Алгоритм вычисления вектора ошибки основывается на допущении, что вектор ошибки имеет только один ненулевой бит. Это позволяет упростить алгоритм, однако декодер, использующий данный алгоритм не сможет устранить ошибки с 2 и более ненулевыми битами. В таком случае для каждого бита ошибки возможно записать соотношение:

Положения отрицаний соответствуют положениям нулей в первых 4 столбцах проверочной матрицы H.

Для устранения ошибки необходимо сложить по модулю 2 принятое сообщение и вычисленный вектор ошибки.

Вероятность ошибки

Следует сравнить вероятность ошибки в сообщении для двух каналов связи – обычного и использующего кодирование с коррекцией ошибок. Принимаются следующие характеристики канала передачи данных:

Следует определить вероятности битовых и символьных ошибок в канале без кодирования и в канале с кодированием.
  1. Без кодирования:

    Отношение энергии бита к спектральной плотности мощности шума

    Вероятность битовой ошибки:

    где Q(x) – Гауссов интеграл ошибок, для вычисления которого используется приближение:

    Вероятность битовой ошибки в канале без кодирования:

    Вероятность того, что некодированный блок сообщений puM будет принят с ошибкой (вероятность символьной ошибки):

  2. С кодированием:

    Рассматривается система связи реального времени, где задержки недопустимы, а скорость передачи канальных символов, или скорость передачи кодированных битов, в 7/4 раза больше скорости некодированной передачи:

    Отношение энергии кодированного бита к спектральной плотности мощности шума:

    Для каждого кодового бита значение Ec/N0 меньше, чем в случае с некодированными битами данных. Это объясняется тем, что скорость передачи канальных битов возросла, а мощность передатчика при этом не изменилась.

    Вероятность битовой ошибки в канале без учета исправления ошибок:

    Вследствие увеличения скорости передачи вероятность битовой ошибки в принятом сообщении увеличилась. Однако благодаря алгоритму коррекции ошибок происходит снижение вероятности символьной ошибки.

    Вероятность символьной ошибки вычисляется по формуле:

    где

    Суммирование начинается с j = 2, поскольку декодер позволяет исправлять все однобитовые ошибки в блоках из n = 7 бит:

    Вследствие применения кода с коррекцией ошибок вероятность символьной ошибки уменьшилась примерно в 3 раза по сравнению с некодированной передачей данных.

    Данный пример иллюстрирует типичное поведение систем связи реального времени при использовании кодирования с коррекцией ошибок. Введение избыточности означает увеличение скорости передачи сигналов, уменьшение энергии, приходящейся на канальный символ, и увеличение вероятности битовых ошибок вне модулятора. Преимуществом такого подхода является то, что за счет коррекции ошибок декодер (при разумном значении Eb/N0) позволяет скомпенсировать увеличение вероятности битовых ошибок так, что вероятность символьных ошибок снижается.

    Необходимо провести моделирование передачи данных и сравнить результаты моделирования с результатами аналитических расчетов. Для корректности сравнения необходимо разрабатывать модель передачи данных с помехами в соответствии с данными, используемыми для аналитических расчетов.

Цель работы:

Задачи работы:

Выполнение лабораторной работы

Содержание лабораторной работы

В ходе выполнения данной лабораторной работы будет:
  • создан новый проект;
  • продемонстрирован процесс установки блоков на схему и их соединения между собой;
  • продемонстрирован процесс задания свойств блоков;
  • проведено моделирование передачи данных через канал связи.

Создание нового проекта

Необходимо создать новый проект, для этого:
  1. В главном окне SimInTech нажать кнопку «Файл» и выбрать пункт «Новый проект».
  2. В выпадающем меню выбрать пункт «Схема модели общего вида» (Рисунок 4).

    Рисунок 4. Главное окно SimInTech c выделенным меню создания нового проекта.

Откроется новое окно проекта «Схема модели общего вида», в котором производится разработка моделей (Рисунок 5).

Рисунок 5. Окно проекта «Схема модели общего вида».

Требуется сохранить созданный проект. Для этого:
  1. В главном окне SimInTech нажать кнопку «Файл» и выбрать пункт «Сохранить проект как...».
  2. В появившемся окне выбрать или при необходимости создать папку, в которую будет сохранен данный проект.
  3. В поле «Имя файла» указать желаемое имя проекта либо оставить имя проекта по умолчанию и нажать на кнопку «Сохранить».

Разработка модели канала связи

В ходе выполнения лабораторной работы будет проведено сравнение вероятности ошибки при передаче данных с использованием кодирования и без него. Для этого необходимо разработать две идентичные модели передачи данных и оценки вероятности ошибки, затем в одну из них будут добавлены модели кодера и декодера.

Добавление блоков на схему

Требуется добавить на схему блок «Цифровая связь – Генератор псевдослучайной битовой последовательности» из подменю «Источники» вкладки «Цифровая связь». Данный блок будет формировать последовательность информационных бит, передаваемых через канал связи. Для добавления блока на схему необходимо выполнить следующие действия:
  1. В главном окне SimInTech в палитре блоков выбрать вкладку «Цифровая связь» (Рисунок 6).

    Рисунок 6. Главное окно SimInTech с выбранной вкладкой «Цифровая связь» в палитре блоков.

  2. Нажать левой кнопкой мыши по подменю «Источники», в результате чего появится список блоков, находящихся в данном подменю (Рисунок 7).

    Рисунок 7. Главное окно SimInTech с выбранным подменю «Источники» вкладки «Цифровая связь».

  3. Одинарным нажатием левой кнопкой мыши выбрать блок «Цифровая связь – Генератор псевдослучайной битовой последовательности».
  4. Перевести курсор мыши на рабочую область проекта. В рабочей области появится графическое изображение блока «Цифровая связь – Генератор псевдослучайной битовой последовательности», которое будет следовать за указателем мыши.
  5. В рабочей области окна проекта выбрать место для установки блока и установить блок одинарным нажатием левой кнопкой мыши (Рисунок 8).

    Рисунок 8. Окно проекта с добавленным блоком «Цифровая связь – Генератор псевдослучайной битовой последовательности».

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

Аналогичным образом необходимо добавить на схему следующие блоки:
  • 1 блок «Цифровая связь – BPSK модулятор» и 1 блок «Цифровая связь – BPSK демодулятор» из подменю «Модуляция» вкладки «Цифровая связь». Данные блоки необходимы для моделирования алгоритма BPSK модуляции.
  • 1 блок «Цифровая связь – Канал с АБГШ» из подменю «Каналы связи» вкладки «Цифровая связь». Данный блок необходим для моделирования канала передачи данных с помехами.
  • 1 блок «Цифровая связь – Измеритель WER» и 1 блок «Цифровая связь – Измеритель BER» из подменю «Измерители» вкладки «Цифровая связь». С помощью данных блоков будет вычисляться вероятность ошибки передачи кодового слова и бита соответственно.
Блоки необходимо расположить согласно рисунку (Рисунок 9).

Рисунок 9. Окно проекта с добавленными блоками.

Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.

Задание свойств блоков

Одно кодовое слово разработанного кода содержит 4 информационных бита. Для формирования 4-х информационных бит на каждом шаге моделирования необходимо изменить свойства блока «Цифровая связь – Генератор псевдослучайной битовой последовательности». Для этого:
  1. Одинарным нажатием левой кнопкой мыши выделить блок «Цифровая связь – Генератор псевдослучайной битовой последовательности»
  2. Одинарным нажатием правой кнопкой мыши по выделенному блоку вызвать контекстное меню блока и в нем выбрать пункт «Свойства объекта» (Рисунок 10).

    Рисунок 10. Окно проекта с пунктом «Свойства объекта», выбранным в контекстном меню блока.

  3. Откроется окно «Свойства», в котором задаются свойства блока (Рисунок 11).

    Рисунок 11. Окно «Свойства» блока «Цифровая связь – Генератор псевдослучайной битовой последовательности» со свойствами по умолчанию.

  4. Необходимо задать значение свойства «Размер выхода» в поле «Формула» равным «4».
Требуется изменить настройки передачи данных через канал связи, для этого необходимо задать значения свойств блока «Цифровая связь – Канал с АБГШ» согласно рисунку (Рисунок 12). Значение свойства «Величина отношения сигнал-шум, дБ» соответствует значению, полученному в результате аналитических расчетов.

Рисунок 12. Окно «Свойства» блока «Цифровая связь – Канал с АБГШ» с измененными значениями свойств.

Демодулятору необходимо задать режим «жесткой оценки», для этого в окне свойств блока «Цифровая связь - BPSK демодулятор» для свойства «Тип оценки» в поле «Значение» требуется выбрать «Биты».

Блоки «Цифровая связь - BPSK демодулятор», «Цифровая связь – Канал с АБГШ» и «Цифровая связь - BPSK демодулятор» предназначены для моделирования передачи данных по каналу связи без кодирования. Для формирования второго канала передачи данных (для моделирования помехозащищенной передачи данных с кодированием) требуется скопировать ряд блоков на схеме. Для этого при зажатой клавише «Shift» необходимо выделить на схеме блоки:
  • «Цифровая связь – BPSK модулятор».
  • «Цифровая связь – Канал с АБГШ».
  • «Цифровая связь – BPSK демодулятор».
  • «Цифровая связь – Измеритель WER».
  • «Цифровая связь – Измеритель BER».
Требуется скопировать выбранные блоки, для этого необходимо вызвать контекстное меню блоков нажатием правой кнопкой мыши по рабочей области окна проекта. В открывшемся контекстном меню необходимо выбрать пункт «Копировать» (Рисунок 13).

Рисунок 13. Окно проекта с пунктом «Копировать», выбранным в контекстном меню блоков.

Необходимо вставить скопированные блоки на схему, для этого требуется вызвать контекстное меню нажатием правой кнопкой мыши и выбрать пункт «Вставить». В рабочей области окна проекта появятся графические изображения вставляемых блоков, которые будут следовать за указателем мыши. Необходимо выбрать место в рабочей области окна проекта, разместить блоки согласно рисунку (Рисунок 14) и нажать левую кнопку мыши. После установки блоков на схему для снятия выделения блоков следует нажать левой кнопкой мыши по свободному пространству рабочей области окна проекта.

Рисунок 14. Окно проекта с вставленными блоками.

При использовании кодирования через канал связи будет передаваться кодовое слово, состоящее из 7 бит, вместо 4. По этой причине для вставленного блока «Цифровая связь – Канал с АБГШ» для свойства «Кодовая скорость» в поле «Формула» требуется задать формулу расчета «4/7». После задания формулы произойдет автоматический расчет значения свойства в поле «Значение».

Для упрощения идентификации канала связи без кодирования и канала связи с кодированием следует добавить на схему подписи. Требуется нажать на кнопку «Панель примитивов» в главном окне программы (Рисунок 15), в открывшемся меню выбрать и разместить на схеме примитив «Текст».

Рисунок 15. Главное окно SimInTech с выделенной кнопкой «Панель примитивов».

Двойным нажатием левой кнопки мыши по изображению примитива на схеме необходимо открыть окно редактирования отображаемого текста примитива. В открывшемся окне требуется задать текст «Без кодирования» и нажать кнопку «Применить и закрыть» (Рисунок 16).

Рисунок 16. Окно «Редактирование текста» с выделенной кнопкой «Применить и закрыть».

После выполнения этих действий отображаемый текст примитива изменится. Аналогичным образом необходимо добавить на схему еще один примитив «Текст», задать отображаемый текст примитива и разместить примитивы на схеме согласно рисунку (Рисунок 17).

Рисунок 17. Окно проекта с добавленными примитивами «Текст».

Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.

Разработка модели кодера

Блочный кодер должен сформировать кодовое слово U путем перемножения вектора сообщения I и порождающей матрицы G:

Необходимо создать текстовый файл, в котором будет сохранена порождающая матрица блочного кода, в одной директории с файлом проекта. Для этого необходимо открыть окно «Проводник», перейти в директорию сохранения текущего проекта и создать текстовый файл с именем «G.txt». Необходимо открыть файл, заполнить его согласно рисунку (Рисунок 18) и сохранить.

Рисунок 18. Окно текстового файла с заполненными данными.

Добавление блоков на схему

Необходимо разработать модель блочного кодера в виде одного блока. Для этого требуется добавить на схему блок «Субмодель» из вкладки «Субструктуры» и разместить его согласно рисунку (Рисунок 19).

Рисунок 19. Окно проекта с добавленным блоком «Субмодель».

Необходимо задать подпись блоку «Субмодель», для этого:
  1. Выделить на схеме блок «Субмодель» одинарным нажатием левой кнопкой мыши по нему (Рисунок 20).

    Рисунок 20. Окно проекта с выделенным блоком «Субмодель».

  2. Открыть область подписи блока двойным нажатием левой кнопкой мыши на прямоугольную область, расположенную рядом с выделенным блоком, и задать подпись «Кодер».
  3. Для того, чтобы переместить поле подписи блока, необходимо нажать левой кнопкой мыши на красный прямоугольник в верхней части этого поля и переместить его, не отпуская левую кнопку мыши.
    Двойным нажатием по блоку «Субмодель» необходимо зайти в субмодель. В окне проекта откроется рабочая область блока «Субмодель» (Рисунок 21).

    Рисунок 21. Рабочая область блока «Субмодель».

Необходимо добавить в рабочую область субмодели и разместить, согласно рисунку (Рисунок 22), следующие блоки:
  • 1 блок «Константа» и 1 блок «Таблица данных из файла» из вкладки «Источники». Данные блоки будут формировать сигналы, необходимые для функционирования блочного кодера.
  • 1 блок «Запаковка матрицы» и 1 блок «Матричные – Умножение матриц» из вкладки «Векторные». Данные блоки необходимы для реализации алгоритма работы блочного кодера.
  • 1 блок «Порт входа» и 1 блок «Порт выхода» из вкладки «Субструктуры». Данные блоки необходимы для приема и передачи данных через порты блока «Субмодель».
  • 1 блок «Целочисленные операции» из вкладки «Логические». Данный блок необходим для реализации алгоритма работы блочного кодера.

Рисунок 22. Окно проекта с добавленными блоками.

Вектор сообщения будет передаваться в субмодель при помощи блока «Порт входа». Блок «Таблица данных из файла» будет считывать из текстового файла столбцы порождающей матрицы блочного кода, а блок «Запаковка матрицы» будет формировать из них матрицу.

Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.

Задание свойств блоков

Для корректного считывания данных из текстового файла необходимо настроить свойства блока «Таблица данных из файла». Необходимо открыть окно свойств блока и выполнить следующие действия:

  • В поле «Формула» задать значение свойства «Число столбцов» равным «7».
  • В поле «Значение» свойства «Имя файла данных» указать имя файла «G.txt».
Для корректного формирования матрицы из ее столбцов необходимо задать значения свойств блока «Запаковка матрицы» согласно рисунку (Рисунок 23).

Рисунок 23. Окно свойств блока «Запаковка матрицы» с измененными значениями свойств.

Для блока «Умножение матриц» требуется задать:
  • Значение свойства «Количество строк матрицы 1» равным «1».
  • Значение свойства «Количество столбцов матрицы 1» равным «4».
  • Значение свойства «Количество строк матрицы 2» равным «4».
  • Значение свойства «Количество столбцов матрицы 2» равным «7».

Результирующий вектор, полученный в результате умножения вектора сообщения на порождающую матрицу, в общем случае может содержать элементы, отличные от 0 и 1. Для получения двоичного кодового слова при умножении вектора сообщения на порождающую матрицу вместо обычной операции сложения (для определения значения каждого элемента результирующего вектора) следует использовать операцию сложения по модулю 2. Для того, чтобы получить корректный результат работы кодера без внесения изменений в алгоритм умножения вектора на матрицу, необходимо найти остаток от деления каждого элемента результирующего вектора на 2 (математически это будут две тождественные операции).

Для блока «Целочисленные операции» требуется открыть окно свойств, в поле «Значение» свойства «Тип операции» открыть список доступных операций и выбрать «% (Остаток от деления)».

Для блока «Константа» требуется задать значение свойства «Значение» равным «2».

Для упрощения внешнего вида модели следует изменить размер блока «Запаковка матрицы». Для этого необходимо:
  1. Открыть окно свойств блока «Запаковка матрицы» и перейти на вкладку «Общие».
  2. Задать значение свойства «Высота» равным «112».

Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.

Соединение блоков на схеме

Необходимо соединить блоки линиями связи, для этого:
  1. Навести курсор мыши на выходной порт блока «Порт входа» (курсор мыши изменится на вертикальную стрелку) и нажать левую кнопку мыши.
  2. Появившуюся линию соединить с верхним входным портом блока «Умножение матриц» и нажать левую кнопку мыши.
После выполнения этих действий появится линия связи. Необходимо соединить блоки на схеме согласно рисунку (Рисунок 24).

Рисунок 24. Окно проекта с соединенными блоками.

Разработка модели кодера завершена. Следует выйти из рабочей области субмодели одинарным нажатием левой кнопкой мыши по кнопке «Возврат из субмодели» на панели кнопок окна проекта (Рисунок 25).

Рисунок 25. Окно проекта с выделенной кнопкой «Возврат из субмодели».

Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.

Разработка модели декодера

Необходимо разработать модель синдромного декодера в виде одного блока. Для этого требуется добавить на схему блок «Субмодель» из вкладки «Субструктуры» и разместить его согласно рисунку (Рисунок 26).

Рисунок 26. Окно проекта с добавленным блоком «Субмодель».

Добавленному блоку «Субмодель» необходимо задать подпись «Декодер».

Синдромный декодер должен принять искаженное кодовое слово и восстановить исходный вектор информационных бит. Для этого он должен решить следующие задачи:
  • Вычислить синдром кодового слова.
  • Вычислить вектор ошибки.
  • Устранить ошибку.

Вычисление синдрома кодового слова

Вычисление синдрома S принятого кодового слова r производится побитно по следующему алгоритму:

Для реализации данного соотношения требуется зайти в субмодель, добавить в рабочую область субмодели и разместить, согласно рисунку (Рисунок 27), следующие блоки:
  • 1 блок «Демультиплексор» из вкладки «Векторные». Данный блок необходим для работы с отдельными элементами вектора данных.
  • 1 блок «Порт входа» из вкладки «Субструктуры». Данный блок необходим для приема данных через порт блока «Субмодель».
  • 3 блока «XOR» из вкладки «Логические». Данные блоки необходимы для реализации алгоритма работы синдромного декодера.

Рисунок 27. Окно проекта с добавленными блоками.

Необходимо увеличить число портов блока «Демультиплексор». Для данного блока требуется в поле «Формула» свойства «Массив размерностей выходов» задать формулу «7#1». Данная формула задает массив из семи единиц. После задания формулы произойдет автоматический расчет значения свойства в поле «Значение» и изменится количество портов блока. В ходе моделирования на выходных портах блока будут формироваться соответствующие биты кодового слова, нумерация битов идет сверху вниз.

Каждый бит синдрома определяется как сумма четырех битов по модулю 2. Необходимо увеличить количество портов всех блоков «XOR». Для каждого блока «XOR» требуется задать значение свойства «Количество портов» равным «4».

Для упрощения внешнего вида модели следует изменить размер и ориентацию ряда блоков. Необходимо изменить размер блока «Демультиплексор». Для этого необходимо:
  1. Открыть окно свойств блока «Демультиплексор» и перейти на вкладку «Общие».
  2. Задать значение свойства «Высота» равным «224».
Требуется изменить ориентацию всех блоков «XOR». Для этого необходимо:
  1. Выделить все блоки «XOR» на схеме и вызвать контекстное меню блоков.
  2. В контекстном меню выбрать пункт «Повернуть»
  3. В раскрывшемся меню выбрать пункт «90 градусов по часовой стрелке».
Требуется расположить блоки на схеме и соединить их линиями связи согласно рисунку (Рисунок 28).

Рисунок 28. Окно проекта с соединенными блоками.

В ходе моделирования в блоках «XOR» будут вычисляться значения трех битов синдрома кодового слова. Нумерация битов идет слева направо.

Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.

Вычисление вектора ошибки

Вычисление ошибки e производится побитно по следующему алгоритму:

Для реализации данного алгоритма необходимо добавить в рабочую область субмодели 4 блока «Оператор И» и 3 блока «Оператор НЕ» из вкладки «Логические» и разместить их согласно рисунку (Рисунок 29).

Рисунок 29. Окно проекта с добавленными блоками.

Необходимо увеличить число портов всех блоков «Оператор И», для каждого блока «Оператор И» требуется задать значение свойства «Количество портов» равным «3».

Для упрощения внешнего вида модели необходимо изменить размер всех блоков «Оператор НЕ». Для каждого блока «Оператор НЕ» на вкладке «Общие» окна свойств требуется задать:
  • значение свойства «Высота» равным «16»;
  • значение свойства «Ширина» равным «16».
Требуется расположить блоки на схеме и соединить их линиями связи согласно рисунку (Рисунок 30).

Рисунок 30. Окно проекта с соединенными блоками.

В ходе моделирования в блоках «Оператор И» будут вычисляться значения четырех битов ошибки. Нумерация битов идет сверху вниз.

Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.

Устранение ошибки

Устранение ошибки производится путем сложения по модулю 2 первых 4-х бит кодового слова и вектора ошибки. Для реализации данного алгоритма необходимо добавить в рабочую область субмодели и разместить, согласно рисунку (Рисунок 31), следующие блоки:
  • 1 блок «Мультиплексор» из вкладки «Векторные». Данный блок необходим для формирования вектора данных из отдельных битов.
  • 1 блок «Порт выхода» из вкладки «Субструктуры». Данный блок необходим для передачи данных через порт блока «Субмодель».
  • 4 блока «Логические операции» из вкладки «Логические». Данные блоки необходимы для реализации алгоритма устранения ошибки.

Рисунок 31. Окно проекта с добавленными блоками.

Для формирования вектора сообщения из четырех его битов для блока «Мультиплексор» требуется задать значение свойства «Количество портов» равным «4».

Для каждого блока «Логические операции» требуется открыть окно свойств, в поле «Значение» свойства «Тип операнда» открыть список доступных операций и выбрать «(ИСКЛЮЧАЮЩЕЕ ИЛИ, XOR)».

Для упрощения внешнего вида модели необходимо изменить размер блока «Мультиплексор». Для данного блока на вкладке «Общие» окна свойств требуется задать значение свойства «Высота» равным «128».

Необходимо расположить и соединить блоки линиями связи согласно рисунку (Рисунок 32).

Рисунок 32. Окно проекта с соединенными блоками.

Разработка модели синдромного декодера завершена. Следует выйти из рабочей области субмодели одинарным нажатием левой кнопкой мыши по кнопке «Возврат из субмодели», расположенной на панели кнопок окна проекта.

Необходимо соединить блоки на схеме согласно рисунку (Рисунок 33).

Рисунок 33. Окно проекта с соединенными блоками.

Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.

Настройка параметров расчета

Перед запуском моделирования необходимо настроить параметры расчета. Для этого в окне проекта на панели кнопок следует нажать на кнопку «Параметры расчета» (Рисунок 34).

Рисунок 34. Окно проекта с выделенной кнопкой «Параметры расчета».

В появившемся окне параметров проекта на вкладке «Параметры расчета» установить новые значения свойств «Минимальный шаг», «Максимальный шаг» и «Конечное время расчета» (Рисунок 35):
  • «Минимальный шаг» – «1».
  • «Максимальный шаг» – «1».
  • «Конечное время расчета» – «1000000».

Рисунок 35. Вкладка «Параметры расчета» окна «Параметры проекта».

Закрыть окно «Параметры расчета», при этом внесенные изменения будут сохранены автоматически.

Перед тем, как приступать к выполнению следующего пункта лабораторной работы, необходимо сохранить проект.

Моделирование передачи данных

Необходимо запустить моделирование одинарным нажатием левой кнопкой мыши по кнопке «Пуск», расположенной на панели кнопок окна проекта (Рисунок 36).

Рисунок 36. Окно проекта с выделенной кнопкой «Пуск».

После завершения процесса моделирования необходимо сравнить значения вероятностей битовых и символьных ошибок, полученные в результате моделирования (Рисунок 37), со значениями, вычисленными аналитически.

Рисунок 37. Окно проекта с отображаемыми результатами моделирования.

Вероятность приема ошибочного бита (BER) при передаче данных без кодирования отображается на схеме в графическом изображении блока «Цифровая связь – Измеритель BER», расположенного в канале связи с подписью «Без кодирования» (Рисунок 38). После окончания процесса моделирования вероятность должна быть равна примерно «1E-5», аналитически вычисленное значение равняется «1.02E-5».

Рисунок 38. Окно проекта с выделенным блоком «Цифровая связь – Измеритель BER», расположенным в канале связи с подписью «Без кодирования».

Вероятность приема ошибочного кодового слова (WER) при передаче данных без кодирования отображается на схеме в графическом изображении блока «Цифровая связь – Измеритель WER», расположенного в канале связи с подписью «Без кодирования». После окончания процесса моделирования вероятность должна быть равна примерно «4E-5», аналитически вычисленное значение равняется «4.08E-5».

Вероятность приема ошибочного бита при передаче данных с кодированием отображается на схеме в графическом изображении блока «Цифровая связь – Измеритель BER», расположенного в канале связи с подписью «С кодированием». После окончания процесса моделирования вероятность должна быть равна примерно «6.5E-4», аналитически вычисленное значение равняется «6.75E-4».

Вероятность приема ошибочного кодового слова при передаче данных с кодированием отображается на схеме в графическом изображении блока «Цифровая связь – Измеритель WER», расположенного в канале связи с подписью «С кодированием». После окончания процесса моделирования вероятность должна быть равна примерно «1.2E-5», аналитически вычисленное значение равняется «1.59E-5».

Результаты моделирования с достаточной точностью совпадают с результатами аналитических расчетов. Из-за применения кодирования вероятность битовой ошибки значительно увеличилась, но благодаря алгоритму коррекции ошибок вероятность символьной ошибки уменьшилась примерно в 3 раза.

Перед завершением выполнения лабораторной работы необходимо сохранить проект.

Самостоятельная разработка модели CRC-кодера

Порядок выполнения лабораторной работы

Необходимо разработать блоковый код (n, k) согласно исходным данным, приведенным в таблице (Таблица 4). В ходе выполнения задания требуется:
  1. Вычислить предел Плоткина для блокового кода.
  2. Предложить вариант набора кодовых слов, удовлетворяющих требованиям, описанным в разделе «Пример разработки блокового кода».
  3. Составить порождающую матрицу G.
  4. Вычислить проверочную матрицу Н.
  5. Вычислить и сравнить векторы синдрома для искаженного кодового слова и для вектора ошибки.
  6. Вычислить и сравнить вероятности ошибки в сообщении для двух каналов связи: обычного и использующего кодирование с коррекцией ошибок.
  7. Разработать алгоритм синдромного декодирования.
  8. Построить графики теоретических зависимостей вероятностей битовой и символьной ошибок с кодированием и без кодирования от значения отношения сигнал-шум (ОСШ).
  9. Разработать модель кодера и декодера в SimInTech.
  10. Провести моделирование и заполнить таблицу (Таблица 3).
Таблица 3. Экспериментальные данные
ОСШ, дБ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
PБ                                
PC                                
PKБ                                
PKC                                

Здесь PБ – вероятность битовой ошибки без кодирования, PC – вероятность символьной ошибки без кодирования, PKБ – вероятность битовой ошибки с кодированием, PKC – вероятность символьной ошибки с кодированием.

Таблица 4. Варианты задания
1 2 3 4 5 6 7 8 9 10
n 6 8 8 6 9 7 10 9 10 9
k 4 3 4 3 4 3 3 3 4 5

Контрольные вопросы

  1. Описать четыре приема для получения желаемых характеристик системы при помощи использования кода коррекции ошибок.
  2. За счет чего возможно реализовать применение кодирования с коррекцией ошибок в системах, где не используется связь в реальном времени?
  3. В системах реального времени введение избыточности означает повышение скорости передачи сигналов, уменьшение энергии, приходящейся на канальный символ, и увеличение количества ошибок на выходе демодулятора. Объяснить, каким образом достигается эффективность кодирования при описанном ухудшении характеристик системы.
  4. Почему эффективность традиционных кодов коррекции ошибок снижается при низких значениях Eb/N0?
  5. Определить место нормальной матрицы в понимании блочного кода и оценке его возможностей.
  6. Объяснить качественно за счет чего достигается выигрыш от кодирования в АБГШ канале.
  7. Объяснить формулу для расчета вероятности ошибки в АБГШ канале.
  8. В чем состоит различие между жесткими и мягкими решениями при декодировании?
  9. Объяснить суть синдромного метода декодирования.
  10. Что такое необнаруживаемая ошибка декодирования? Пояснить формулу для расчета вероятности этой ошибки.
  11. Как связаны между собой минимальное кодовое расстояние и кратность обнаруживаемых и исправляемых ошибок? Привести примеры на основе кодов согласно варианту задания.
  12. Что такое метод неполного декодирования? Как он связан с используемым в работе алгоритмом синдромного декодирования?
  13. Какие коды называются совершенными? Привести примеры совершенных кодов.
  14. Что такое весовой спектр кода, в чем сложность его нахождения?
  15. Какими свойствами должна обладать проверочная матрица блокового кода для получения высокой корректирующей способности?

Заключение

В данной лабораторной работе был разработан систематический блочный код, разработаны модели блочного кодера, синдромного декодера и канала передачи данных с BPSK-модуляцией и проведено моделирование передачи данных через зашумленный канал связи без кодирования и с кодированием. Для обоих случаев вероятности приема ошибочных битов и кодовых слов, полученные в результате моделирования, с достаточной точностью совпали с результатами аналитических расчетов.