В теории кодирования каскадные коды образуют класс кодов с исправлением ошибок , которые получаются путем объединения внутреннего кода и внешнего кода . Они были задуманы в 1966 году Дэйвом Форни как решение проблемы поиска кода, который имеет как экспоненциально убывающую вероятность ошибки с увеличением длины блока, так и полиномиальную сложность декодирования . [1] Каскадные коды стали широко использоваться в космической связи в 1970-х годах.
Область канального кодирования занимается отправкой потока данных с максимально возможной скоростью по заданному каналу связи , а затем надежным декодированием исходных данных на приемнике с использованием алгоритмов кодирования и декодирования, которые возможно реализовать в рамках заданной технологии.
Теорема Шеннона о кодировании каналов показывает, что для многих общих каналов существуют схемы кодирования каналов, которые способны надежно передавать данные на всех скоростях, меньших определенного порога , называемого пропускной способностью канала данного канала. Фактически, вероятность ошибки декодирования можно уменьшить экспоненциально по мере того, как длина блока схемы кодирования стремится к бесконечности. Однако сложность наивной оптимальной схемы декодирования, которая просто вычисляет вероятность каждого возможного переданного кодового слова, экспоненциально возрастает с , поэтому такой оптимальный декодер быстро становится неосуществимым.
В своей докторской диссертации Дэйв Форни показал, что каскадные коды можно использовать для достижения экспоненциально уменьшающейся вероятности ошибок при всех скоростях передачи данных, меньших пропускной способности, при этом сложность декодирования увеличивается только полиномиально с длиной блока кода.
Пусть C in будет кодом [ n , k , d ], то есть блочным кодом длины n , размерности k , минимального расстояния Хэмминга d и скорости r = k / n над алфавитом A :
Пусть C out будет кодом [ N , K , D ] над алфавитом B с | B | = | A | k символами:
Внутренний код C in принимает один из | A | k = | B | возможных входов, кодирует в n -кортеж над A , передает и декодирует в один из | B | возможных выходов. Мы рассматриваем это как (супер)канал, который может передавать один символ из алфавита B . Мы используем этот канал N раз для передачи каждого из N символов в кодовом слове C out . Конкатенация C out (как внешнего кода) с C in (как внутреннего кода), обозначаемая C out ∘ C in , является, таким образом, кодом длины Nn над алфавитом A : [1]
Он сопоставляет каждое входное сообщение m = ( m 1 , m 2 , ..., m K ) с кодовым словом ( C in ( m ' 1 ), C in ( m ' 2 ), ..., C in ( m ' N )), где ( m ' 1 , m ' 2 , ..., m ' N ) = C out ( m 1 , m 2 , ..., m K ).
Ключевым моментом в этом подходе является то, что если C in декодируется с использованием подхода максимального правдоподобия (тем самым показывая экспоненциально убывающую вероятность ошибки с увеличением длины), а C out — это код длиной N = 2 nr , который может быть декодирован за полиномиальное время N , то каскадный код может быть декодирован за полиномиальное время его объединенной длины n 2 nr = O ( N ⋅log( N )) и показывает экспоненциально убывающую вероятность ошибки, даже если C in имеет экспоненциальную сложность декодирования. [1] Это обсуждается более подробно в разделе Декодирование каскадных кодов.
В обобщении вышеприведенной конкатенации существует N возможных внутренних кодов C in , i и i -й символ в кодовом слове C out передается по внутреннему каналу с использованием i -го внутреннего кода. Коды Юстесена являются примерами обобщенных конкатенированных кодов, где внешний код является кодом Рида–Соломона .
1. Расстояние каскадного кода C out ∘ C in не менее dD , то есть это код [ nN , kK , D '] с D ' ≥ dD .
Доказательство: Рассмотрим два различных сообщения m 1 ≠ m 2 ∈ B K . Пусть Δ обозначает расстояние между двумя кодовыми словами. Тогда
Таким образом, существует по крайней мере D позиций, в которых последовательность N символов кодовых слов C out ( m 1 ) и C out ( m 2 ) различается. Для этих позиций, обозначенных i , мы имеем
Следовательно, в последовательности из n ⋅ N символов, взятых из алфавита A, имеется не менее d ⋅ D позиций , в которых два кодовых слова различаются, и, следовательно,
2. Если C out и C in являются линейными блочными кодами , то C out ∘ C in также является линейным блочным кодом.
Это свойство можно легко продемонстрировать на основе идеи определения матрицы-генератора для конкатенированного кода в терминах матриц-генераторов C out и C in .
Естественная концепция алгоритма декодирования для конкатенированных кодов заключается в том, чтобы сначала декодировать внутренний код, а затем внешний код. Чтобы алгоритм был практичным, он должен быть полиномиальным по длине конечного блока. Предположим, что существует уникальный алгоритм декодирования для внешнего кода с полиномиальным временем. Теперь нам нужно найти алгоритм декодирования для внутреннего кода с полиномиальным временем. Понятно, что полиномиальное время выполнения здесь означает, что время выполнения полиномиально по длине конечного блока. Основная идея заключается в том, что если длина внутреннего блока выбрана логарифмической по размеру внешнего кода, то алгоритм декодирования для внутреннего кода может работать за экспоненциальное время длины внутреннего блока, и, таким образом, мы можем использовать экспоненциальный, но оптимальный декодер максимального правдоподобия (MLD) для внутреннего кода.
Подробно, пусть входом для декодера будет вектор y = ( y 1 , ..., y N ) ∈ ( A n ) N . Тогда алгоритм декодирования представляет собой двухэтапный процесс:
Теперь временная сложность первого шага составляет O ( N ⋅exp( n )), где n = O (log( N )) — длина внутреннего блока. Другими словами, это N O (1) (т.е. полиномиальное время) в терминах длины внешнего блока N . Поскольку предполагается, что внешний алгоритм декодирования на втором шаге выполняется за полиномиальное время, сложность общего алгоритма декодирования также является полиномиальным временем.
Описанный выше алгоритм декодирования может быть использован для исправления всех ошибок числом менее dD /4. Используя декодирование с минимальным расстоянием , внешний декодер может исправить все входные данные y ' с менее чем D /2 ошибочными символами y ' i . Аналогично, внутренний код может надежно исправить входные данные y i, если менее d /2 внутренних символов ошибочны. Таким образом, для того, чтобы внешний символ y ' i был неверным после внутреннего декодирования, по крайней мере d /2 внутренних символов должны быть ошибочными, а для того, чтобы внешний код дал сбой, это должно произойти по крайней мере для D /2 внешних символов. Следовательно, общее количество внутренних символов, которые должны быть получены неправильно, чтобы конкатенированный код дал сбой, должно быть не менее d /2⋅ D /2 = dD /4.
Алгоритм также работает, если внутренние коды различны, например, для кодов Юстесена . Обобщенный алгоритм минимального расстояния , разработанный Форни, может использоваться для исправления ошибок до dD /2. [2] Он использует информацию о стирании из внутреннего кода для улучшения производительности внешнего кода и был первым примером алгоритма, использующего декодирование с мягким решением . [3] [4]
Хотя простая схема конкатенации была реализована уже для миссии Mariner Mars 1971 года, [5] конкатенированные коды начали регулярно использоваться для дальней космической связи с программой Voyager , которая запустила два космических зонда в 1977 году. [6] С тех пор конкатенированные коды стали рабочей лошадкой для эффективного кодирования с исправлением ошибок и оставались таковыми по крайней мере до изобретения турбокодов и кодов LDPC . [5] [6]
Обычно внутренний код не является блочным кодом, а сверточным кодом Витерби с мягким решением и короткой длиной ограничения. [7] Для внешнего кода используется более длинный блочный код с жестким решением, часто код Рида-Соломона с восьмибитными символами. [1] [5] Больший размер символа делает внешний код более устойчивым к пакетам ошибок , которые могут возникнуть из-за ухудшения канала, а также из-за того, что ошибочный вывод самого сверточного кода является пакетным. [1] [5] Обычно между двумя кодами добавляется слой чередования для распределения пакетов ошибок в более широком диапазоне. [ 5 ]
Сочетание внутреннего сверточного кода Витерби с внешним кодом Рида-Соломона (известным как код RSV) впервые было использовано в Voyager 2 , [5] [8] и стало популярной конструкцией как в космическом секторе, так и за его пределами. Оно до сих пор широко используется для спутниковой связи , например, в стандарте цифрового телевизионного вещания DVB-S . [9]
В более свободном смысле, любая (последовательная) комбинация двух или более кодов может называться конкатенированным кодом. Например, в стандарте DVB-S2 высокоэффективный код LDPC объединяется с алгебраическим внешним кодом, чтобы удалить любые устойчивые ошибки, оставшиеся от внутреннего кода LDPC из-за его внутреннего уровня ошибок . [10]
Простая схема конкатенации также используется на компакт-дисках (CD), где чередующийся слой между двумя кодами Рида-Соломона разных размеров распределяет ошибки по разным блокам.
Описание выше дано для того, что сейчас называется последовательно конкатенированным кодом. Турбокоды , описанные впервые в 1993 году, реализовали параллельную конкатенацию двух сверточных кодов с перемежителем между двумя кодами и итеративным декодером, который передает информацию вперед и назад между кодами. [6] Эта конструкция имеет лучшую производительность, чем любые ранее задуманные конкатенированные коды.
Однако ключевым аспектом турбокодов является их подход итеративного декодирования. Итеративное декодирование теперь также применяется к последовательным конкатенациям для достижения более высоких коэффициентов кодирования, например, в последовательно конкатенированных сверточных кодах (SCCC). Ранняя форма итеративного декодирования была реализована с двумя-пятью итерациями в «коде Галилео» космического зонда Галилео . [5]
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь )