линейные блоковые коды сверточные коды

Коды, исправляющие ошибки

Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Для обнаружения ошибок используют коды обнаружения ошибок, для исправления — корректирующие коды (коды, исправляющие ошибки, коды с коррекцией ошибок, помехоустойчивые коды).

Содержание

Способы борьбы с ошибками

В процессе хранения данных и передачи информации по сетям связи неизбежно возникают ошибки. Контроль целостности данных и исправление ошибок — важные задачи на многих уровнях работы с информацией (в частности, физическом, канальном, транспортном уровнях модели OSI).

В системах связи возможны несколько стратегий борьбы с ошибками:

Коды обнаружения и исправления ошибок

Корректирующие коды — коды, служащие для обнаружения или исправления ошибок, возникающих при передаче информации под влиянием помех, а также при её хранении.

Для этого при записи (передаче) в полезные данные добавляют специальным образом структурированную избыточную информацию (контрольное число), а при чтении (приёме) её используют для того, чтобы обнаружить или исправить ошибки. Естественно, что число ошибок, которое можно исправить, ограничено и зависит от конкретного применяемого кода.

С кодами, исправляющими ошибки, тесно связаны коды обнаружения ошибок. В отличие от первых, последние могут только установить факт наличия ошибки в переданных данных, но не исправить её.

В действительности, используемые коды обнаружения ошибок принадлежат к тем же классам кодов, что и коды, исправляющие ошибки. Фактически, любой код, исправляющий ошибки, может быть также использован для обнаружения ошибок (при этом он будет способен обнаружить большее число ошибок, чем был способен исправить).

По способу работы с данными коды, исправляющие ошибки делятся на блоковые, делящие информацию на фрагменты постоянной длины и обрабатывающие каждый из них в отдельности, и свёрточные, работающие с данными как с непрерывным потоком.

Блоковые коды

Пусть кодируемая информация делится на фрагменты длиной k бит, которые преобразуются в кодовые слова длиной n бит. Тогда соответствующий блоковый код обычно обозначают линейные блоковые коды сверточные коды. ad57500bf16c5fa0ce065693ffe9670c. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-ad57500bf16c5fa0ce065693ffe9670c. картинка линейные блоковые коды сверточные коды. картинка ad57500bf16c5fa0ce065693ffe9670c. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.. При этом число линейные блоковые коды сверточные коды. 69207561fc8b110f8c85be4de4756043. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-69207561fc8b110f8c85be4de4756043. картинка линейные блоковые коды сверточные коды. картинка 69207561fc8b110f8c85be4de4756043. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.называется скоростью кода.

Если исходные k бит код оставляет неизменными, и добавляет nk проверочных, такой код называется систематическим, иначе несистематическим.

Задать блоковый код можно по-разному, в том числе таблицей, где каждой совокупности из k информационных бит сопоставляется n бит кодового слова. Однако, хороший код должен удовлетворять, как минимум, следующим критериям:

Нетрудно видеть, что приведённые требования противоречат друг другу. Именно поэтому существует большое количество кодов, каждый из которых пригоден для своего круга задач.

Практически все используемые коды являются линейными. Это связано с тем, что нелинейные коды значительно сложнее исследовать, и для них трудно обеспечить приемлемую лёгкость кодирования и декодирования.

Линейные коды общего вида

линейные блоковые коды сверточные коды. 0236ea9dc85513180716f4bca28b5c0e. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-0236ea9dc85513180716f4bca28b5c0e. картинка линейные блоковые коды сверточные коды. картинка 0236ea9dc85513180716f4bca28b5c0e. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Минимальное расстояние и корректирующая способность

Расстоянием Хемминга (метрикой Хемминга) между двумя кодовыми словами линейные блоковые коды сверточные коды. 75d7001f376072c3890668fec92fc328. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-75d7001f376072c3890668fec92fc328. картинка линейные блоковые коды сверточные коды. картинка 75d7001f376072c3890668fec92fc328. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.и линейные блоковые коды сверточные коды. 70f9b304e77dfb53abb289b827735717. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-70f9b304e77dfb53abb289b827735717. картинка линейные блоковые коды сверточные коды. картинка 70f9b304e77dfb53abb289b827735717. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.называется количество отличных бит на соответствующих позициях, линейные блоковые коды сверточные коды. 1fc3579c4caff5e0051b9fd72a9625f1. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-1fc3579c4caff5e0051b9fd72a9625f1. картинка линейные блоковые коды сверточные коды. картинка 1fc3579c4caff5e0051b9fd72a9625f1. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи., что равно числу «единиц» в векторе линейные блоковые коды сверточные коды. c8fea5819e847191bfb0fcf5fec4e524. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-c8fea5819e847191bfb0fcf5fec4e524. картинка линейные блоковые коды сверточные коды. картинка c8fea5819e847191bfb0fcf5fec4e524. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи..

Минимальное расстояние Хемминга линейные блоковые коды сверточные коды. 461832cd1dbc9d101f28a7794af58727. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-461832cd1dbc9d101f28a7794af58727. картинка линейные блоковые коды сверточные коды. картинка 461832cd1dbc9d101f28a7794af58727. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.является важной характеристикой линейного блокового кода. Она показывает насколько «далеко» расположены коды друг от друга. Она определяет другую, не менее важную характеристику — корректирующую способность:

Коды Хемминга

Коды Хемминга — простейшие линейные коды с минимальным расстоянием 3, то есть способные исправить одну ошибку. Код Хемминга может быть представлен в таком виде, что синдром

линейные блоковые коды сверточные коды. 11f6cedf93e42c2d3f98e240ad554d93. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-11f6cedf93e42c2d3f98e240ad554d93. картинка линейные блоковые коды сверточные коды. картинка 11f6cedf93e42c2d3f98e240ad554d93. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи., где линейные блоковые коды сверточные коды. ca34848441d9d067b59f08f126817bac. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-ca34848441d9d067b59f08f126817bac. картинка линейные блоковые коды сверточные коды. картинка ca34848441d9d067b59f08f126817bac. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.— принятый вектор, будет равен номеру позиции, в которой произошла ошибка. Это свойство позволяет сделать декодирование очень простым.

Общий метод декодирования линейных кодов

Любой код (в том числе нелинейный) можно декодировать с помощью обычной таблицы, где каждому значению принятого слова линейные блоковые коды сверточные коды. e9ea974537cd032e391919d65468eeb9. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-e9ea974537cd032e391919d65468eeb9. картинка линейные блоковые коды сверточные коды. картинка e9ea974537cd032e391919d65468eeb9. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.соответствует наиболее вероятное переданное слово линейные блоковые коды сверточные коды. a1894d788dc3ef8b774b62c075b2d0a0. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-a1894d788dc3ef8b774b62c075b2d0a0. картинка линейные блоковые коды сверточные коды. картинка a1894d788dc3ef8b774b62c075b2d0a0. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.. Однако, данный метод требует применения огромных таблиц уже для кодовых слов сравнительно небольшой длины.

Для линейных кодов этот метод можно существенно упростить. При этом для каждого принятого вектора линейные блоковые коды сверточные коды. e9ea974537cd032e391919d65468eeb9. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-e9ea974537cd032e391919d65468eeb9. картинка линейные блоковые коды сверточные коды. картинка e9ea974537cd032e391919d65468eeb9. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.вычисляется синдром линейные блоковые коды сверточные коды. f1edb8b1f533109faae0187282a95424. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-f1edb8b1f533109faae0187282a95424. картинка линейные блоковые коды сверточные коды. картинка f1edb8b1f533109faae0187282a95424. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.. Поскольку линейные блоковые коды сверточные коды. bad7b082e42b38d845606ed6291a94b1. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-bad7b082e42b38d845606ed6291a94b1. картинка линейные блоковые коды сверточные коды. картинка bad7b082e42b38d845606ed6291a94b1. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи., где линейные блоковые коды сверточные коды. 96aa035acd875724106cbc4ff6320f73. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-96aa035acd875724106cbc4ff6320f73. картинка линейные блоковые коды сверточные коды. картинка 96aa035acd875724106cbc4ff6320f73. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.— кодовое слово, а линейные блоковые коды сверточные коды. 9e5b16ac946b38d734efdd3e3826c377. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-9e5b16ac946b38d734efdd3e3826c377. картинка линейные блоковые коды сверточные коды. картинка 9e5b16ac946b38d734efdd3e3826c377. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.— вектор ошибки, то линейные блоковые коды сверточные коды. d56da7ff96be4fd277813d38244eb1c6. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-d56da7ff96be4fd277813d38244eb1c6. картинка линейные блоковые коды сверточные коды. картинка d56da7ff96be4fd277813d38244eb1c6. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.. Затем с помощью таблицы по синдрому определяется вектор ошибки, с помощью которого определяется переданное кодовое слово. При этом таблица получается гораздо меньше, чем при использовании предыдущего метода.

Линейные циклические коды

Несмотря на то, что декодирование линейных кодов уже значительно проще декодирования большинства нелинейных, для большинства кодов этот процесс всё ещё достаточно сложен. Циклические коды, кроме более простого декодирования, обладают и другими важными свойствами.

Циклическим кодом является линейный код, обладающий следующим свойством: если линейные блоковые коды сверточные коды. 70f9b304e77dfb53abb289b827735717. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-70f9b304e77dfb53abb289b827735717. картинка линейные блоковые коды сверточные коды. картинка 70f9b304e77dfb53abb289b827735717. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.является кодовым словом, то его циклическая перестановка также является кодовым словом.

В дальнейшем, если не указано иное, мы будем считать, что циклический код является двоичным, то есть линейные блоковые коды сверточные коды. f3195eef9efb1b8a549b107fdb7fc2fe. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-f3195eef9efb1b8a549b107fdb7fc2fe. картинка линейные блоковые коды сверточные коды. картинка f3195eef9efb1b8a549b107fdb7fc2fe. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.могут принимать значения 0 или 1.

Порождающий (генераторный) полином

С помощью порождающего полинома осуществляется кодирование циклическим кодом. В частности:

Коды CRC

Таким образом, вид полинома g(x) задаёт конкретный код CRC. Примеры наиболее популярных полиномов:

название кодастепеньполином
CRC-1212x 12 + x 11 + x 3 + x 2 + x + 1
CRC-1616x 16 + x 15 + x 2 + 1
CRC-x 16 + x 12 + x 5 + 1
CRC-3232x 32 + x 26 + x 23 + x 22 + x 16 + x 12 + x 11 + x 10 + x 8 + x 7 + x 5 + x 4 + x 2 + x + 1
Коды БЧХ

Коды Боуза — Чоудхури — Хоквингема (БЧХ) являются подклассом циклических кодов. Их отличительное свойство — возможность построения кода БЧХ с минимальным расстоянием не меньше заданного. Это важно, потому что, вообще говоря, определение минимального расстояния кода есть очень сложная задача.

Математически полинома g(x) на множители в поле Галуа.

Коды коррекции ошибок Рида — Соломона

Коды Рида — Соломона — недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида-Соломона, работающие с байтами (октетами).

Математически коды Рида — Соломона являются кодами БЧХ.

Преимущества и недостатки блоковых кодов

Хотя блоковые коды, как правило, хорошо справляются с редкими, но большими пачками ошибок, их эффективность при частых, но небольших ошибках (например, в канале с АБГШ), менее высока.

Свёрточные коды

линейные блоковые коды сверточные коды. 350px ecc nasa standard coder. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-350px ecc nasa standard coder. картинка линейные блоковые коды сверточные коды. картинка 350px ecc nasa standard coder. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Свёрточные коды, в отличие от блоковых, не делят информацию на фрагменты и работают с ней как со сплошным потоком данных.

Свёрточные коды, как правило, порождаются дискретной линейной инвариантной во времени системой. Поэтому, в отличие от большинства блоковых кодов, свёрточное кодирование — очень простая операция, чего нельзя сказать о декодировании.

Кодирование свёрточным кодом производится с помощью регистра сдвига, отводы от которого суммируются по модулю два. Таких сумм может быть две (чаще всего) или больше.

Декодирование свёрточных кодов, как правило, производится по алгоритму Витерби, который пытается восстановить переданную последовательность согласно критерию максимального правдоподобия.

Преимущества и недостатки свёрточных кодов

Свёрточные коды эффективно работают в канале с белым шумом, но плохо справляются с пакетами ошибок. Более того, если декодер ошибается, на его выходе всегда возникает пакет ошибок.

Каскадное кодирование. Итеративное декодирование

Преимущества разных способов кодирования можно объединить, применив каскадное кодирование. При этом информация сначала кодируется одним кодом, а затем другим, в результате получается код-произведение.

Например, популярной является следующая конструкция: данные кодируются кодом Рида-Соломона, затем перемежаются (при этом символы, расположенные близко, помещаются далеко друг от друга) и кодируются свёрточным кодом. На приёмнике сначала декодируется свёрточный код, затем осуществляется обратное перемежение (при этом пачки ошибок на выходе свёрточного декодера попадают в разные кодовые слова кода Рида — Соломона), и затем осуществляется декодирование кода Рида — Соломона.

Некоторые коды-произведения специально сконструированы для итеративного декодирования, при котором декодирование осуществляется в несколько проходов, каждый из которых использует информацию от предыдущего. Это позволяет добиться большой эффективности, однако, декодирование требует больших ресурсов. К таким кодам относят турбо-коды и LDPC-коды (коды Галлагера).

Оценка эффективности кодов

Эффективность кодов определяется количеством ошибок, которые тот может исправить, количеством избыточной информации, добавление которой требуется, а также сложностью реализации кодирования и декодирования (как аппаратной, так и в виде программы для ЭВМ).

Граница Хемминга и совершенные коды

линейные блоковые коды сверточные коды. 8960742941bff93bfb6e62a34ff4b75a. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-8960742941bff93bfb6e62a34ff4b75a. картинка линейные блоковые коды сверточные коды. картинка 8960742941bff93bfb6e62a34ff4b75a. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Коды, удовлетворяющие этой границе с равенством, называются совершенными. К совершенным кодам относятся, например, коды Хемминга. Часто применяемые на практике коды с большой корректирующей способностью (такие, как коды Рида — Соломона) не являются совершенными.

Энергетический выигрыш

При передаче информации по каналу связи вероятность ошибки зависит от отношения сигнал/шум на входе демодулятора, таким образом при постоянном уровне шума решающее значение имеет мощность передатчика. В системах спутниковой и мобильной, а также других типов связи остро стоит вопрос экономии энергии. Кроме того, в определённых системах связи (например, телефонной) неограниченно повышать мощность сигнала не дают технические ограничения.

Поскольку помехоустойчивое кодирование позволяет исправлять ошибки, при его применении мощность передатчика можно снизить, оставляя скорость передачи информации неизменной. Энергетический выигрыш определяется как разница отношений с/ш при наличии и отсутствии кодирования.

Применение кодов, исправляющих ошибки

Коды, исправляющие ошибки, применяются:

Коды, обнаруживающие ошибки, применяются в сетевых протоколах различных уровней.

Автоматический запрос повторной передачи

Системы с автоматическим запросом повторной передачи (ARQ — Automatic Repeat reQuest) основаны на технологии обнаружения ошибок. Распространены следующие методы автоматического запроса:

Запрос ARQ с остановками (stop-and-wait ARQ)

Идея этого метода заключается в том, что передатчик ожидает от приемника подтверждения успешного приема предыдущего блока данных перед тем как начать передачу следующего. В случае, если блок данных был принят с ошибкой, приемник передает отрицательное подтверждение (negative acknowledgement, NAK), и передатчик повторяет передачу блока. Данный метод подходит для полудуплексного канала связи. Его недостатком является низкая скорость из-за высоких накладных расходов на ожидание.

Непрерывный запрос ARQ с возвратом (continuous ARQ with pullback)

Для этого метода необходим полнодуплексный канал. Передача данных от передатчика к приемнику производится одновременно. В случае ошибки передача возобновляется, начиная с ошибочного блока (то есть, передается ошибочный блок и все последующие).

Непрерывный запрос ARQ с выборочным повторением (continuous ARQ with selective repeat)

При этом подходе осуществляется передача только ошибочно принятых блоков данных.

См. также

Литература

Ссылки

Полезное

Смотреть что такое «Коды, исправляющие ошибки» в других словарях:

Коды исправляющие ошибки — Обнаружение ошибок в технике связи действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) процедура восстановления информации после… … Википедия

Исправляющие ошибки Коды — Обнаружение ошибок в технике связи действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) процедура восстановления информации после… … Википедия

Коды Рида-Соломона — недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона, работающие с байтами (октетами). Код Рида Соломона является … Википедия

КОРРЕКТИРУЮЩИЕ КОДЫ — коды, обнаруживающие и исправляющие ошибки при передаче и обработке информации в линиях связи или сложных информац. системах. В основе корректирования лежит использование избыточности сообщений, при к рой часть символов кодового слова можно… … Большой энциклопедический политехнический словарь

Корректирующие коды — помехоустойчивые коды, коды обнаружения и исправления ошибки, Коды, позволяющие по имеющейся в кодовой комбинации избыточности (См. Избыточность) обнаруживать и исправлять определённые ошибки, появление которых приводит к образованию… … Большая советская энциклопедия

Код Рида — Коды Рида Соломона (англ. Reed–Solomon codes) недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона,… … Википедия

Код коррекции ошибок Рида-Соломона — Коды Рида Соломона недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона, работающие с байтами (октетами). Код… … Википедия

Код Рида-Соломона — Коды Рида Соломона недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона, работающие с байтами (октетами). Код… … Википедия

РС код — Коды Рида Соломона недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона, работающие с байтами (октетами). Код… … Википедия

Код Боуза — Коды Боуза Чоудхури Хоквингхема (БЧХ коды) в теории кодирования это широкий класс циклических кодов, применяемых для защиты информации от ошибок (см. Обнаружение и исправление ошибок). Отличается возможностью построения кода с… … Википедия

Источник

Все, что вы хотели узнать об LDPC кодах, но стеснялись спросить (наверное)

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Предисловие

С кодами малой плотности проверок на чётность, которые дальше мы будем именовать коротко LDPC (Low-density parity-check codes), мне удалось познакомиться более или менее близко, работая над семестровым научным проектом в ТУ Ильменау (магистерская программа CSP). Моему научному руководителю направление было интересно в рамках педагогической деятельности (нужно было пополнить базу примеров, а также посмотреть в сторону недвоичных LDPC), а мне из-за того, что эти коды были плюс-минус на слуху на нашей кафедре. Не все удалось рассмотреть в том году, и поэтому исследование плавно перетекло в мое хобби… Так я набрал некоторое количество материала, которым сегодня и хочу поделиться!

Кому может быть интересна данная статья:

В общем, присоединяйтесь!

Внимание:
Предполагается, что читатель знаком с основами помехоустойчивого кодирования. Если тема совсем нова, то от себя в качестве ликбеза могу предложить данный материал: Channel codes basics (CommPy).

Содержание

Краткая историческая справка

LDPC коды — идея довольно старая, впервые они были описаны Робертом Галлагером ещё в 1963 г. в его работе на степень PhD [1]. Однако, из-за своей неоправданной сложности (по тем временам) они не находили применения в технике относительно долгое время.

И только в 1990-х годах эти коды были, так сказать, заново открыты М. Дэви и Д. Маккеем, которые предложили инновационные на тот момент способы построения LDPC кодов с уменьшенной сложностью [2].

Сейчас LDPC коды это:

Кроме того, все больше LDPC коды проникают и в спутниковую связь. В свое время, я делал небольшой обзор по малым спутникам CubeSat (посмотреть можно по ссылке) — там тенденция однозначная и обусловлена внедрением стандартов DVB-S2/S2X.

И я думаю, это прекрасная мотивация узнать о данных кодах немного больше.

Азы блочного кодирования

LDPC коды — это линейные блочные коды, а значит проверочные биты в данной схеме кодирования добавляются в конец информационного сообщения — блоком.

Соответсвенно, процедура кодирования (encoding) — есть ничто иное, как перемножение вектора информационного сообщения длинной линейные блоковые коды сверточные коды. b954f43ce67f65a92502a661914b76e4. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-b954f43ce67f65a92502a661914b76e4. картинка линейные блоковые коды сверточные коды. картинка b954f43ce67f65a92502a661914b76e4. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.на некоторую порождающую матрицу линейные блоковые коды сверточные коды. 15bb48f6743c78742c3fe56b12966093. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-15bb48f6743c78742c3fe56b12966093. картинка линейные блоковые коды сверточные коды. картинка 15bb48f6743c78742c3fe56b12966093. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.:

линейные блоковые коды сверточные коды. 19491c0b90542b526a17036050ac7db7. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-19491c0b90542b526a17036050ac7db7. картинка линейные блоковые коды сверточные коды. картинка 19491c0b90542b526a17036050ac7db7. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

где символ линейные блоковые коды сверточные коды. c2566c83648fe2c710ee26811aa8fc2b. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-c2566c83648fe2c710ee26811aa8fc2b. картинка линейные блоковые коды сверточные коды. картинка c2566c83648fe2c710ee26811aa8fc2b. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.— это умножение по модулю (см. modulo). Для двоичных кодов это modulo 2, для недвоичных modulo q, исходя из полей Галуа линейные блоковые коды сверточные коды. f7f3c570b420f2785941aa73ffd88411. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-f7f3c570b420f2785941aa73ffd88411. картинка линейные блоковые коды сверточные коды. картинка f7f3c570b420f2785941aa73ffd88411. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи..

Соответственно, и кодовая скорость тоже задается через порождающую матрицу:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Порождающая матрица состоит из двух конкатенированных (соединенных) частей:

линейные блоковые коды сверточные коды. 633f11de37c2d664c3c05488185200e0. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-633f11de37c2d664c3c05488185200e0. картинка линейные блоковые коды сверточные коды. картинка 633f11de37c2d664c3c05488185200e0. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

где линейные блоковые коды сверточные коды. 21bcf64be44c43de6044454f2a14881b. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-21bcf64be44c43de6044454f2a14881b. картинка линейные блоковые коды сверточные коды. картинка 21bcf64be44c43de6044454f2a14881b. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.— это, так называемая, четная (parity) часть, а линейные блоковые коды сверточные коды. 10b2368d92de7a310597377c7fc6ffda. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-10b2368d92de7a310597377c7fc6ffda. картинка линейные блоковые коды сверточные коды. картинка 10b2368d92de7a310597377c7fc6ffda. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.— единичная (identity) матрица.

Дело в том, что при умножении и сложении по модулю нужно соблюдать правила сопоставления отрицательных и положительных чисел:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

На двоичном случае все это незаметно, и поэтому минус иногда пропускают.

Так как мы говорим о линейных блочных кодах, порождающая матрица и должна обеспечивать эту линейность (см. Linear code). То есть, строки порождающей матрицы должны быть линейно независимыми (да, на слух звучит немного парадоксально).

Обратите внимание, identity-часть нужна для того, чтобы оставлять код систематическим: информационное сообщение остается неизменным, а проверочные биты добавляются в конец блоком. При такой схеме, правильно восстановив кодовое слово, можно восстановить и изначальное сообщение, просто убрав проверочные биты. Удобно, не правда ли?

Порождающая матрица напрямую связана с другой важнейшей матрицей, использующейся во время процедуры декодирования: с матрицей проверки на четность (parity-check matrix).

Матрица проверки на четность имеет линейные блоковые коды сверточные коды. 453e6a188b4290dc4f8b8ef4c4a3f402. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-453e6a188b4290dc4f8b8ef4c4a3f402. картинка линейные блоковые коды сверточные коды. картинка 453e6a188b4290dc4f8b8ef4c4a3f402. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.строк и линейные блоковые коды сверточные коды. a1e39da1c84981d7264baa207047222a. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-a1e39da1c84981d7264baa207047222a. картинка линейные блоковые коды сверточные коды. картинка a1e39da1c84981d7264baa207047222a. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.столбцов, где линейные блоковые коды сверточные коды. a1e39da1c84981d7264baa207047222a. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-a1e39da1c84981d7264baa207047222a. картинка линейные блоковые коды сверточные коды. картинка a1e39da1c84981d7264baa207047222a. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.соответствует требуемой длине кодового слова, а линейные блоковые коды сверточные коды. b954f43ce67f65a92502a661914b76e4. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-b954f43ce67f65a92502a661914b76e4. картинка линейные блоковые коды сверточные коды. картинка b954f43ce67f65a92502a661914b76e4. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи., повторим, соответствует длине сообщения:

линейные блоковые коды сверточные коды. 539a7ba526a47dd16f3fd0a47ef28226. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-539a7ba526a47dd16f3fd0a47ef28226. картинка линейные блоковые коды сверточные коды. картинка 539a7ba526a47dd16f3fd0a47ef28226. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Ее основную идею очень удобно объяснять с помощью графа Таннера:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

То есть существует два вида узлов: так называемые, узлы переменных (variable nodes), количество которых соответствуют числу столбцов линейные блоковые коды сверточные коды. b954f43ce67f65a92502a661914b76e4. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-b954f43ce67f65a92502a661914b76e4. картинка линейные блоковые коды сверточные коды. картинка b954f43ce67f65a92502a661914b76e4. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи., и узлы проверки (check nodes), соответствующие числу строк (линейные блоковые коды сверточные коды. 0a2098d17132cef8bcb1f30d0fd32100. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-0a2098d17132cef8bcb1f30d0fd32100. картинка линейные блоковые коды сверточные коды. картинка 0a2098d17132cef8bcb1f30d0fd32100. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.). Узлы связаны между собой, и связь определяется положением единиц в матрице линейные блоковые коды сверточные коды. e79cb6ae8d0e454f94b42ad408308b72. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-e79cb6ae8d0e454f94b42ad408308b72. картинка линейные блоковые коды сверточные коды. картинка e79cb6ae8d0e454f94b42ad408308b72. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.. Картинка справа — это моя собственная мнемоничка моего же производства. Как мне кажется, это самый простой способ уловить суть структуры: если элемент матрицы равен 1, значит связь между узлами есть, если равен 0 — связи нет.

Для того, чтобы считать процедуру декодирования успешной, нужно, чтобы на всех проверочных узлах сформировались определенные значения — как правило, нули (см. декодирование на основе синдромов):

линейные блоковые коды сверточные коды. da9cc80b9c2a27768732a5cd35ccbc55. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-da9cc80b9c2a27768732a5cd35ccbc55. картинка линейные блоковые коды сверточные коды. картинка da9cc80b9c2a27768732a5cd35ccbc55. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Собственно говоря, эта матрица и определяет последние две буквы в аббревиатуре LDPC (Parity-Check).

Азы LDPC кодов

Но всё выше описанное — это общие моменты для большинства блочных кодов. Чем же тогда LDPC отличаются от тех же кодов Хэмминга?

В общем-то, тем, что и определяет их как low-density: их матрицы проверки на четность должны быть разряженными (sparce), то есть нулей в них должно быть значительно больше, чем чего-либо другого:

«Low density parity check codes are codes specified by a parity check matrix containing mostly zeros and only small number of ones.» [1]

Например, у того же Галлагера данная матрица была такой:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

(3,4)-регулярная матрица проверки на четность длинною 12. Пояснение: кодовое слово, которое будет закодировано с помощью такого кода, будет иметь длину 12 бит; в каждом столбце 3 единицы, а в каждой строке 4, отсюда обозначение (3,4); количество единиц в строках и столбцах — это константы (в нашем случае 3 и 4), а значит код — регулярный.

У Маккея и Нила матрица проверки на четность была такой:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

(3,4)-регулярная матрица проверки на четность длинною 12.

В стандарте DVB-S2 приняты уже нерегулярные (irregular) матрицы проверки на четность. См.:

Eroz M., Sun F. W., Lee L. N. DVB‐S2 low density parity check codes with near Shannon limit performance //International Journal of Satellite Communications and Networking. – 2004. – Т. 22. – №. 3. – С. 269-279.

Связано это с лучшей помехоустойчивостью нерегулярных схем.

Однако, ничего не замечаете? Правильно: эти матрицы не попадают под стандартную форму из формулы (3), ведь для LDPC кодов мы стремимся сделать проверочные матрицы разреженными. А если матрицы проверки не попадают под стандартную форму, значит не совсем понятно, как для них формировать порождающие матрицы.

Ответ, конечно, есть (и не один). Допустим, такой: изначальную матрицу линейные блоковые коды сверточные коды. e79cb6ae8d0e454f94b42ad408308b72. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-e79cb6ae8d0e454f94b42ad408308b72. картинка линейные блоковые коды сверточные коды. картинка e79cb6ae8d0e454f94b42ad408308b72. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.приводят к стандартной форме через метод Гаусса (Gaussian elimination), из стандартной формы получают порождающую матрицу, а ее используют для кодирования.

Приведем пример из данного учебного материала:

Была такая матрица линейные блоковые коды сверточные коды. e79cb6ae8d0e454f94b42ad408308b72. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-e79cb6ae8d0e454f94b42ad408308b72. картинка линейные блоковые коды сверточные коды. картинка e79cb6ae8d0e454f94b42ad408308b72. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.:

От нее, путем перемещений и преобразований строк по модулю 2, а также перемещений столбцов, перешли к матрице линейные блоковые коды сверточные коды. afea253e547fbb569001574a8d7d9f03. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-afea253e547fbb569001574a8d7d9f03. картинка линейные блоковые коды сверточные коды. картинка afea253e547fbb569001574a8d7d9f03. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Преобразования со строками с точки зрения линейной алгебры не влияют на кодовое слово, а вот перемещения столбцов нужно запомнить:

Формируем порождающую матрицу:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Создаем кодовое слово:

И проверяем синдром (то есть закодировали мы слово матрицей, произведенной от линейные блоковые коды сверточные коды. afea253e547fbb569001574a8d7d9f03. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-afea253e547fbb569001574a8d7d9f03. картинка линейные блоковые коды сверточные коды. картинка afea253e547fbb569001574a8d7d9f03. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи., а в процессе декодирования будем использовать разреженную матрицу линейные блоковые коды сверточные коды. e79cb6ae8d0e454f94b42ad408308b72. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-e79cb6ae8d0e454f94b42ad408308b72. картинка линейные блоковые коды сверточные коды. картинка e79cb6ae8d0e454f94b42ad408308b72. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.):

Магия линейной алгебры сработала!

Завершая раздел, нужно сказать, что такой метод кодирования самый простой для понимания, однако весьма сложный для вычисления в случае больших матриц — порождающая матрица, как правило, перестает быть разряженной. Конечно, на все это есть свои решения, однако, это уже совсем другая история.

Декодирование LDPC кодов

По LDPC кодам есть неплохой подбор материалов на Medium:

Однако, лично мне объяснение одного из центральных и самых, наверное, популярных алгоритмов декодирования — алгоритма Belief propagation (aka SPASum-product algorithm) показалось, мягко говоря, слишком формальным (там просто прикреплена научная статья). Душа просит картинок и примеров!

За основу возьмем уже знакомый нам учебный материал:

Итак, во-первых, предположим, что у нас есть некая система связи:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Система связи состоит из:

Передатчик состоит из :

Приемник состоит из:

Договоримся, что под цифровыми модемами будем понимать в первую очередь самые популярные их разновидности: PSK и QAM.

Чем интересны для нас данные типы модуляции? Во-первых, тем, что именно они входят в стандарты современных беспроводных систем (LTE, Wi-Fi, DVB и т.д. ).

А, во-вторых, тем, что они умеют представлять зашумленные значения, полученные из канала связи, в форме, так называемых, мягких значений демодуляции (soft decisions). Или, если выражаться более наукообразно, в форме логарифмированных коэффициентов правдоподобия (LLRlog likelihood ratios):

линейные блоковые коды сверточные коды. 7935cd0aecb8916fc3a6cbe1644b2118. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-7935cd0aecb8916fc3a6cbe1644b2118. картинка линейные блоковые коды сверточные коды. картинка 7935cd0aecb8916fc3a6cbe1644b2118. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

где линейные блоковые коды сверточные коды. d76c4dc2b17f00a09c864bf2d24ab365. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-d76c4dc2b17f00a09c864bf2d24ab365. картинка линейные блоковые коды сверточные коды. картинка d76c4dc2b17f00a09c864bf2d24ab365. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.обозначает вероятность, а линейные блоковые коды сверточные коды. 5ccc8d80d010abd90b5c546d05856d3a. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-5ccc8d80d010abd90b5c546d05856d3a. картинка линейные блоковые коды сверточные коды. картинка 5ccc8d80d010abd90b5c546d05856d3a. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.обозначает некоторое событие.

Несложно догадаться, что схема, состоящая только из источника сообщений и модема, весьма чувствительна к сильным шумам, а значит и к ошибкам демодуляции. Благо, что мы включили в нашу схему помехоустойчивый (канальный) кодек. Декодер нам эту ошибку как раз и исправит. А точнее тот алгоритм, который в этот самый декодер зашит.

Итак, Belief propagation.

Потому что алгоритм работает с вероятностями. А точнее, с теми натуральными логарифмами от отношений вероятностей, которые мы указали в формуле (5).

Потому что эти вероятности будут итеративно «пересылаться» от узлов переменных к узлам проверки (сообщение V2CVariable-to-Check) и наоборот (сообщение C2VCheck-to-Variable).

Под пересылкой сообщений между узлами проверки и переменных понимается то, что LLR будут складываться и перемножаться по определенным формулам.

На этапе инициализации алгоритма LLR соответствуют априорным вероятностям. SPA является одним из алгоритмов максимальной апостериорной вероятности (MAP — maximum a posteriori probability), а значит он стремится максимизировать апостериорную вероятность, полученную после итеративной пересылки между узлами проверок и переменных.

Предлагаю рассмотреть пошагово.

Предупреждение:
Ниже будет представлено некоторое количество математических формул, и иногда они будут довольно непростыми для визуального восприятия. Поэтому если вы не настроены в данный момент на штудирование, предлагаю перейти сразу к пункту «Пример декодирования через SPA на Python (numpy)». Вернетесь к теории, когда будет время и настроение или когда захочется посмотреть, что лежит в основе скриптов (наверное).

1. Инициализация

Итак, для начала рассмотрим априорные вероятности.

Начальной точкой для нашего алгоритма является матрица значений LLR, повторяющая структуру матрицы линейные блоковые коды сверточные коды. e79cb6ae8d0e454f94b42ad408308b72. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-e79cb6ae8d0e454f94b42ad408308b72. картинка линейные блоковые коды сверточные коды. картинка e79cb6ae8d0e454f94b42ad408308b72. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.. Подберем аналитическое описание:

линейные блоковые коды сверточные коды. 5af2aa06e2707dac783c9c58990b953f. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-5af2aa06e2707dac783c9c58990b953f. картинка линейные блоковые коды сверточные коды. картинка 5af2aa06e2707dac783c9c58990b953f. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

где линейные блоковые коды сверточные коды. f5f6b8047702b16aa08fc2dad04d53f3. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-f5f6b8047702b16aa08fc2dad04d53f3. картинка линейные блоковые коды сверточные коды. картинка f5f6b8047702b16aa08fc2dad04d53f3. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.является массивом единиц, а линейные блоковые коды сверточные коды. 3ca7d260b81ee8ca13447af329103fe7. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-3ca7d260b81ee8ca13447af329103fe7. картинка линейные блоковые коды сверточные коды. картинка 3ca7d260b81ee8ca13447af329103fe7. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.обозначает произведение Адамара (поэлементное умножение). На практике без единичной матрицы можно будет обойтись: заменим скобку на итерационное умножением Адамара вектора LLR со столбцами матрицы контроля четности (нужен будет дополнительный цикл). Если матрицы будут достаточно большими, такой подход может быть более эффективным с точки зрения памяти.

2. Сообщение V2C

Затем следует, так называемый, горизонтальный шаг: алгоритм требует обработки сообщения (V2C) в области вероятности. Для перехода от LLR к вероятностям воспользуемся отношением между гиперболическим тангенсом и натуральным логарифмом [4, с.32 ]:

линейные блоковые коды сверточные коды. 0b3f0af8ef7fb38ae7cf5e1f6e30ac69. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-0b3f0af8ef7fb38ae7cf5e1f6e30ac69. картинка линейные блоковые коды сверточные коды. картинка 0b3f0af8ef7fb38ae7cf5e1f6e30ac69. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Собственно говоря, процедура передачи V2C сообщения — это перемножение ненулевых вероятностей в каждой строке:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

где j — это номер определенной строки, i — это номер определенного столбца, линейные блоковые коды сверточные коды. 890129dc7c58a961bc8931743832a9e5. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-890129dc7c58a961bc8931743832a9e5. картинка линейные блоковые коды сверточные коды. картинка 890129dc7c58a961bc8931743832a9e5. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.— это множество ненулевых значений в j-ой строке, а выражение линейные блоковые коды сверточные коды. 1a0d89b4ef51f9dcfd9b599840450109. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-1a0d89b4ef51f9dcfd9b599840450109. картинка линейные блоковые коды сверточные коды. картинка 1a0d89b4ef51f9dcfd9b599840450109. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.означает, что мы исключаем i-ый узел переменных (variable node) из рассмотрения.

То есть на данном этапе нам нужно:

Пункт с исключением узла из рассмотрения можно провести двумя способами: 1) выяснять нужное подмножество до перемножения вероятностей или удалять значение из результата после подсчетов. Я, простоты ради, буду пользоваться вторым методом.

Я думаю, кто-то из вас, возможно, слышал названия и других алгоритмов декодирования LDPC кодов. Например, Min-sum [5], Log-SPA [6] или еще какие-нибудь [7]. Такие алгоритмы еще иногда называются субоптимальными. В чем их отличие? Собственно, в данном пункте: данные алгоритмы стремятся снизить сложность декодирования и для этого используют иные формулы для вычисления горизонтального шага. Как правило, здесь начинается подсчет рисков: каким количеством помехоустойчивости мы готовы пожертвовать ради повышения скорости декодирования.

3. Проверка критерия остановки декодирования

Итак, мы подходим к концу первой итерации, а значит пора обновить наши априорные вероятности — сделать их апостериорными:

линейные блоковые коды сверточные коды. a11c990ff08d0f9899fb35eebd92cf57. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-a11c990ff08d0f9899fb35eebd92cf57. картинка линейные блоковые коды сверточные коды. картинка a11c990ff08d0f9899fb35eebd92cf57. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

где линейные блоковые коды сверточные коды. 7a101793537743ee60ccae8e0b387f25. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-7a101793537743ee60ccae8e0b387f25. картинка линейные блоковые коды сверточные коды. картинка 7a101793537743ee60ccae8e0b387f25. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.— это множество элементов, отвечающих ненулевым элементам матрицы проверки на четность в линейные блоковые коды сверточные коды. 75cb01aa8d9f97db4343ac0c5ef11b2d. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-75cb01aa8d9f97db4343ac0c5ef11b2d. картинка линейные блоковые коды сверточные коды. картинка 75cb01aa8d9f97db4343ac0c5ef11b2d. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.-ом столбце.

Наложим их на биты через обратный NRZ:

линейные блоковые коды сверточные коды. e382cb53fb8bfada4941b844446c7764. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-e382cb53fb8bfada4941b844446c7764. картинка линейные блоковые коды сверточные коды. картинка e382cb53fb8bfada4941b844446c7764. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

И вычислим синдром по формуле (4). Если вектор нулевой — останавливаем декодирование. Если нет, то переходим к следующему шагу.

4. Сообщение C2V

На этом этапе нужно пересчитать матрицу линейные блоковые коды сверточные коды. 352ea81d300b6abd2c8c1287951e1f8b. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-352ea81d300b6abd2c8c1287951e1f8b. картинка линейные блоковые коды сверточные коды. картинка 352ea81d300b6abd2c8c1287951e1f8b. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.
линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

И далее перейти к вычислению матрицы линейные блоковые коды сверточные коды. abf8932739238b1a36a2f668c61c16e1. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-abf8932739238b1a36a2f668c61c16e1. картинка линейные блоковые коды сверточные коды. картинка abf8932739238b1a36a2f668c61c16e1. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.. И так до тех пор, пока не выполнится пункт 3 (или не кончится количество доступных итераций).

Пример декодирования через SPA на Python (numpy)

А теперь давайте перейдем к вещам более интересным — к примерам и скриптам!

Возьмем все тот же пример из [4, с.33 ]:

линейные блоковые коды сверточные коды. . линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-. картинка линейные блоковые коды сверточные коды. картинка . Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Начинаем декодировать (должна понадобиться одна итерация).

Попробуем другой пример [4, с.36 ]:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Исправить нужно первый и последний биты.

Готовые решения для моделирования

Ну, что же, теперь мы знаем азы блочного кодирования, в целом, и LDPC кодов, в частности, и даже попробовали сделать что-то, так сказать, своими руками. Можно считать, что стадия перехода от обезьяны к человеку пройдена — теорию усвоили (или хотя бы запасли на будущее).

Давайте использовать готовые решения.

Наверное, первое, что придет вам на ум, — это Communication Toolbox от MathWorks (MatLab). Решение, пожалуй, действительно хорошее, но мне оно не нравится по нескольким причинам:

Поэтому я отправился в путешествие по проектам на GitHub и нашел весьма интересный инструментарий: проект aff3ct, написанный на C++.

Прочтем, как проект позиционируют его разработчики:

Работает ПО не только для LDPC кодов, но и для других кодеков (например, можно рассмотреть Turbo-коды и полярные коды).

У проекта есть хорошая документация в формате PDF, в формате WEB-страниц, а также онлайн-версия с визуализацией уже полученных результатов (BER/FER Comparator).

Выберем что-нибудь для примера:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.
Лучше открыть в новой вкладке для полноты эффекта.

Можно запустить любой эксперимент и под свой вкус. Для этого нужно будет по инструкции (см. Instalation) установить ПО и запустить его из командной строки с нужными параметрами.

Устанавливать нужно путем сборки из исходников. Поэтому не забывайте про суперпользователей и места нахождения make-файлов.

Например, я запустил на досуге такую модель к командной строке Ubuntu 18.04:

В итоге сформировалась такая таблица:

Даже такое аскетичное представление данных — как мне кажется, это уже классная возможность.

Можно, конечно, пойти дальше написать какие-нибудь обертки для отрисовки графиков.

У создателей проекта есть и собственные решения по визуализации. Например, PyBER. Суть «тулзы» заключается в том, что с помощью GUI вы можете выбирать сформированные aff3ct txt-файлы, PyBER вам их распарсит и отрисует (полученное можно даже экспортировать, вроде). Лично мне не понравилось представление: графики представлены через plot, а не через более логичный semilogy. Поэтому оставляю опыт использования PyBER на ваше усмотрение.

Допустим, результаты моделирования можно сохранить в txt-файл, а значения отношений битовых ошибок (BER — bit error ratio) можно вытащить уже из него c помощью простой манипуляции с awk:

Все это передать, допустим, в Python и нарисовать графики под свой вкус.

Для кодовых скоростей 1/2 и 3/4 (AWGN канал) у меня получились такая картинка:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Без изысков, но в качестве первого шага неплохо, как мне кажется.

Послесловие

Не спорю, сколько я ни пытался объять необъятное, прошлись мы все же только по вершкам. Однако, я все же надеюсь, что данная статья хоть сколько-то снизит порог вхождения человеку, желающему погрузиться в тему LDPC-кодов (наверное).

Конструктивная критика только приветствуется. И спасибо за ваше внимание!

Литература

R.G. Gallager Low-Density Parity-Check Codes, IRE Transactions on Information Theory, 1962

D.J.C. MacKay Good Error-Correcting Codes Based on Very Sparse Matrices, IEEE Transactions on Information Theory, VOL.45, NO 2., March 1999

«3GPP RAN1 meeting #87 final report». 3GPP. Retrieved 31 August 2017.

Johnson, S. J. (2006). Introducing low-density parity-check codes. University of Newcastle, Australia, V1

Declercq D., Fossorier M. Decoding algorithms for nonbinary LDPC codes over GF(q) //IEEE transactions on communications. – 2007. – Т. 55. – №. 4. – С. 633-643.

Wymeersch H., Steendam H., Moeneclaey M. Log-domain decoding of LDPC codes over GF (q) //2004 IEEE International Conference on Communications (IEEE Cat. No. 04CH37577). – IEEE, 2004. – Т. 2. – С. 772-776.

Chen J. et al. Reduced-complexity decoding of LDPC codes //IEEE transactions on communications. – 2005. – Т. 53. – №. 8. – С. 1288-1299.

Приложения

Хотите немного линейной алгебры?

Давайте порассуждаем о том, как можно найти подмножества ненулевых вероятностей?

Для второго способа нужна будет, правда, заранее подготовленная матрица, которая будет повторять структуру матрицы H с точностью до наоборот: вместо единиц в ней будут нули, а вместо нулей единицы. Назовем ее «зеркалом» матрицы H:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

где линейные блоковые коды сверточные коды. 38c15878bbbafd451916fa718c076dc4. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-38c15878bbbafd451916fa718c076dc4. картинка линейные блоковые коды сверточные коды. картинка 38c15878bbbafd451916fa718c076dc4. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.— это сложение по модулю (в нашем случае modulo 2).

Соответственно, процедура замены нулей на единицы в матрице линейные блоковые коды сверточные коды. 352ea81d300b6abd2c8c1287951e1f8b. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-352ea81d300b6abd2c8c1287951e1f8b. картинка линейные блоковые коды сверточные коды. картинка 352ea81d300b6abd2c8c1287951e1f8b. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.— это сложение двух матриц:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

После перемножения нужно будет вернуть структуру к исходному виду:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Выглядит забавно, не правда ли? Такой подход очень удобен при небольших матрицах проверки на четность: можно использовать встроенные функции для перемножения элементов в векторах. Однако, я думаю, для больших матриц такой подход может быть неподходящим из-за дополнительного расхода памяти и побочных вычислений.

Вопрос о сложности и простоте декодирования, может быть, не так хорошо просматривается на двоичных кодах, однако на кодах недвоичных встает, так сказать, во весь рост. Пример для GF(4).

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Во-первых, вместо вектора LLR, нам придется работать с матрицей LLR (нужно ведь проверять вероятность уже не только двух событий):

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Соответственно, пересылаемые сообщения — это уже тензоры, которые придется разбивать на слои и обрабатывать в цикле:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

И уже потом выбирать наиболее вероятное значение:

линейные блоковые коды сверточные коды. image loader. линейные блоковые коды сверточные коды фото. линейные блоковые коды сверточные коды-image loader. картинка линейные блоковые коды сверточные коды. картинка image loader. Обнаружение ошибок в технике связи — действие, направленное на контроль целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Исправление ошибок (коррекция ошибок) — процедура восстановления информации после чтения её из устройства хранения или канала связи.

Сложность будет расти пропорционально увеличению q в выражении GF(q). Волей-неволей задумаешься о более быстрых алгоритмах…

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *