Эта статья требует дополнительных ссылок для проверки . ( май 2015 г. ) ( Узнайте, как и когда удалить это сообщение-шаблон ) |
В связи , сверточный код представляет собой тип коррекции ошибок коды , который генерирует символы четности с помощью скользящего применения булевой полиномиальной функции к потоку данных. Скользящее приложение представляет собой «свертку» кодировщика над данными, что дает начало термину «сверточное кодирование». Скользящий характер сверточных кодов облегчает решетчатое декодирование с использованием неизменяемой во времени решетчатой диаграммы. Не зависящее от времени решетчатое декодирование позволяет сверточным кодам декодироваться с мягким решением максимального правдоподобия с разумной сложностью.
Возможность выполнять экономичное декодирование с мягким решением с максимальным правдоподобием является одним из основных преимуществ сверточных кодов. Это контрастирует с классическими блочными кодами, которые обычно представлены изменяющейся во времени решеткой и поэтому обычно декодируются с жестким решением. Сверточные коды часто характеризуются базовой кодовой скоростью и глубиной (или памятью) кодера . Базовая кодовая скорость обычно задается как , где - скорость исходных входных данных, а - скорость передачи данных закодированного потока выходного канала. меньше, чем потому, что канальное кодирование добавляет избыточность во входные биты. Память часто называют «ограничивающей длиной» , где вывод является функцией текущего ввода, а также предыдущего.входы. Глубина также может быть задана как количество элементов памяти в полиноме или максимально возможное количество состояний кодировщика (обычно:) .
Сверточные коды часто называют непрерывными. Однако можно также сказать, что сверточные коды имеют произвольную длину блока, а не являются непрерывными, поскольку в большинстве случаев сверточное кодирование в реальном мире выполняется на блоках данных. Сверточно-кодированные блочные коды обычно используют завершение. Произвольную длину блока сверточных кодов можно также противопоставить классическим блочным кодам , которые обычно имеют фиксированную длину блока, которая определяется алгебраическими свойствами.
Кодовая скорость сверточного кода обычно изменяется посредством выкалывания символов . Например, сверточный код с «материнской» кодовой скоростью может быть проколот до более высокой скорости, например, просто не передавая часть кодовых символов. Производительность сверточного кода с проколами обычно хорошо масштабируется в зависимости от передаваемой четности. Возможность выполнять экономичное декодирование с мягким решением для сверточных кодов, а также гибкость длины блока и кодовой скорости сверточных кодов делают их очень популярными для цифровой связи.
История [ править ]
Сверточные коды были введены в 1955 году Питером Элиасом . Считалось, что сверточные коды можно декодировать с произвольным качеством за счет вычислений и задержки. В 1967 году Эндрю Витерби определил, что сверточные коды могут быть декодированы с максимальной вероятностью с разумной сложностью с использованием инвариантных во времени решетчатых декодеров - алгоритма Витерби . Позже были разработаны другие алгоритмы декодирования на основе решеток , включая алгоритм декодирования BCJR .
Рекурсивные систематические сверточные коды были изобретены Клодом Берроу примерно в 1991 году. Эти коды оказались особенно полезными для итеративной обработки, включая обработку конкатенированных кодов, таких как турбокоды . [1]
Используя "сверточную" терминологию, классический сверточный код можно рассматривать как фильтр с конечной импульсной характеристикой (FIR), а рекурсивный сверточный код можно рассматривать как фильтр с бесконечной импульсной характеристикой (IIR).
Где используются сверточные коды [ править ]
Сверточные коды широко используются для обеспечения надежной передачи данных во многих приложениях, таких как цифровое видео , радио, мобильная связь (например, в сетях GSM, GPRS, EDGE и 3G (до 3GPP Release 7) [3] [4] ) и в спутниковой. коммуникации . [5] Эти коды часто реализуются в сочетании с кодом жесткого решения, особенно кодом Рида – Соломона . До появления турбокодов такие конструкции были наиболее эффективными, приближаясь к пределу Шеннона .
Сверточное кодирование [ править ]
Для сверточного кодирования данных начните с k регистров памяти , каждый из которых содержит один входной бит. Если не указано иное, все регистры памяти начинаются с значением 0. Кодер имеет п по модулю 2 сумматоров ( по модулю 2 сумматор может быть реализован с помощью одного булева XOR ворот , где логика: 0 + 0 = 0 , 0+ 1 = 1 , 1 + 0 = 1 , 1 + 1 = 0 ) и n образующих полиномов - по одному на каждый сумматор (см. Рисунок ниже). Входной бит m 1подается в крайний левый регистр. Используя полиномы генератора и существующие значения в оставшихся регистрах, кодер выводит n символов. Эти символы могут быть переданы или проколоты в зависимости от желаемой кодовой скорости. Теперь сдвиньте все значения регистров вправо ( m 1 переместится в m 0 , m 0 переместится в m -1 ) и дождитесь следующего входного бита. Если нет оставшихся входных битов, кодировщик продолжает сдвиг, пока все регистры не вернутся в нулевое состояние (завершение битов сброса).
На рисунке ниже скорость 1 / 3 ( м / п ) кодер с длиной кодового ограничения ( K ) из 3. порождающих полиномов являются G 1 = (1,1,1), G 2 = (0,1,1) , и G 3 = (1,0,1) . Следовательно, выходные биты вычисляются (по модулю 2) следующим образом:
- п 1 = м 1 + м 0 + м -1
- п 2 = м 0 + м -1
- п 3 = м 1 + м -1 .
Сверточные коды могут быть систематическими и несистематическими:
- систематически повторяет структуру сообщения перед кодированием
- несистематические изменения исходной структуры
Несистематические сверточные коды более популярны из-за лучшей помехоустойчивости. Это относится к свободному расстоянию сверточного кода. [6]
Краткая иллюстрация несистематического сверточного кода.
Краткая иллюстрация систематического сверточного кода.
Рекурсивные и нерекурсивные коды [ править ]
Кодировщик на картинке выше - нерекурсивный кодировщик. Вот пример рекурсивного, и поэтому он допускает структуру обратной связи:
Пример кодировщика является систематическим, потому что входные данные также используются в выходных символах (Выход 2). Коды с выходными символами, не включающими входные данные, называются несистематическими.
Рекурсивные коды обычно являются систематическими, и, наоборот, нерекурсивные коды обычно несистематичны. Это не строгое требование, а обычная практика.
Пример кодировщика в Img. 2. кодер с 8 состояниями, потому что 3 регистра будут создавать 8 возможных состояний кодера (2 3 ). Соответствующая решетка декодера обычно также использует 8 состояний.
Рекурсивные систематические сверточные коды (RSC) стали более популярными из-за их использования в турбо-кодах. Рекурсивные систематические коды также называются псевдосистематическими кодами.
Другие коды RSC и примеры приложений включают:
Полезно для реализации кода LDPC и в качестве внутреннего составляющего кода для последовательных конкатенированных сверточных кодов (SCCC).
Полезно для SCCC и многомерных турбокодов.
Полезен в качестве составляющего кода в турбокодах с низким коэффициентом ошибок для таких приложений, как спутниковые каналы. Также подходит как внешний код SCCC.
Импульсная характеристика, передаточная функция и длина ограничения [ править ]
Сверточный кодировщик называется так, потому что он выполняет свертку входного потока с импульсными характеристиками кодировщика :
где x - входная последовательность, y j - последовательность из выхода j , h j - импульсная характеристика для выхода j и обозначает свертку.
Сверточный кодировщик - это дискретная линейная инвариантная во времени система . Каждый выход энкодера может быть описан его собственной передаточной функцией , которая тесно связана с полиномом генератора. Импульсный отклик связан с передаточной функцией через Z-преобразование .
Передаточные функции для первого (нерекурсивного) кодировщика:
Передаточными функциями для второго (рекурсивного) кодировщика являются:
Определить m по
где для любой рациональной функции ,
- .
Тогда т является максимальным из полиномиальных степеней из , а ограничение длина определяются как . Например, в первом примере длина ограничения равна 3, а во втором - 4.
Диаграмма решетки [ править ]
Сверточный кодировщик - это конечный автомат . Кодер с n двоичными ячейками будет иметь 2 n состояний.
Представьте, что кодировщик (показанный на Рисунке 1 выше) имеет «1» в левой ячейке памяти ( m 0 ) и «0» в правой ( m -1 ). ( m 1 на самом деле не является ячейкой памяти, поскольку представляет текущее значение). Обозначим такое состояние цифрой «10». В соответствии с входным битом кодер на следующем повороте может преобразовать либо в состояние «01», либо в состояние «11». Можно видеть, что не все переходы возможны для (например, декодер не может преобразовать из состояния «10» в «00» или даже остаться в состоянии «10»).
Все возможные переходы можно показать, как показано ниже:
Фактическая закодированная последовательность может быть представлена как путь на этом графике. Один допустимый путь показан красным в качестве примера.
Эта диаграмма дает нам представление о декодировании : если полученная последовательность не соответствует этому графику, значит, она была получена с ошибками, и мы должны выбрать ближайшую правильную (подходящую к графику) последовательность. Настоящие алгоритмы декодирования используют эту идею.
Свободное расстояние и распределение ошибок [ править ]
Свободное расстояние [7] ( д ) есть минимальное расстояние Хемминг между различными закодированными последовательностями. Коррекции способности ( т ) сверточного кода является число ошибок , которые могут быть исправлены с помощью кода. Его можно рассчитать как
Поскольку сверточный код не использует блоки, а обрабатывает непрерывный поток битов, значение t применяется к количеству ошибок, расположенных относительно близко друг к другу. То есть несколько групп t ошибок обычно могут быть исправлены, когда они относительно далеко друг от друга.
Свободное расстояние можно интерпретировать как минимальную длину ошибочного «пакета» на выходе сверточного декодера. Тот факт, что ошибки появляются в виде «пакетов», следует учитывать при разработке конкатенированного кода с внутренним сверточным кодом. Популярным решением этой проблемы является чередование данных перед сверточным кодированием, чтобы внешний блочный код (обычно код Рида – Соломона ) мог исправить большую часть ошибок.
Декодирование сверточных кодов [ править ]
Существует несколько алгоритмов декодирования сверточных кодов. При относительно малых значений к , то алгоритм Витерби повсеместно используются , поскольку она обеспечивает максимальное правдоподобие производительность и высокий параллелизуемая. Таким образом, декодеры Витерби легко реализовать в аппаратном обеспечении СБИС и в программном обеспечении ЦП с наборами инструкций SIMD .
Коды с большей длиной ограничения более практично декодируются с помощью любого из нескольких алгоритмов последовательного декодирования , из которых наиболее известен алгоритм Фано . В отличие от декодирования Витерби, последовательное декодирование не является максимальным правдоподобием, но его сложность лишь незначительно увеличивается с увеличением длины ограничения, что позволяет использовать строгие коды с большой длиной ограничения. Такие коды использовались в программе Pioneer в начале 1970-х годов для Юпитера и Сатурна, но уступили место более коротким кодам, декодированным по Витерби, обычно объединенным с большими кодами исправления ошибок Рида-Соломона, которые сужают общую кривую коэффициента ошибок по битам и дают чрезвычайно низкий уровень остаточных необнаруженных ошибок.
И алгоритм Витерби, и алгоритм последовательного декодирования возвращают трудные решения: биты, которые образуют наиболее вероятное кодовое слово. Приблизительную меру достоверности можно добавить к каждому биту с помощью алгоритма Витерби с мягким выходом . Максимальные апостериорные мягкие решения (MAP) для каждого бита могут быть получены с помощью алгоритма BCJR .
Популярные сверточные коды [ править ]
Фактически в промышленности используются заранее заданные структуры сверточных кодов, полученные в ходе научных исследований. Это связано с возможностью выбора катастрофических сверточных кодов (вызывает большее количество ошибок).
Особенно популярный сверточный код, декодированный по Витерби, используемый, по крайней мере, с тех пор, как программа Voyager имеет длину ограничения 7 и скорость r 1/2. [12]
Mars Pathfinder , Mars Exploration Rover и зонд Cassini на Сатурн используют 15 баллов и скорость 1/6; этот код работает примерно на 2 дБ лучше, чем более простой код, при стоимости декодирования в 256 раз (по сравнению с кодами миссии Voyager).
Сверточный код с длиной ограничения 2 и скоростью 1/2 используется в GSM как метод исправления ошибок. [13]
Проколотые сверточные коды [ править ]
Сверточный код с любой скоростью кода может быть разработан на основе полиномиального выбора; [15] однако на практике часто используется процедура исключения для достижения требуемой кодовой скорости. Прокалывание - это метод, используемый для создания кода скорости m / n из «базового» кода с низкой скоростью (например, 1 / n ). Это достигается удалением некоторых битов на выходе кодировщика. Биты удаляются согласно матрице выкалывания . Наиболее часто используются следующие матрицы прокалывания:
Кодовая скорость | Матрица прокалывания | Свободное расстояние (для стандартного сверточного кода НАСА K = 7) | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1/2 (без перфорации) |
| 10 | ||||||||||||||
2/3 |
| 6 | ||||||||||||||
3/4 |
| 5 | ||||||||||||||
5/6 |
| 4 | ||||||||||||||
7/8 |
| 3 |
Например, если мы хотим создать код со скоростью 2/3, используя соответствующую матрицу из приведенной выше таблицы, мы должны взять базовый вывод кодера и передать каждый первый бит из первой ветви и каждый бит из второй. Конкретный порядок передачи определяется соответствующим стандартом связи.
Проколотые сверточные коды широко используются в спутниковой связи , например, в системах ИНТЕЛСАТ и цифрового видеовещания .
Проколотые сверточные коды также называют «перфорированными».
Турбокоды: замена сверточных кодов [ править ]
Простые сверточные коды, декодированные по Витерби, теперь уступают место турбокодам , новому классу повторных коротких сверточных кодов, которые близко подходят к теоретическим ограничениям, налагаемым теоремой Шеннона, с гораздо меньшей сложностью декодирования, чем алгоритм Витерби для длинных сверточных кодов, которые потребуются. за такую же производительность. Конкатенация с внешним алгебраическим кодом (например, кодом Рида – Соломона ) решает проблему минимальных уровней ошибок, присущих конструкциям турбокодов.
См. Также [ править ]
- Квантовый сверточный код
Ссылки [ править ]
- Эта статья включает материалы, являющиеся общественным достоянием, из документа Управления общих служб : «Федеральный стандарт 1037C» .
- ↑ Бенедетто, Серджио и Гвидо Монторси. « Роль рекурсивных сверточных кодов в турбокодах ». Electronics Letters 31.11 (1995): 858-859.
- ^ Eberspächer J. et al. GSM-архитектура, протоколы и сервисы. - John Wiley & Sons, 2008. - стр.97.
- ^ Проект партнерства третьего поколения (сентябрь 2012 г.). «3GGP TS45.001: Группа технических спецификаций Сеть радиодоступа GSM / EDGE; Физический уровень на радиотракте; Общее описание». Проверено 20 июля 2013.
- ^ Халонен, Тимо, Хавьер Ромеро и Хуан Мелеро, ред. Характеристики GSM, GPRS и EDGE: эволюция в сторону 3G / UMTS. John Wiley & Sons, 2004. - с. 430
- ^ Бутман, С. А., Л. Дж. Дойч и Р. Л. Миллер. «Производительность составных кодов для миссий в дальний космос». Отчет о ходе работы по телекоммуникациям и сбору данных 42-63, март – апрель 1981 (1981): 33-39.
- ^ Мун, Тодд К. "Кодирование с исправлением ошибок". Математические методы и алгоритмы. Джон Уайли и сын (2005). - п. 508
- ^ Мун, Тодд К. " Кодирование с исправлением ошибок ". Математические методы и алгоритмы. Джон Вили и сын (2005). - с.508.
- ^ LLR против демодуляции жесткого решения (MathWorks)
- ^ Оценка BER для жесткого и мягкого решения декодирования Витерби (MathWorks)
- ^ Цифровая модуляция: точный алгоритм LLR (MathWorks)
- ^ Цифровая модуляция: приблизительный алгоритм LLR (MathWorks)
- ^ Бутман, С. А., Л. Дж. Дойч и Р. Л. Миллер. «Производительность составных кодов для миссий в дальний космос». Отчет о ходе работы по телекоммуникациям и сбору данных 42-63, март – апрель 1981 (1981): 33-39.
- ^ Глобальная система мобильной связи (GSM)
- ^ Проколотое сверточное кодирование (MathWorks)
- ^ https://www.mathworks.com/help/comm/ref/poly2trellis.html
- ^ Турбо-код
- ↑ Бенедетто, Серджио и Гвидо Монторси. « Роль рекурсивных сверточных кодов в турбокодах ». Electronics Letters 31.11 (1995): 858-859.
Внешние ссылки [ править ]
- Он-лайн учебник: Теория информации, логический вывод и алгоритмы обучения , написанный Дэвидом Дж. К. Маккеем , обсуждает сверточные коды в главе 48.
- Страница кодов исправления ошибок (ECC)
- Объяснения Matlab
- Основы сверточных декодеров для улучшения цифровой связи
- Сверточные коды (MIT)
- Теория информации и кодирование (TU Ilmenau) обсуждает сверточные коды на странице 48.
Дальнейшее чтение [ править ]
Публикации [ править ]
- Фрэнсис, Майкл. «Декодирование блока Витерби - завершение решетки и оконечный бит». Xilinx XAPP551 v2. 0, DD (2005): 1-21.
- Чен, Цинчунь, Вай Хо Моу и Пинчжи Фань. «Некоторые новые результаты по рекурсивным сверточным кодам и их приложениям». Семинар по теории информации, 2006. ITW'06 Chengdu. IEEE. IEEE, 2006 г.
- Фибиг, Калифорния, и Патрик Робертсон. «Мягкое решение и декодирование со стиранием в системах с быстрой скачкообразной перестройкой частоты со сверточными кодами, турбокодами и кодами Рида-Соломона». IEEE Transactions on Communications 47.11 (1999): 1646-1654.
- Бхаскар, Видхьячаран и Лори Л. Джойнер. «Характеристики проколотых сверточных кодов при асинхронной связи CDMA в условиях идеального отслеживания фазы». Компьютеры и электротехника 30,8 (2004): 573-592.
- Модестино Дж. И Шоу Муи. «Производительность сверточного кода в канале с замираниями Rician». IEEE Transactions on Communications 24.6 (1976): 592-606.
- Чен, Ю-Лонг и Че-Хо Вэй. «Оценка производительности сверточных кодов с MPSK на каналах с замираниями Rician». IEE Proceedings F-Communications, Radar and Signal Processing. Vol. 134. №2. ИЭПП, 1987.