Кіріспе

Компьютерлік ғылымда Люби трансформациясы кодтары (LT кодтары) – өшіруді оңтайлы түзету кодтарына жақын тұратын практикалық фонтан кодтарының алғашқы класы. Олар 1998 жылы Майкл Любимен ойлап табылып, 2002 жылы жарияланды. Басқа фонтан кодтары сияқты, LT кодтары да кодтау және декодтау жылдамдығы үшін қабылдау артықшылығын екі жақты графтар арқылы алмастырады. LT кодтарының ерекшелігі – хабарламаны кодтау және декодтау үшін эксклюзивті немесе операциясына негізделген өте қарапайым алгоритмді қолдану болып табылады. LT кодтары – жылдамдықсыз, себебі кодтау алгоритмі теориялық тұрғыдан шексіз көп хабарлама пакеттерін (яғни, хабарламаны декодтау үшін қабылдануы тиіс пакеттердің үлесі кез келгендей кішкентай болуы мүмкін) өндіре алады. Олар өшіруді түзету кодтары, өйткені оларды өшіру арнасы арқылы цифрлық деректерді сенімді түрде беру үшін пайдалануға болады. LT кодтарынан кейінгі буын – Raptor кодтары (мысалы, IETF RFC 5053 немесе IETF RFC 6330 қараңыз), олардың кодтау және декодтау уақыты сызықтық. Raptor кодтары негізінен LT кодтарына негізделген, яғни Raptor кодтарын кодтау екі кезеңді қамтиды, олардың екінші кезеңі LT кодтау болып табылады. Сол сияқты, Raptor кодтарымен декодтау негізінен LT декодтауға сүйенеді, бірақ LT декодтау одан да жетілдірілген декодтау техникаларымен үйлеседі. IETF RFC 6330-да сипатталған RaptorQ коды – ең жетілдірілген фонтан коды, ол LT кодын ғана пайдаланумен салыстырғанда әлдеқайда жоғары декодтау ықтималдығына және өнімділікке ие.

Неге LT кодын қолдану керек?

Деректерді өшіру арнасы арқылы берудің дәстүрлі схемасы үздіксіз екі жақты байланысқа тәуелді. Жіберуші ақпаратты кодтап, пакет жібереді. Қабылдаушы алынған пакетті декодтауға тырысады. Егер декодтау мүмкін болса, қабылдаушы жіберушіге қуаттау хабарламасын жібереді. Әйтпесе, қабылдаушы жіберушіден пакетті қайта жіберуді сұрайды. Бұл екі жақты процесс хабарламадағы барлық пакеттер сәтті берілгенше жалғасады. Кейбір желілер, мысалы, ұялы сымсыз хабар тарату желілері кері байланыс арнасына ие болмайды. Бұл желілердегі қолданбалардың сенімді болуы қажет. Фонтандық кодтар, жалпы алғанда, және LT кодтары, атап айтқанда, бір бағытты байланыс протоколын қабылдау арқылы бұл мәселені шешеді. Жіберуші ақпаратты пакеттеп, бірінен соң бірін жібереді. Қабылдаушы әрбір пакетті алған кезде бағалайды. Егер қателік болса, қате пакет жойылады. Әйтпесе, пакет хабарламаның бір бөлігі ретінде сақталады. Соңында қабылдаушыда бүкіл хабарламаны қайта құруға жеткілікті жарамды пакеттер жиналады. Барлық хабарлама сәтті қабылданғанда, қабылдаушы берудің аяқталғанын хабарлайды. Жоғарыда айтылғандай, IETF RFC 6330 стандартында сипатталған RaptorQ коды LT кодынан жақсы нәтижелер көрсетеді.

LT кодтау

Декодтау процесі кодталған хабарламаны алу үшін "ексклюзивті немесе" операциясын қолданады. Егер ағымдағы пакет таза болмаса немесе ол бұрын өңделген пакетті қайталаса, ағымдағы пакет жойылады. Егер қазіргі таза алынған пакет d > 1 дәрежелі болса, ол алдымен хабар кезегі аймағындағы толық декодталған барлық блоктармен (келесі қадамда толық сипатталғандай) өңделеді, содан кейін буферлік аймақта сақталады, егер оның төмендетілген дәрежесі 1-ден жоғары болса. d = 1 дәрежелі жаңа, таза пакет (блок Mi) алынғанда (немесе алдыңғы қадамда ағымдағы пакеттің дәрежесі 1-ге дейін төмендетілсе), ол хабарлама кезегіне орналастырылады, содан кейін буферде орналасқан d > 1 дәрежелі барлық пакеттермен салыстырылады. Ол Mi арқылы кодталған кез келген буферленген пакеттің дерек бөлігіне эксклюзивті түрде қосылады, сәйкес пакеттердің дәрежесі азайтылады және осы пакеттердің индекс тізімі Mi қолданылғанын көрсету үшін түзетіледі. Бұл процесс буфердегі d = 2 дәрежелі блокты ашқанда, бұл блок 1 дәрежеге дейін азайтылады және өз кезегінде хабарлама кезегіне көшіріледі, содан кейін буферде қалған пакеттерге қатысты өңделеді. Хабардың барлық n блогы хабарлама кезегіне орналастырылған аймаққа жылжытылған кезде, қабылдаушы хабардың сәтті декодталғандығын хабарлайтын сигнал береді. Бұл декодтау процедурасы A ⊕ A = 0 кез келген A биттік тізбегі үшін жұмыс істейді. d - 1 бөлек блоктар d дәрежелі пакетке эксклюзивті түрде қосылғаннан кейін, сәйкес келмеген блоктың бастапқы кодталмаған мазмұны ғана қалады. Символдармен мынадай:

Вариациялар

Жоғарыда сипатталған кодтау және декодтау процестерінің бірнеше нұсқасын жасау мүмкін. Мысалы, әрбір пакеттің басына нақты хабарлама блогының индекстерінің тізімі {i1, i2, …, id} қоюдың орнына, кодтаушы индекстер тізімін құру үшін пайдаланылатын псевдокездейі сан генераторының (PRNG) немесе индекс кестесінің бастамасы ретінде қызмет ететін қысқа "кілт" жіберуі мүмкін. Осы RNG немесе индекс кестесімен жабдықталған қабылдағыш осы бастамадан индекстердің "кездейсоқ" тізімін сенімді түрде қайта жасай алатындықтан, декодтау процесін сәтті аяқтауға болады. Басқаша айтқанда, орташа дәрежесі төмен қарапайым LT кодын сенімді қателерді түзету кодын қосу арқылы, тәжірибеде жақсартылған LT кодынан артық болатын raptor кодын құрастыруға болады.