В вычислительной технике , телекоммуникациях , теории информации и теории кодирования прямое исправление ошибок ( FEC ) или канальное кодирование [1] [2] [3] представляет собой метод, используемый для контроля ошибок при передаче данных по ненадежным или зашумленным каналам связи .
Основная идея заключается в том, что отправитель кодирует сообщение избыточным способом , чаще всего с помощью кода исправления ошибок или кода исправления ошибок ( ECC ). [4] [5] Избыточность позволяет получателю не только обнаруживать ошибки , которые могут возникнуть в любом месте сообщения, но и часто исправлять ограниченное количество ошибок. Поэтому обратный канал для запроса повторной передачи может не понадобиться. Стоимость — фиксированная, более высокая пропускная способность прямого канала.
Американский математик Ричард Хэмминг был пионером в этой области в 1940-х годах и изобрел первый код исправления ошибок в 1950 году: код Хэмминга (7,4) . [5]
FEC может применяться в ситуациях, когда повторная передача данных является дорогостоящей или невозможной, например, в односторонних каналах связи или при передаче на несколько приемников в многоадресной рассылке .
Соединения с большой задержкой также выигрывают; в случае спутников, вращающихся вокруг далеких планет, повторная передача из-за ошибок создаст задержку в несколько часов. FEC также широко используется в модемах и сотовых сетях .
Обработка FEC в приемнике может применяться к цифровому потоку битов или к демодуляции цифромодулированной несущей. Для последнего FEC является неотъемлемой частью начального аналого-цифрового преобразования в приемнике. Декодер Витерби реализует алгоритм мягкого принятия решений для демодуляции цифровых данных из аналогового сигнала, искаженного шумом. Многие декодеры FEC также могут генерировать сигнал частоты появления ошибочных битов (BER), который может использоваться в качестве обратной связи для тонкой настройки аналоговой приемной электроники.
Информация FEC добавляется в запоминающие устройства большой емкости (магнитные, оптические и твердотельные/флэш-накопители) для обеспечения возможности восстановления поврежденных данных и используется в качестве компьютерной памяти ECC в системах, требующих специальных мер по обеспечению надежности.
Максимальная доля ошибок или пропущенных битов, которые могут быть исправлены, определяется конструкцией ECC, поэтому для разных условий подходят разные коды прямой коррекции ошибок. В общем, более сильный код вызывает большую избыточность, которую необходимо передать с использованием доступной полосы пропускания, что снижает эффективную скорость передачи битов, одновременно улучшая полученное эффективное отношение сигнал/шум . Теорема кодирования канала с шумом Клода Шеннона может быть использована для вычисления максимально достижимой полосы пропускания связи для заданной максимально допустимой вероятности ошибки. Это устанавливает границы теоретической максимальной скорости передачи информации канала с некоторым заданным базовым уровнем шума. Однако доказательство не является конструктивным и, следовательно, не дает представления о том, как построить код, достигающий пропускной способности. После многих лет исследований некоторые передовые системы FEC, такие как полярный код [3], очень близки к теоретическому максимуму, заданному пропускной способностью канала Шеннона при гипотезе кадра бесконечной длины.
ECC достигается путем добавления избыточности к передаваемой информации с помощью алгоритма. Избыточный бит может быть сложной функцией многих исходных информационных битов. Исходная информация может или не может буквально появляться в закодированном выходе; коды, которые включают немодифицированный вход в выход, являются систематическими , в то время как те, которые этого не делают, являются несистематическими .
Простейшим примером ECC является передача каждого бита данных 3 раза, что известно как код повторения (3,1) . Через шумный канал приемник может увидеть 8 версий выходных данных, см. таблицу ниже.
Это позволяет исправить ошибку в любом из трех образцов "большинством голосов" или "демократическим голосованием". Корректирующая способность этого ECC:
Хотя эта тройная модульная избыточность проста в реализации и широко используется, она является относительно неэффективной ECC. Лучшие коды ECC обычно проверяют последние несколько десятков или даже последние несколько сотен ранее полученных битов, чтобы определить, как декодировать текущую небольшую горстку битов (обычно группами от 2 до 8 битов).
Можно сказать, что ECC работает по принципу «усреднения шума»; поскольку каждый бит данных влияет на множество переданных символов, искажение некоторых символов шумом обычно позволяет извлечь исходные пользовательские данные из других, неповрежденных полученных символов, которые также зависят от тех же пользовательских данных.
Большинство телекоммуникационных систем используют фиксированный канальный код, разработанный для того, чтобы выдерживать ожидаемую наихудшую частоту ошибок по битам , а затем вообще перестают работать, если частота ошибок по битам становится еще хуже. Однако некоторые системы адаптируются к заданным условиям ошибок по каналу: некоторые экземпляры гибридного автоматического запроса на повтор используют фиксированный метод ECC, пока ECC может справиться с частотой ошибок, а затем переключаются на ARQ, когда частота ошибок становится слишком высокой; адаптивная модуляция и кодирование используют различные частоты ECC, добавляя больше битов исправления ошибок на пакет, когда в канале частота ошибок выше, или убирая их, когда они не нужны.
Две основные категории кодов ECC — это блочные коды и сверточные коды .
Существует много типов блочных кодов; Кодирование Рида-Соломона примечательно своим широким применением в компакт-дисках , DVD и жестких дисках . Другие примеры классических блочных кодов включают Голея , БЧХ , многомерную четность и коды Хэмминга .
Hamming ECC обычно используется для исправления ошибок флэш-памяти NAND . [6] Это обеспечивает исправление однобитных ошибок и обнаружение двухбитных ошибок. Коды Hamming подходят только для более надежных одноуровневых ячеек (SLC) NAND. Более плотные многоуровневые ячейки (MLC) NAND могут использовать многобитную коррекцию ECC, такую как BCH или Рида-Соломона. [7] [8] Флэш-память NOR обычно не использует исправление ошибок. [7]
Классические блочные коды обычно декодируются с использованием алгоритмов жесткого принятия решений [9] , что означает, что для каждого входного и выходного сигнала принимается жесткое решение, соответствует ли он биту один или ноль. Напротив, сверточные коды обычно декодируются с использованием алгоритмов мягкого принятия решений, таких как алгоритмы Витерби, MAP или BCJR , которые обрабатывают (дискретизированные) аналоговые сигналы и которые обеспечивают гораздо более высокую производительность исправления ошибок, чем декодирование с жестким принятием решений.
Почти все классические блочные коды применяют алгебраические свойства конечных полей . Поэтому классические блочные коды часто называют алгебраическими кодами.
В отличие от классических блочных кодов, которые часто указывают на способность обнаружения или исправления ошибок, многие современные блочные коды, такие как коды LDPC, не имеют таких гарантий. Вместо этого современные коды оцениваются с точки зрения их частоты ошибок по битам.
Большинство кодов прямой коррекции ошибок исправляют только перевороты битов, но не вставки или удаления битов. В этой настройке расстояние Хэмминга является подходящим способом измерения частоты ошибок по битам . Несколько кодов прямой коррекции ошибок предназначены для исправления вставок и удалений битов, такие как коды маркеров и коды водяных знаков. Расстояние Левенштейна является более подходящим способом измерения частоты ошибок по битам при использовании таких кодов. [10]
Основной принцип ECC заключается в добавлении избыточных битов, чтобы помочь декодеру обнаружить истинное сообщение, закодированное передатчиком. Скорость кода данной системы ECC определяется как отношение между количеством информационных битов и общим количеством битов (т. е. информацией плюс избыточные биты) в данном пакете связи. Таким образом, скорость кода является действительным числом. Низкая скорость кода, близкая к нулю, подразумевает сильный код, который использует много избыточных битов для достижения хорошей производительности, в то время как большая скорость кода, близкая к 1, подразумевает слабый код.
Избыточные биты, защищающие информацию, должны передаваться с использованием тех же коммуникационных ресурсов, которые они пытаются защитить. Это приводит к фундаментальному компромиссу между надежностью и скоростью передачи данных. [11] В одном случае сильный код (с низкой скоростью кода) может вызвать существенное увеличение SNR (отношение сигнал/шум) приемника, уменьшая частоту ошибок битов за счет снижения эффективной скорости передачи данных. В другом случае, не используя никакой ECC (т. е. скорость кода, равная 1), использует весь канал для передачи информации за счет того, что биты остаются без какой-либо дополнительной защиты.
Один интересный вопрос заключается в следующем: насколько эффективным с точки зрения передачи информации может быть ECC, который имеет пренебрежимо малый уровень ошибок декодирования? На этот вопрос ответил Клод Шеннон с помощью своей второй теоремы, которая гласит, что пропускная способность канала - это максимальная скорость передачи данных, достижимая любым ECC, уровень ошибок которого стремится к нулю: [12] Его доказательство основано на гауссовском случайном кодировании, которое не подходит для реальных приложений. Верхняя граница, заданная работой Шеннона, вдохновила на долгий путь в проектировании ECC, которые могут приблизиться к предельной границе производительности. Различные коды сегодня могут достигать почти предела Шеннона. Однако ECC, достигающие пропускной способности, обычно чрезвычайно сложны в реализации.
Наиболее популярные ECC имеют компромисс между производительностью и вычислительной сложностью. Обычно их параметры дают диапазон возможных скоростей кодирования, которые можно оптимизировать в зависимости от сценария. Обычно эта оптимизация выполняется для того, чтобы достичь низкой вероятности ошибок декодирования при минимизации влияния на скорость передачи данных. Другим критерием оптимизации скорости кодирования является баланс между низкой частотой ошибок и количеством повторных передач с целью снижения затрат энергии на связь. [13]
Классические (алгебраические) блочные коды и сверточные коды часто объединяются в каскадные схемы кодирования, в которых сверточный код с короткой длиной ограничения, декодированный по Витерби, выполняет большую часть работы, а блочный код (обычно Рида–Соломона) с большим размером символа и длиной блока «подчищает» любые ошибки, сделанные сверточным декодером. Однопроходное декодирование с этим семейством кодов исправления ошибок может дать очень низкий уровень ошибок, но для условий передачи на большие расстояния (например, в глубоком космосе) рекомендуется итеративное декодирование.
Сцепленные коды стали стандартной практикой в спутниковой и дальней космической связи с тех пор, как Voyager 2 впервые применил эту технику во время встречи с Ураном в 1986 году . Аппарат Galileo использовал итеративные каскадные коды для компенсации условий очень высокой частоты ошибок, вызванных неисправной антенной.
Коды с низкой плотностью проверки четности (LDPC) представляют собой класс высокоэффективных линейных блочных кодов, созданных из множества кодов с одиночной проверкой четности (SPC). Они могут обеспечить производительность, очень близкую к пропускной способности канала (теоретическому максимуму) с использованием итерационного подхода к декодированию с мягким решением, при линейной временной сложности с точки зрения длины их блока. Практические реализации в значительной степени опираются на декодирование составляющих кодов SPC параллельно.
Коды LDPC были впервые представлены Робертом Г. Галлагером в его докторской диссертации в 1960 году, но из-за вычислительных затрат на реализацию кодера и декодера, а также введения кодов Рида-Соломона они в основном игнорировались до 1990-х годов.
Коды LDPC теперь используются во многих современных стандартах высокоскоростной связи, таких как DVB-S2 (Digital Video Broadcasting – Satellite – Second Generation), WiMAX ( стандарт IEEE 802.16e для микроволновой связи), высокоскоростная беспроводная локальная сеть ( IEEE 802.11n ), [14] 10GBase-T Ethernet (802.3an) и G.hn/G.9960 (стандарт ITU-T для сетей по линиям электропередач, телефонным линиям и коаксиальному кабелю). Другие коды LDPC стандартизированы для стандартов беспроводной связи в рамках 3GPP MBMS (см. фонтанные коды ).
Турбокодирование — это итеративная схема мягкого декодирования, которая объединяет два или более относительно простых сверточных кода и перемежитель для создания блочного кода, который может работать в пределах доли децибела от предела Шеннона . Опередив коды LDPC с точки зрения практического применения, они теперь обеспечивают схожую производительность.
Одним из самых ранних коммерческих применений турбокодирования была цифровая сотовая технология CDMA2000 1x (TIA IS-2000), разработанная Qualcomm и продаваемая Verizon Wireless , Sprint и другими операторами. Она также используется для эволюции CDMA2000 1x специально для доступа в Интернет, 1xEV-DO (TIA IS-856). Как и 1x, EV-DO был разработан Qualcomm и продается Verizon Wireless , Sprint и другими операторами (маркетинговое название 1xEV-DO от Verizon — Broadband Access , потребительское и деловое маркетинговые названия 1xEV-DO от Sprint — Power Vision и Mobile Broadband соответственно).
Иногда необходимо только декодировать отдельные биты сообщения или проверить, является ли данный сигнал кодовым словом, и сделать это, не просматривая весь сигнал. Это может иметь смысл в потоковой настройке, где кодовые слова слишком велики, чтобы их можно было классически декодировать достаточно быстро, и где на данный момент интерес представляют только несколько битов сообщения. Также такие коды стали важным инструментом в теории вычислительной сложности , например, для разработки вероятностно проверяемых доказательств .
Локально декодируемые коды — это коды с исправлением ошибок, для которых отдельные биты сообщения могут быть вероятностно восстановлены, только глядя на небольшое (скажем, постоянное) количество позиций кодового слова, даже после того, как кодовое слово было повреждено в некоторой постоянной доле позиций. Локально проверяемые коды — это коды с исправлением ошибок, для которых можно вероятностно проверить, близок ли сигнал к кодовому слову, только глядя на небольшое количество позиций сигнала.
Не все тестовые коды локально декодируются и тестируются коды
Не все локально декодируемые коды (LDC) являются локально проверяемыми кодами (LTC) [15] , как и локально корректируемые коды (LCC), [16] LCC q-query ограничены экспоненциально [17] [18], в то время как LDC могут иметь субэкспоненциальную длину. [19] [20]
Перемежение часто используется в цифровых системах связи и хранения данных для повышения производительности кодов прямой коррекции ошибок. Многие каналы связи не являются безпамятными: ошибки обычно возникают пачками , а не независимо друг от друга. Если количество ошибок в кодовом слове превышает возможности кода коррекции ошибок, он не может восстановить исходное кодовое слово. Перемежение устраняет эту проблему, перетасовывая исходные символы по нескольким кодовым словам, тем самым создавая более равномерное распределение ошибок. [21] Поэтому перемежение широко используется для пакетной коррекции ошибок .
Анализ современных итерационных кодов, таких как турбокоды и коды LDPC , обычно предполагает независимое распределение ошибок. [22] Поэтому системы, использующие коды LDPC, обычно применяют дополнительное чередование символов в кодовом слове. [23]
Для турбокодов перемежитель является неотъемлемым компонентом, и его правильная конструкция имеет решающее значение для хорошей производительности. [21] [24] Итеративный алгоритм декодирования работает лучше всего, когда в факторном графе , представляющем декодер, нет коротких циклов ; перемежитель выбирается таким образом, чтобы избежать коротких циклов.
Конструкции перемежителей включают в себя:
В системах связи с несколькими несущими чередование несущих может использоваться для обеспечения частотного разнесения , например, для смягчения частотно-избирательного замирания или узкополосных помех. [28]
Передача без перемежения :
Сообщение без ошибок: aaaabbbbbccccddddeeeeffffggggПередача с пакетной ошибкой: aaaabbbbbcc____deeeeffffgggg
Здесь каждая группа одной и той же буквы представляет собой 4-битное однобитное кодовое слово, исправляющее ошибки. Кодовое слово cccc изменено на один бит и может быть исправлено, но кодовое слово dddd изменено на три бита, поэтому его либо вообще невозможно декодировать, либо оно может быть декодировано неправильно .
С чередованием :
Кодовые слова без ошибок: aaaabbbbbccccddddeeeeffffggggЧередование: abcdefgabcdefgabcdefgabcdefgПередача с пакетной ошибкой: abcdefgabcd____bcdefgabcdefgПолученные кодовые слова после деинтерливинга: aa_abbbbccccdddde_eef_ffg_gg
В каждом из кодовых слов «aaaa», «eeee», «ffff» и «gggg» изменяется только один бит, поэтому однобитный код с исправлением ошибок декодирует все правильно.
Передача без перемежения :
Оригинал переданного предложения: ThisIsAnExampleOfInterleavingПолучено предложение с ошибкой пакета: ThisIs______pleOfInterleaving
Термин «AnExample» в большинстве случаев оказывается непонятным и его трудно исправить.
С чередованием :
Переданное предложение: ЭтоПримерИнтерливинга...Передача без ошибок: TIEpfeaghsxlIrv.iAaenli.snmOten.Получено предложение с пакетной ошибкой: TIEpfe______Irv.iAaenli.snmOten.Полученное предложение после деинтерливинга: T_isI_AnE_amp_eOfInterle_vin_...
Ни одно слово не теряется полностью, а недостающие буквы можно восстановить с минимальными догадками.
Использование методов чередования увеличивает общую задержку. Это происходит потому, что весь чередующийся блок должен быть получен до того, как пакеты могут быть декодированы. [29] Также чередование скрывает структуру ошибок; без чередования более продвинутые алгоритмы декодирования могут использовать структуру ошибок и достигать более надежной связи, чем более простой декодер в сочетании с чередованием [ необходима цитата ] . Пример такого алгоритма основан на структурах нейронной сети [30] .
Моделирование поведения кодов коррекции ошибок (ECC) в программном обеспечении является обычной практикой для проектирования, проверки и улучшения ECC. Будущий стандарт беспроводной связи 5G открывает новый спектр приложений для программных ECC: облачные сети радиодоступа (C-RAN) в контексте программно-определяемой радиосвязи (SDR) . Идея заключается в непосредственном использовании программных ECC в коммуникациях. Например, в 5G программные ECC могут быть расположены в облаке, а антенны подключены к этим вычислительным ресурсам: таким образом улучшая гибкость сети связи и в конечном итоге увеличивая энергоэффективность системы.
В этом контексте ниже перечислено различное программное обеспечение с открытым исходным кодом (список не является исчерпывающим).
Как работают Forward Error-Correction Codes]
Оба алгоритма — Рида–Соломона и BCH — являются распространенными вариантами ECC для флэш-памяти MLC NAND. ... Блочные коды на основе Хэмминга являются наиболее часто используемыми ECC для SLC.... и Рид–Соломон, и BCH способны обрабатывать множественные ошибки и широко используются во флэш-памяти MLC.
Для SLC достаточно кода с порогом коррекции 1. t=4 требуется ... для MLC.
{{cite book}}
: |journal=
проигнорировано ( помощь )