сверточный код 171 133
СОДЕРЖАНИЕ
История
Используя «сверточную» терминологию, классический сверточный код можно рассматривать как фильтр с конечной импульсной характеристикой (FIR), а рекурсивный сверточный код можно рассматривать как фильтр с бесконечной импульсной характеристикой (IIR).
Где используются сверточные коды
Сверточное кодирование
Сверточные коды могут быть систематическими и несистематическими:
Несистематические сверточные коды более популярны из-за лучшей помехоустойчивости. Это относится к свободному расстоянию сверточного кода.
Краткая иллюстрация несистематического сверточного кода.
Краткая иллюстрация систематического сверточного кода.
Рекурсивные и нерекурсивные коды
Пример кодировщика является систематическим, потому что входные данные также используются в выходных символах (Выход 2). Коды с выходными символами, не включающими входные данные, называются несистематическими.
Рекурсивные коды обычно являются систематическими, и, наоборот, нерекурсивные коды обычно несистематичны. Это не строгое требование, а обычная практика.
Пример кодировщика в Img. 2. кодер с 8 состояниями, потому что 3 регистра будут создавать 8 возможных состояний кодера (2 3 ). Соответствующая решетка декодера обычно также использует 8 состояний.
Рекурсивные систематические сверточные коды (RSC) стали более популярными из-за их использования в турбо-кодах. Рекурсивные систематические коды также называются псевдосистематическими кодами.
Другие коды RSC и примеры приложений включают:
Полезно для реализации кода LDPC и в качестве внутреннего составляющего кода для последовательных конкатенированных сверточных кодов (SCCC).
Полезно для SCCC и многомерных турбокодов.
Полезен в качестве составляющего кода в турбокодах с низким коэффициентом ошибок для таких приложений, как спутниковые каналы. Также подходит как внешний код SCCC.
Импульсная характеристика, передаточная функция и длина ограничения
Сверточный кодировщик называется так, потому что он выполняет свертку входного потока с импульсными характеристиками кодировщика :
Передаточные функции для первого (нерекурсивного) кодировщика:
Передаточными функциями для второго (рекурсивного) кодировщика являются:
Диаграмма решетки
Представьте, что кодировщик (показанный на Рисунке 1 выше) имеет «1» в левой ячейке памяти ( m 0 ) и «0» в правой ( m -1 ). ( m 1 на самом деле не является ячейкой памяти, поскольку представляет текущее значение). Обозначим такое состояние цифрой «10». В соответствии с входным битом кодер на следующем повороте может преобразовать либо в состояние «01», либо в состояние «11». Можно видеть, что не все переходы возможны для (например, декодер не может преобразовать из состояния «10» в «00» или даже остаться в состоянии «10»).
Все возможные переходы можно показать, как показано ниже:
Фактическая закодированная последовательность может быть представлена как путь на этом графике. Один допустимый путь показан красным в качестве примера.
Эта диаграмма дает нам представление о декодировании : если полученная последовательность не соответствует этому графику, значит, она была получена с ошибками, и мы должны выбрать ближайшую правильную (подходящую к графику) последовательность. Настоящие алгоритмы декодирования используют эту идею.
Свободное расстояние и распределение ошибок
Поскольку сверточный код не использует блоки, а обрабатывает непрерывный поток битов, значение t применяется к количеству ошибок, расположенных относительно близко друг к другу. То есть несколько групп t ошибок обычно могут быть исправлены, когда они относительно далеко друг от друга.
Свободное расстояние можно интерпретировать как минимальную длину ошибочного «пакета» на выходе сверточного декодера. Тот факт, что ошибки появляются в виде «пакетов», следует учитывать при разработке конкатенированного кода с внутренним сверточным кодом. Популярным решением этой проблемы является чередование данных перед сверточным кодированием, чтобы внешний блочный код (обычно код Рида – Соломона ) мог исправить большую часть ошибок.
Декодирование сверточных кодов
Документация
Создайте сверточный код из двоичных данных
Библиотека
Сверточная подбиблиотека Выявления ошибок и Исправления
Описание
Блок Convolutional Encoder кодирует последовательность векторов двоичного входа, чтобы произвести последовательность векторов двоичного выхода. Этот блок может обработать несколько символов за один раз.
Этот блок может принять входные параметры, которые отличаются по длине во время симуляции. Для получения дополнительной информации о сигналах переменного размера, смотрите Основы Сигнала Переменного Размера (Simulink).
Размеры ввода и вывода
Определение энкодера
Если у вас есть переменная в рабочем пространстве MATLAB, которое содержит структуру решетки, введите ее имя в параметре Trellis structure. Этот путь предпочтителен, потому что он заставляет Simulink ® проводить меньше времени, обновляя схему в начале каждой симуляции, по сравнению с использованием, описанным затем.
Если вы хотите задать энкодер с помощью его продолжительности ограничения, полиномы генератора, и возможно полиномы связи обратной связи, используют команду poly2trellis в параметре Trellis structure. Например, чтобы использовать энкодер с продолжительностью ограничения 7, полиномы генератора кода 171 и 133 (в восьмеричных числах), и связь обратной связи 171 (в восьмеричном), устанавливают параметр Trellis structure на
Параметры
Структура MATLAB, которая содержит описание решетки сверточного энкодера.
В режиме Continuous блок сохраняет состояния энкодера в конце каждого входа для использования со следующим кадром.
В режиме Truncated (reset every frame) блок обрабатывает каждый вход независимо. Состояния энкодера сбрасываются ко все-нулевому состоянию в начале каждого входа.
Примечание
Примечание
Delay reset action to next time step
Задержка действия сброса позволяет блоку поддерживать генерацию HDL-кода. В порядке сгенерировать HDL-код, у вас должна быть лицензия HDL Coder™.
Output final state
Specify initial state via input port
Выбор этой опции открывает поле Puncture vector.
Вектор раньше прокалывал закодированные данные. Вектор прокола является шаблоном 1 s и 0 s, где 0 s указывает на проколотые биты. Это поле появляется, когда вы выбираете Punctured code.
Проколите примеры шаблона
Для некоторых обычно используемых шаблонов прокола для определенных уровней и полиномов, смотрите последние три ссылки, перечисленные на этой странице.
Смотрите также
Ссылки
[1] Кларк, Джордж К. Младший и J. Затвор Каин, кодирование с коррекцией ошибок для цифровой связи, Нью-Йорка, нажатия пленума, 1981.
[2] Gitlin, Ричард Д., Иеремия Ф. Хейз, и Стивен Б. Вайнштейн, Дэта-Коммуникэйшнс-Принкиплс, Нью-Йорк, пленум, 1992.
[3] Yasuda, Y., и. al., “Высокий показатель проколол сверточные коды для мягкого решения декодирование Viterbi”, Транзакции IEEE на Коммуникациях, Издании COM-32, № 3, стр 315–319, март 1984.
[4] Haccoun, D., и Начинаются, G., “Высокий показатель проколол сверточные коды для декодирования Viterbi и Sequential”, Транзакции IEEE на Коммуникациях, Издании 37, № 11, стр 1113–1125, ноябрь 1989.
[5] Начните, G., et.al., “Дальнейшие результаты на высоком показателе прокололи сверточные коды для Viterbi и последовательного декодирования”, Транзакции IEEE на Коммуникациях, Издании 38, № 11, стр 1922–1928, ноябрь 1990.
Расширенные возможности
Генерация кода C/C++
Генерация кода C и C++ с помощью Simulink® Coder™.
Генерация HDL-кода
Сгенерируйте Verilog и код VHDL для FPGA и проекты ASIC с помощью HDL Coder™.
Этот блок поддерживает генерацию HDL-кода с помощью HDL Coder. HDL Coder обеспечивает дополнительные параметры конфигурации, которые влияют на реализацию HDL и синтезируемую логику. Для получения дополнительной информации о реализациях свойства и ограничения для генерации HDL-кода, видят Сверточный Энкодер в документации HDL Coder.
Свёрточный код
(a) на каждом такте работы кодера символов входной полубесконечной последовательности преобразуются в
k» border=»0″ /> символов выходной, и
(b) в преобразовании также участвуют предыдущих символов;
(c) выполняется свойство линейности (если двум кодируемым последовательностям и
соответствуют кодовые последовательности
и
, то кодируемой последовательности
соответствует
).
Свёрточный код является частным случаем древовидных и решетчатых кодов.
Содержание
История возникновения
В 1955 году Л. М. Финком, который в то время являлся заведующим кафедрой Ленинградской академии связи, был предложен первый рекуррентный код.
В 1959 году западный специалист Хегельбергер (Hegelbeger), не имевший представления о работе советских ученых в области кодирования, «вновь открыл» рекуррентный код и назвал его своим именем.
Сам Финк в своей монографии «Теория передачи дискретных сообщений» писал: «В этом коде последовательность кодовых символов не разделяется на отдельные кодовые комбинации. В поток информационных символов включаются корректирующие символы так, что между каждыми двумя информационными символами помещается один корректирующий. Обозначая информационные символы через ai, а корректирущие через bi получаем такую последовательность символов:
Информационные символы определяются переданным сообщением, а корректирующие формируются по следующему правилу:
где s — произвольное целое число, называемое шагом кода (s = 0,1,2…). Очевидно, что при ошибочном приеме некоторого корректирующего символа bi соотношение (1.1) в принятой последовательности не будет выполнено для i = k. В случае же ошибочного приема информационного символа ai соотношение (1.1) не будет выполняться при двух значениях ki, а именно при k1 = i — s — 1 и при k2 = i + s. Отсюда легко вывести правило исправления ошибок при декодировании. В принятой кодовой последовательности для каждого bk проверяется соотношение (1.1). Если оно не выполняется при двух значениях k (k = k1 и k = k2), и при этом
то информационный элемент ak1+s+1 должен быть заменен на противоположный.
Общая схема нерекурсивного кодера
Схема кодера нерекурсивного свёрточного кода представлена на Рис.1. Он состоит из -ичных регистров сдвига с длинами
. Некоторые (может и все) входы регистров и выходы некоторых ячеек памяти соединены с несколькими
сумматорами по модулю
. Число сумматоров больше числа регистров сдвига:
k» border=»0″ />
На каждом такте работы кодера на его вход поступает информационных символов, они вместе с хранящимися в регистрах сдвига символами поступают на входы тех сумматоров, с которыми имеется связь. Результатом сложения является
кодовых символов, готовых к передаче. Затем в каждом регистре сдвига происходит сдвиг: все ячейки сдвигаются вправо на один разряд, при этом крайние левые ячейки заполняются входными символами, а крайние правые стираются. После этого такт повторяется. Начальное состояние регистров заранее известно (обычно нулевое).
Двоичные свёрточные кодеры
Для наглядности представления будем описывать свёрточное кодирование по действию соответствующего кодирующего устройства.
Свёрточный кодер — это устройство, принимающее на каждом такте работы в общем случае k входных информационных символов, и выдающее на выход каждого такта n выходных символов. Число называют относительной скоростью кода. k — число информационных символов, n — число передаваемых в канал связи символов за один такт поступления на кодер информационного символа. Выходные символы рассматриваемого такта зависят от m информационных символов, поступающих на этом и предыдущих тактах, то есть выходные символы свёрточного кода однозначно определяются его входными символами и состоянием, которое зависит от m — k предыдущих информационных символов. Основными элементами свёрточного кода являются: регистр сдвига, сумматор по модулю 2, коммутатор.
Регистр сдвига (англ. Shift register ) — это динамическое запоминающее устройство, хранящее двоичные символы 0 и 1. Память кода определяет число триггерных ячеек m в регистре сдвига. Когда на вход регистра сдвига поступает новый информационный символ, то символ, хранящийся в крайнем правом разряде, выводится из регистра и сбрасывается. Остальные символы перемещаются на один разряд вправо и, таким образом, освобождается крайний левый разряд куда будет поступать новый информационный символ.
Сумматор по модулю 2 осуществляет сложение поступающих на него символов 1 и 0. Правило сложения по модулю 2 таково: сумма двоичных символов равна 0, если число единиц среди поступающих на входы символов четно, и равно 1, если это число нечетно.
Коммутатор последовательно считывает поступающие на его входы символы и устанавливает на выходе очередность кодовых символов в канал связи. По аналогии с блоковыми кодами, свёрточные коды можно классифицировать на систематические и несистематические.
Систематический свёрточный код — это код, содержащий в своей выходной последовательности кодовых символов породившую её последовательность информационных символов. Иначе код называют несистематическим.
Параметры и характеристики свёрточных кодов
При свёрточном кодировании преобразование информационных последовательностей в выходные и кодовые происходит непрерывно. Кодер двоичного свёрточного кода содержит сдвигающий регистр из m разрядов и сумматоры по модулю 2 для образования кодовых символов в выходной последовательности. Входы сумматоров соединены с определёнными разрядами регистра. Коммутатор на выходе устанавливает очередность посылки кодовых символов в канал связи. Тогда структуру кода определяют нижеследующие характеристики.
1. Число информационных символов, поступающих за один такт на вход кодера — k.
2. Число символов на выходе кодера — n, соответствующих k, поступившим на вход символам в течение такта.
3. Скорость кода определяется отношением R=k/n и характеризует избыточность, вводимую при кодировании.
4. Избыточность кода
5. Память кода (входная длина кодового ограничения или информационная длина кодового слова), определяется максимально степенью порождающего многочлена в составе порождающей матрицы G(X):
6. Маркировка сверточного кода обозначается в большинстве случаев (n, k, l), но возможны и вариации.
7. Вес w двоичных кодовых последовательностей определяется числом «единиц», входящих в эту последовательность или кодовые слова.
8. Кодовое расстояние показывает степень различия между i-й и j-й кодовыми комбинациями при условии их одинаковой длины. Для любых двух двоичных кодовых комбинаций кодовое расстояние равно числу несовпадающих в них символов. В общем виде кодовое расстояние может быть определено как суммарный результат сложения по модулю 2 одноименных разрядов кодовых комбинаций
, где
и
— k-е символы кодовых комбинаций i и j; L- длина кодовой комбинации.
9. Минимальное кодовое расстояние — это наименьшее расстояние Хемминга для набора кодовых комбинаций постоянной длины. Для его нахождения необходимо перебрать все возможные пары кодовых комбинаций. Тогда получаем
. Но! Это определение справедливо для блочных кодов имеющих постоянную длину. Сверточные коды являются непрерывными и характерризуются многими минимальными расстояниями, определяемыми длинами начальных сегментов кодовых последовательностей, между которыми берется минимальное расстояние. Число символов в принятой для обработки длине сегменты L определяет на приемной стороне число ячеек в декодирующем устройстве.
Общий вид двоичного сверточного кодера
Пусть регистр сдвига содержит m ячеек, то есть память кода равна m, коммутатор производит один цикл опроса, проходя значения информационных символов, где m кратно k, при этом за один цикл он опрашивает n
2 выходов кодера. Количество выходных кодовых символов, на которое оказывает влияние изменение одного входного информационного символа равно
. Величина Iall называется полной длинной кодового ограничения.
Поскольку корректирующие свойства конкретного сверточного кода определяются длиной кодового ограничения и выбором связей сдвигающего регистра на сумматор по модулю 2 (XOR), то для задания структуры сверточного кодера необходимо указать какие разряды регистра сдвига связаны с каждым из сумматоров по модулю 2 (XOR).
Связь j-го сумматора по модулю 2 описывается j-ой порождающей последовательностью:
где (4.2)
Типичные параметры сверточных кодов: k, n= 1,2,…,8; R=k/n=1/4,…,7/8; m=2,…,10.
Способ задания сверточных кодов
Сверточный код удобно задавать с помощью порождающих многочленов, которые определяются видом формулы (4.1) по аналогии с тем, как это осуществляется для линейных блоковых циклических кодов.
Подробную информацию о циклических кодах читатель сможет найти в учебном пособии Сагаловича Ю. Л. «Введение в алгебраические коды» [1] в главах 4 и 5.
Порождающий многочлен полностью определяет структуру двоичного кодера сверточного кода. В отличие от блоковых кодов, каждый из которых описывается лишь одним порождающим многочленом, сверточный код описывается несколькими порождающими многочленами. Количество многочленов, которыми описывается сверточный код определяется количеством выходных символов n. Представим последовательность информационных символов, поступающих на вход кодера в виде многочлена: , где X i — символ оператора задержки на i тактов работы сдвигающего регистра, ai = <0,1>— информационные двоичные символы. Многочлены, описывающие n последовательностей кодовых символов, поступающих на вход коммутатора кодера а затем в канал связи, имеют вид:
, где
двоичные кодовые символы на j-ом входе коммутатора кодера.
j-й порождающий многочлен сверточного кода имеет вид: , где
двоичные коэффициенты, равные 1, если i-я ячейка сдвигающего регистра через схему суммирования связана с j-ым коммутатором кодера, и равны 0 в противном случае. Причем, в силу линейности сверточного кода и принятых обозначений получаем:
.
Используя представление сверточного кода с помощью порождающих многочленов, можно задавать сверточный код посредством последовательностей коэффициентов производящих многочленов, записанных в двоичной или восьмеричной форме. Запись в восьмеричной форме более компактная и используется при большой длине сдвигающего регистра кодера.
В общем случае последовательность коэффициентов j-ого производящего многочлена будет иметь вид и совпадает с порождающей последовательностью кода (4.1). Тогда, если
— последовательность кодируемых символов, а
— последовательность кодовых символов на j-ом входе коммутатора кодера, то для любого из них, появляющегося в
-й момент времени (
), можно записать:
Таким образом, каждый кодовый символ выходной последовательности кодера сверточного кода определяется сверткой кодируемой информационной и порождающей последовательности, что и обуславливает название сверточных кодов. Сверточные коды являются частным случаем итеративных или рекуррентных кодов. При рекурентном кодировании разбиение кодируемой последовательности информационных символов на блоки не производится, а кодовые символы вычисляются.
Применение
Сверточные коды используются для надежной передачи данных: видео, мобильной связи, спутниковой связи. Они используются вместе с кодом Рида — Соломона и другими кодами подобного типа. До изобретения турбо-кодов такие конструкции были наиболее действенными и удовлетворяли пределу Шеннона. Так же свёрточное кодирование используется в протоколе 802.11a на физическом MAC-уровне для достижения равномерного распределения 0 и 1 после прохождения сигнала через скремблер, вследствие чего количество передаваемых символов увеличивается в два раза и, следовательно, мы можем добиться благоприятного приема на принимающем устройстве.