В информатике коды преобразования Луби ( коды LT ) являются первым классом практических фонтанных кодов , которые являются кодами коррекции стирания, близкими к оптимальным . Они были изобретены Майклом Луби в 1998 году и опубликованы в 2002 году. [1] Как и некоторые другие фонтанные коды , коды LT зависят от разреженных двудольных графов , чтобы обменивать накладные расходы на прием на скорость кодирования и декодирования. Отличительной чертой кодов LT является использование особенно простого алгоритма, основанного на операции исключающего или ( ) для кодирования и декодирования сообщения. [2]
Коды LT не имеют скорости, поскольку алгоритм кодирования в принципе может производить бесконечное число пакетов сообщений (т. е. процент пакетов, которые необходимо получить для декодирования сообщения, может быть сколь угодно малым). Это коды исправления стирания , поскольку их можно использовать для надежной передачи цифровых данных по каналу стирания .
Следующее поколение за кодами LT — это коды Raptor (см., например, IETF RFC 5053 или IETF RFC 6330), которые имеют линейное время кодирования и декодирования. Коды Raptor в своей основе основаны на кодах LT, то есть кодирование для кодов Raptor использует два этапа кодирования, где второй этап — это кодирование LT. Аналогично, декодирование с помощью кодов Raptor в первую очередь опирается на декодирование LT, но декодирование LT смешано с более продвинутыми методами декодирования. Код RaptorQ, указанный в IETF RFC 6330, который является самым продвинутым фонтанным кодом, имеет значительно превосходящие вероятности декодирования и производительность по сравнению с использованием только кода LT.
Традиционная схема передачи данных по каналу стирания основана на непрерывной двусторонней связи.
Некоторые сети, например, используемые для сотового беспроводного вещания, не имеют канала обратной связи. Приложения в этих сетях по-прежнему требуют надежности. Фонтанные коды в целом и LT-коды в частности обходят эту проблему, принимая по сути односторонний протокол связи.
Как упоминалось выше, код RaptorQ, указанный в IETF RFC 6330, на практике превосходит код LT.
Процесс кодирования начинается с деления некодированного сообщения на n блоков примерно одинаковой длины. Затем с помощью генератора псевдослучайных чисел производятся кодированные пакеты .
Этот процесс продолжается до тех пор, пока получатель не подаст сигнал о том, что сообщение получено и успешно декодировано.
Процесс декодирования использует операцию « исключающее ИЛИ » для извлечения закодированного сообщения.
Эта процедура декодирования работает, потому что A A = 0 для любой битовой строки A . После того, как d − 1 различных блоков были объединены с помощью исключающего ИЛИ в пакет степени d , все, что осталось, — это исходное незакодированное содержимое несовпавшего блока. В символах мы имеем
Возможны несколько вариаций процессов кодирования и декодирования, описанных выше. Например, вместо того, чтобы добавлять к каждому пакету список индексов реальных блоков сообщений { i 1 , i 2 , ..., i d }, кодер может просто отправить короткий «ключ», который служит начальным числом для генератора псевдослучайных чисел (PRNG) или таблицы индексов, используемых для построения списка индексов. Поскольку приемник, оснащенный тем же RNG или таблицей индексов, может надежно воссоздать «случайный» список индексов из этого начального числа, процесс декодирования может быть успешно завершен. В качестве альтернативы, путем объединения простого кода LT низкой средней степени с надежным кодом исправления ошибок, можно построить код Raptor , который на практике превзойдет оптимизированный код LT. [3]
Есть только один параметр, который может быть использован для оптимизации прямого кода LT: функция распределения степеней (описанная как генератор псевдослучайных чисел для степени d в разделе кодирования LT выше). На практике другие «случайные» числа (список индексов { i 1 , i 2 , ..., i d } ) неизменно берутся из равномерного распределения на [0, n ), где n — количество блоков, на которые разделено сообщение. [4]
Сам Луби [1] обсуждал «идеальное распределение солитона », определяемое формулой
Это распределение степеней теоретически минимизирует ожидаемое количество избыточных кодовых слов, которые будут отправлены до того, как процесс декодирования может быть завершен. Однако идеальное распределение солитонов не работает хорошо на практике, поскольку любые колебания вокруг ожидаемого поведения делают вероятным, что на каком-то этапе процесса декодирования не будет доступного пакета (уменьшенной) степени 1, поэтому декодирование не удастся. Более того, некоторые из исходных блоков не будут включены в какой-либо пакет передачи с помощью операции xor. Поэтому на практике вместо идеального распределения используется измененное распределение, «надежное распределение солитонов ». Эффект модификации, как правило, заключается в создании большего количества пакетов очень малой степени (около 1) и меньшего количества пакетов степени больше 1, за исключением всплеска пакетов при довольно большом количестве, выбранном для обеспечения того, чтобы все исходные блоки были включены в какой-то пакет. [4]