Сверточный код - Википедия - Convolutional code
Эта статья нужны дополнительные цитаты для проверка.Май 2015 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
В телекоммуникации, а сверточный код это тип код исправления ошибок который генерирует символы четности с помощью скользящего приложения логический многочлен функция к потоку данных. Скользящее приложение представляет собой «свертку» кодировщика над данными, что дает начало термину «сверточное кодирование». Скользящий характер сверточных кодов облегчает решетка декодирование с использованием неизменной во времени решетки. Инвариантное во времени решетчатое декодирование позволяет сверточным кодам декодироваться с мягким решением максимального правдоподобия с разумной сложностью.
Возможность выполнять экономичное декодирование с мягким решением с максимальным правдоподобием является одним из основных преимуществ сверточных кодов. Это контрастирует с классическими блочными кодами, которые обычно представлены изменяющейся во времени решеткой и поэтому обычно декодируются с жестким решением. Сверточные коды часто характеризуются скоростью основного кода и глубиной (или памятью) кодера. . Базовая кодовая скорость обычно задается как , куда скорость исходных входных данных и - скорость передачи данных закодированного потока выходного канала. меньше чем потому что канальное кодирование добавляет избыточность во входные биты. Память часто называют «ограничительной длиной». , где выход является функцией текущего входа, а также предыдущего входы. Глубина также может быть указана как количество элементов памяти. в полиноме или максимально возможном количестве состояний кодировщика (обычно: ).
Сверточные коды часто называют непрерывными. Однако можно также сказать, что сверточные коды имеют произвольную длину блока, а не являются непрерывными, поскольку в большинстве случаев сверточное кодирование в реальном мире выполняется для блоков данных. Сверточно-кодированные блочные коды обычно используют завершение. Произвольную длину блока сверточных кодов также можно противопоставить классическим блочные коды, которые обычно имеют фиксированную длину блока, которая определяется алгебраическими свойствами.
Кодовая скорость сверточного кода обычно изменяется через прокалывание символов. Например, сверточный код со скоростью «материнского» кода могут быть проколоты с более высокой скоростью, например, просто не передавая часть кодовых символов. Производительность сверточного кода с проколами обычно хорошо масштабируется в зависимости от передаваемой четности. Возможность выполнять экономичное декодирование с мягким решением для сверточных кодов, а также гибкость длины блока и кодовой скорости сверточных кодов делают их очень популярными для цифровой связи.
История
Сверточные коды были введены в 1955 г. Питер Элиас. Считалось, что сверточные коды можно декодировать с произвольным качеством за счет вычислений и задержки. В 1967 г. Эндрю Витерби определили, что сверточные коды могут быть декодированы с максимальной вероятностью с разумной сложностью с использованием инвариантных во времени решетчатых декодеров - Алгоритм Витерби. Позже были разработаны другие алгоритмы декодирования на основе решеток, в том числе BCJR алгоритм декодирования.
Рекурсивные систематические сверточные коды были изобретены Клод Берру примерно в 1991 г. Эти коды оказались особенно полезными для итеративной обработки, включая обработку составных кодов, таких как турбокоды.[1]
Используя "сверточную" терминологию, классический сверточный код можно рассматривать как Конечный импульсный отклик (FIR), в то время как рекурсивный сверточный код можно рассматривать как Бесконечный импульсный отклик (БИХ) фильтр.
Где используются сверточные коды
Сверточные коды широко используются для обеспечения надежной передачи данных во многих приложениях, таких как цифровое видео, радио, мобильная связь (например, в сетях 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), и п образующие многочлены - по одному на каждый сумматор (см. Рисунок ниже). Входной бит м1 подается в крайний левый регистр. Используя полиномы генератора и существующие значения в оставшихся регистрах, кодер выводит п символы. Эти символы могут быть переданы или проколоты в зависимости от желаемой кодовой скорости. Сейчас же битовый сдвиг все значения регистров справа (м1 переезжает в м0, м0 переезжает в м−1) и дождитесь следующего входного бита. Если нет оставшихся входных битов, кодировщик продолжает сдвиг, пока все регистры не вернутся в нулевое состояние (завершение битов сброса).
На рисунке ниже указана ставка1⁄3 (м⁄п) кодировщик с ограничением длины (k) of 3. Генераторные полиномы равны грамм1 = (1,1,1), грамм2 = (0,1,1), и грамм3 = (1,0,1). Следовательно, выходные биты вычисляются (по модулю 2) следующим образом:
- п1 = м1 + м0 + м−1
- п2 = м0 + м−1
- п3 = м1 + м−1.
Сверточные коды могут быть систематическими и несистематическими:
- систематически повторяет структуру сообщения перед кодированием
- несистематические изменения исходной структуры
Несистематические сверточные коды более популярны из-за лучшей помехоустойчивости. Это относится к свободному расстоянию сверточного кода.[6]
Краткая иллюстрация несистематического сверточного кода.
Краткая иллюстрация систематического сверточного кода.
Рекурсивные и нерекурсивные коды
Кодировщик на картинке выше - это нерекурсивный кодировщик. Вот пример рекурсивной, и поэтому она допускает структуру обратной связи:
Пример кодировщика: систематический потому что входные данные также используются в выходных символах (Выход 2). Коды с выходными символами, не включающими входные данные, называются несистематический.
Рекурсивные коды обычно являются систематическими, и, наоборот, нерекурсивные коды обычно несистематичны. Это не строгое требование, а обычная практика.
Пример кодировщика в Img. 2. кодер с 8 состояниями, потому что 3 регистра будут создавать 8 возможных состояний кодера (23). Соответствующая решетка декодера обычно также использует 8 состояний.
Рекурсивные систематические сверточные коды (RSC) стали более популярными благодаря их использованию в турбо-кодах. Рекурсивные систематические коды также называются псевдосистематическими кодами.
Другие коды RSC и примеры приложений включают:
Полезный для LDPC реализация кода и как внутренний составляющий код для последовательные конкатенированные сверточные коды (SCCC).
Полезно для SCCC и многомерных турбокодов.
Полезен в качестве составляющего кода в турбокодах с низким уровнем ошибок для таких приложений, как спутниковые каналы. Также подходит как внешний код SCCC.
Импульсная характеристика, передаточная функция и длина ограничения
Сверточный кодер называется так, потому что он выполняет свертка входного потока с кодировщиком импульсные реакции:
куда Икс - входная последовательность, уj это последовательность из вывода j, часj импульсный отклик для выхода j и обозначает свертку.
Сверточный кодировщик - это дискретный линейная инвариантная во времени система. Каждый выход энкодера можно описать отдельно. функция передачи, который тесно связан с порождающим полиномом. Импульсный отклик связан с передаточной функцией через Z-преобразование.
Передаточные функции для первого (нерекурсивного) кодировщика:
Передаточные функции для второго (рекурсивного) кодировщика:
Определять м к
где для любого рациональная функция ,
- .
потом м это максимум из полиномиальные степени из , а длина ограничения определяется как . Например, в первом примере длина ограничения равна 3, а во втором - 4.
Диаграмма решетки
Сверточный кодировщик - это конечный автомат. Кодировщик с п бинарные ячейки будут иметь 2п состояния.
Представьте, что кодировщик (показанный на Рисунке 1 выше) имеет цифру 1 в левой ячейке памяти (м0), а в правом '0' (м−1). (м1 на самом деле не является ячейкой памяти, поскольку представляет текущее значение). Обозначим такое состояние цифрой «10». В соответствии с входным битом кодер на следующем повороте может преобразовать либо в состояние «01», либо в состояние «11». Можно видеть, что не все переходы возможны для (например, декодер не может преобразовать из состояния «10» в «00» или даже остаться в состоянии «10»).
Все возможные переходы можно показать, как показано ниже:
Фактическая кодированная последовательность может быть представлена как путь на этом графике. Один допустимый путь показан красным в качестве примера.
Эта диаграмма дает нам представление о расшифровка: если полученная последовательность не укладывается в этот график, значит, она была получена с ошибками, и мы должны выбрать ближайшую правильный (подгонка графика) последовательность. Настоящие алгоритмы декодирования используют эту идею.
Свободное расстояние и распределение ошибок
В свободное расстояние[7] (d) - минимальный Расстояние Хэмминга между разными кодируемыми последовательностями. В корректирующая способность (т) сверточного кода - это количество ошибок, которые могут быть исправлены кодом. Его можно рассчитать как
Поскольку сверточный код не использует блоки, а обрабатывает непрерывный поток битов, значение т применяется к количеству ошибок, расположенных относительно близко друг к другу. То есть несколько групп т ошибки обычно можно исправить, если они относительно далеко друг от друга.
Свободное расстояние можно интерпретировать как минимальную длину ошибочного «пакета» на выходе сверточного декодера. Тот факт, что ошибки появляются как "всплески", следует учитывать при проектировании составной код с внутренним сверточным кодом. Популярное решение этой проблемы - чередование данные перед сверточным кодированием, так что внешний блок (обычно Рид – Соломон ) код может исправить большинство ошибок.
Декодирование сверточных кодов
Несколько алгоритмы существуют для декодирования сверточных кодов. Для относительно небольших значений k, то Алгоритм Витерби используется повсеместно, поскольку обеспечивает максимальная вероятность производительность и высокая степень распараллеливания. Таким образом, декодеры Витерби легко реализовать в СБИС аппаратное и программное обеспечение на процессорах с SIMD наборы инструкций.
Коды с большей длиной ограничения более практично декодируются любым из нескольких последовательное декодирование алгоритмы, из которых Фано алгоритм самый известный. В отличие от декодирования Витерби, последовательное декодирование не является максимальным правдоподобием, но его сложность лишь немного увеличивается с увеличением длины ограничения, что позволяет использовать строгие коды с большой длиной ограничения. Такие коды использовались в Пионерская программа начала 1970-х годов к Юпитеру и Сатурну, но уступил место более коротким кодам, декодированным по Витерби, обычно объединенным с большими Исправление ошибок Рида – Соломона коды, которые делают общую кривую коэффициента ошибок по битам более крутой и обеспечивают чрезвычайно низкий уровень остаточных необнаруженных ошибок.
И алгоритм Витерби, и алгоритм последовательного декодирования возвращают трудные решения: биты, которые образуют наиболее вероятное кодовое слово. Приблизительную меру достоверности можно добавить к каждому биту с помощью Мягкий вывод алгоритма Витерби. Максимум апостериори (MAP) мягкие решения для каждого бита могут быть получены с помощью Алгоритм BCJR.
Популярные сверточные коды
Фактически в промышленности используются заранее заданные структуры сверточных кодов, полученные в ходе научных исследований. Это связано с возможностью выбора катастрофических сверточных кодов (вызывает большее количество ошибок).
Особенно популярный сверточный код с декодированием Витерби, используемый по крайней мере с Программа "Вояджер" имеет ограничительную длину из 7 и ставка р 1/2.[10]
Марс-следопыт, Марсоход для исследования Марса и Зонд Кассини на Сатурн использовать 15 и ставка 1/6; этот код работает примерно на 2 дБ лучше, чем более простой код со стоимостью декодирования в 256 раз больше (по сравнению с кодами миссии Voyager).
Сверточный код с длиной ограничения 2 и скоростью 1/2 используется в GSM как метод исправления ошибок.[11]
Проколотые сверточные коды
Сверточный код с любой скоростью кода может быть разработан на основе полиномиального выбора;[13] однако на практике часто используется процедура исключения для достижения требуемой кодовой скорости. Прокалывание это техника, используемая для создания м/п код скорости из "базового" низкоскоростного (например, 1 /п) код. Это достигается удалением некоторых битов на выходе кодировщика. Биты удаляются согласно матрица прокалывания. Наиболее часто используются следующие матрицы прокалывания:
Скорость кода | Матрица прокалывания | Свободное расстояние (для стандартного сверточного кода НАСА K = 7) | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1/2 (Нет перф.) |
| 10 | ||||||||||||||
2/3 |
| 6 | ||||||||||||||
3/4 |
| 5 | ||||||||||||||
5/6 |
| 4 | ||||||||||||||
7/8 |
| 3 |
Например, если мы хотим создать код со скоростью 2/3, используя соответствующую матрицу из приведенной выше таблицы, мы должны взять базовый выходной сигнал кодировщика и передать каждый первый бит из первой ветви и каждый бит из второй. Конкретный порядок передачи определяется соответствующим стандартом связи.
Проколотые сверточные коды широко используются в спутниковая связь, например, в ИНТЕЛСАТ системы и Цифровое видеовещание.
Проколотые сверточные коды также называют «перфорированными».
Турбокоды: замена сверточных кодов
Простые сверточные коды, декодированные по Витерби, теперь уступают место турбокоды, новый класс повторных коротких сверточных кодов, которые близко подходят к теоретическим ограничениям, налагаемым Теорема Шеннона с гораздо меньшей сложностью декодирования, чем алгоритм Витерби, для длинных сверточных кодов, которые потребуются для той же производительности. Конкатенация с внешним алгебраическим кодом (например, Рид – Соломон ) решает проблему этажи ошибок присущие конструкциям с турбо-кодом.
Смотрите также
Рекомендации
- Эта статья включаетматериалы общественного достояния от Администрация общих служб документ: «Федеральный стандарт 1037С».
- ^ Бенедетто, Серхио и Гвидо Монторси. "Роль рекурсивных сверточных кодов в турбокодах. "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
- ^ Луна, Тодд К. "Кодирование с исправлением ошибок. "Математические методы и алгоритмы. Jhon Wiley and Son (2005) .- p.508
- ^ LLR против демодуляции жесткого решения
- ^ Оцените BER для декодирования Витерби с жестким и мягким решением
- ^ Бутман, С. А., Л. Дж. Дойч и Р. Л. Миллер. «Выполнение составных кодов для миссий в дальний космос». Отчет о ходе работы по телекоммуникациям и сбору данных 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)
- Теория информации и кодирование (ТУ Ильменау), обсуждает сверточные коды на странице 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.