Kod kontroli parzystości o niskiej gęstości - Low-density parity-check code

W teorii informacji kod kontroli parzystości o niskiej gęstości ( LDPC ) jest kodem liniowej korekcji błędów , metodą przesyłania komunikatu przez zaszumiony kanał transmisyjny. LDPC jest konstruowany przy użyciu rzadkiego wykresu Tannera (podklasa wykresu dwudzielnego ). Kody LDPC są kodami zbliżającymi się do pojemności , co oznacza, że ​​istnieją praktyczne konstrukcje, które pozwalają na ustawienie progu szumu bardzo blisko teoretycznego maksimum ( limit Shannona ) dla symetrycznego kanału bez pamięci. Próg szumu określa górną granicę dla szumu kanału, do której prawdopodobieństwo utraty informacji może być tak małe, jak jest to pożądane. Używając iteracyjnych technik propagacji przekonań , kody LDPC mogą być dekodowane w czasie liniowo do ich długości bloku.

Kody LDPC znajdują coraz większe zastosowanie w aplikacjach wymagających niezawodnego i wysoce wydajnego transferu informacji przez łącza o ograniczonej przepustowości lub kanałach zwrotnych w obecności zakłócającego szumu. Implementacja kodów LDPC jest opóźniona w stosunku do innych kodów, w szczególności kodów turbo . Podstawowy patent na kody turbo wygasł 29 sierpnia 2013 r.

Kody LDPC są również znane jako kody Gallagera na cześć Roberta G. Gallagera , który opracował koncepcję LDPC w swojej pracy doktorskiej w Massachusetts Institute of Technology w 1960 roku.

Historia

Niepraktyczne do wdrożenia, gdy po raz pierwszy opracowane przez Gallagera w 1963 roku, kody LDPC zostały zapomniane aż do ponownego odkrycia jego pracy w 1996 roku. Kody Turbo , inna klasa kodów zbliżających się do pojemności, odkryta w 1993 roku, stały się schematem kodowania z wyboru pod koniec lat 90. aplikacje takie jak Deep Space Network i komunikacja satelitarna . Jednak postęp w zakresie kodów kontroli parzystości o niskiej gęstości sprawił, że przewyższały one kody turbo pod względem dolnego progu błędu i wydajności w wyższym zakresie współczynnika kodowania , pozostawiając kody turbo lepiej dostosowane tylko do niższych współczynników kodowania.

Aplikacje

W 2003 r. Kod LDPC typu nieregularnych powtórzeń akumulacji (IRA) pokonał sześć kodów turbo i stał się kodem korygującym błędy w nowym standardzie DVB-S2 dla satelitarnej transmisji telewizji cyfrowej . Komisja selekcyjna DVB-S2 dokonała oszacowań złożoności dekodera dla propozycji Turbo Code przy użyciu znacznie mniej wydajnej architektury szeregowego dekodera zamiast równoległej architektury dekodera. To zmusiło propozycje Turbo Code do używania rozmiarów ramek rzędu połowy rozmiaru ramki w propozycjach LDPC.

W 2008 roku pokonał LDPC kodów splotowych turbo jak Forward Error Correction systemu (FEC) dla ITU-T G.hn standardzie. G.hn wybrał kody LDPC zamiast kodów turbo ze względu na ich mniejszą złożoność dekodowania (zwłaszcza podczas pracy z szybkościami transmisji danych bliskimi 1,0 Gbit / s) oraz ponieważ proponowane kody turbo wykazywały znaczny dolny poziom błędu w pożądanym zakresie działania.

Kody LDPC są również używane w sieci Ethernet 10GBASE-T , która przesyła dane z szybkością 10 gigabitów na sekundę przez skrętkę. Począwszy od roku 2009, kody LDPC są również częścią Wi-Fi standardu 802.11 jako opcjonalne części 802.11n oraz 802.11ac , w dużej wydajności (HT) specyfikacji PHY.

Niektóre systemy OFDM dodają dodatkową zewnętrzną korekcję błędów, która naprawia sporadyczne błędy („dolny poziom błędu”), które przekraczają wewnętrzny kod korekcji LDPC, nawet przy niskich bitowych stopach błędów . Na przykład: Kod Reeda-Solomona z modulacją kodowaną LDPC (RS-LCM) wykorzystuje zewnętrzny kod Reeda-Solomona. Standardy DVB-S2, DVB-T2 i DVB-C2 wykorzystują zewnętrzny kod BCH do usuwania błędów resztkowych po dekodowaniu LDPC.

Użytkowanie operacyjne

Kody LDPC są funkcjonalnie definiowane przez rzadką macierz kontroli parzystości . Ta rzadka macierz jest często generowana losowo, z zastrzeżeniem ograniczeń rzadkości - konstrukcja kodu LDPC zostanie omówiona później . Kody te zostały po raz pierwszy zaprojektowane przez Roberta Gallagera w 1960 roku.

Poniżej znajduje się fragment wykresu przykładowego kodu LDPC przy użyciu notacji wykresu czynnikowego Forneya . Na tym wykresie n węzłów zmiennych w górnej części wykresu jest połączonych z ( n - k ) węzłami ograniczonymi na dole wykresu.

Jest to popularny sposób graficznego przedstawiania kodu ( n k ) LDPC. Bity ważnej wiadomości, umieszczone na T u góry wykresu, spełniają ograniczenia graficzne. W szczególności wszystkie linie łączące się ze zmiennym węzłem (ramka ze znakiem „=”) mają tę samą wartość, a wszystkie wartości łączące się z węzłem czynnika (ramka ze znakiem „+”) muszą sumować się, modulo dwa, do zera (w innymi słowy, muszą sumować się do liczby parzystej; lub musi istnieć parzysta liczba wartości nieparzystych).

Wykres współczynnika fragmentu kodu Ldpc graph.svg

Ignorując jakiekolwiek linie wychodzące z obrazu, istnieje osiem możliwych sześciobitowych ciągów odpowiadających poprawnym słowom kodowym: (tj. 000000, 011001, 110010, 101011, 111100, 100101, 001110, 010111). Ten fragment kodu LDPC reprezentuje trzy-bitowy komunikat zakodowany jako sześć bitów. W tym przypadku stosuje się nadmiarowość, aby zwiększyć szansę przywrócenia sprawności po błędach kanału. To jest kod liniowy (6, 3) , gdzie n  = 6 i k  = 3.

Ponownie ignorując linie wychodzące z obrazu, macierz kontroli parzystości reprezentująca ten fragment wykresu jest

W tej macierzy każdy wiersz reprezentuje jedno z trzech ograniczeń kontroli parzystości, podczas gdy każda kolumna reprezentuje jeden z sześciu bitów w odebranym słowie kodowym.

W tym przykładzie osiem słów kodowych można uzyskać, umieszczając macierz kontroli parzystości H w tej postaci za pomocą podstawowych operacji na wierszach w GF (2) :

Krok 1: H.

Krok 2: Wiersz 1 jest dodawany do wiersza 3.

Krok 3: Wiersze 2 i 3 są zamienione.

Krok 4: Wiersz 1 jest dodawany do wiersza 3.

Z tego macierz generatora G można otrzymać jako (zauważając, że w szczególnym przypadku jest to kod binarny ), a konkretnie:

Wreszcie, mnożąc wszystkie osiem możliwych 3-bitowych ciągów przez G , uzyskuje się wszystkie osiem ważnych słów kodowych. Na przykład słowo kodowe dla ciągu bitów „101” jest uzyskiwane przez:

,

gdzie jest symbolem mnożenia mod 2.

Dla sprawdzenia, przestrzeń wierszowa G jest prostopadła do H, taka że

Ciąg bitów „101” znajduje się w pierwszych 3 bitach słowa kodowego „101011”.

Przykładowy koder

Rysunek 1 ilustruje funkcjonalne komponenty większości koderów LDPC.

Rys. 1. Enkoder LDPC

Podczas kodowania ramki, bity danych wejściowych (D) są powtarzane i rozprowadzane do zestawu koderów składowych. Kodery składowe są zwykle akumulatorami, a każdy akumulator jest używany do generowania symbolu parzystości. Pojedyncza kopia oryginalnych danych (S 0, K-1 ) jest przesyłana z bitami parzystości (P) w celu utworzenia symboli kodowych. S bitów z każdego kodera składowego jest odrzucanych.

Bit parzystości może być użyty w innym kodzie składowym.

W przykładzie wykorzystującym kod 2/3 prędkości DVB-S2 zakodowany rozmiar bloku wynosi 64800 symboli (N = 64800) z 43200 bitami danych (K = 43200) i 21600 bitami parzystości (M = 21600). Każdy kod składowy (węzeł kontrolny) koduje 16 bitów danych, z wyjątkiem pierwszego bitu parzystości, który koduje 8 bitów danych. Pierwsze 4680 bitów danych jest powtarzanych 13 razy (używane w 13 kodach parzystości), podczas gdy pozostałe bity danych są używane w 3 kodach parzystości (nieregularny kod LDPC).

Dla porównania, klasyczne kody turbo zazwyczaj używają dwóch kodów składowych skonfigurowanych równolegle, z których każdy koduje cały blok wejściowy (K) bitów danych. Te kodery składowe są rekurencyjnymi kodami splotowymi (RSC) o umiarkowanej głębokości (8 lub 16 stanów), które są oddzielone elementem przeplatającym kod, który przeplata jedną kopię ramki.

W przeciwieństwie do tego, kod LDPC wykorzystuje równolegle wiele kodów składowych o małej głębokości (akumulatorów), z których każdy koduje tylko niewielką część ramki wejściowej. Wiele kodów składowych można postrzegać jako wiele „kodów splotowych” o małej głębokości (2 stany), które są połączone operacjami powtarzania i dystrybucji. Operacje powtarzania i dystrybucji pełnią funkcję układu przeplotu w kodzie turbo.

Możliwość bardziej precyzyjnego zarządzania połączeniami różnych kodów składowych i poziomem redundancji dla każdego bitu wejściowego zapewnia większą elastyczność w projektowaniu kodów LDPC, co w niektórych przypadkach może prowadzić do lepszej wydajności niż kody turbo. Turbo kody nadal wydają się działać lepiej niż LDPC przy niskich szybkościach kodowania, a przynajmniej projektowanie dobrze działających kodów o niskiej szybkości jest łatwiejsze w przypadku Turbo Codes.

W praktyce sprzęt, który tworzy akumulatory, jest ponownie używany podczas procesu kodowania. Oznacza to, że po wygenerowaniu pierwszego zestawu bitów parzystości i przechowywaniu bitów parzystości, ten sam sprzęt akumulatora jest używany do generowania następnego zestawu bitów parzystości.

Rozszyfrowanie

Podobnie jak w przypadku innych kodów, dekodowanie kodu LDPC z maksymalnym prawdopodobieństwem w binarnym kanale symetrycznym jest problemem NP-zupełnym . Wykonywanie optymalnego dekodowania dla NP-pełnego kodu dowolnego użytecznego rozmiaru nie jest praktyczne.

Jednak nieoptymalne techniki oparte na iteracyjnym dekodowaniu propagacji przekonań dają doskonałe wyniki i można je praktycznie wdrożyć. Techniki dekodowania suboptymalnego postrzegają każdą kontrolę parzystości, która tworzy LDPC, jako niezależny pojedynczy kod kontroli parzystości (SPC). Każdy kod SPC jest dekodowany oddzielnie przy użyciu technik soft-in-soft-out (SISO), takich jak SOVA , BCJR , MAP i inne ich pochodne. Informacje dotyczące miękkich decyzji z każdego dekodowania SISO są sprawdzane krzyżowo i aktualizowane z innymi nadmiarowymi dekodowaniami SPC tego samego bitu informacji. Każdy kod SPC jest następnie ponownie dekodowany przy użyciu zaktualizowanej informacji dotyczącej decyzji miękkiej. Ten proces jest powtarzany aż do uzyskania prawidłowego słowa kodowego lub wyczerpania dekodowania. Ten typ dekodowania jest często określany jako dekodowanie iloczynu sumarycznego.

Dekodowanie kodów SPC jest często określane jako przetwarzanie „węzła kontrolnego”, a sprawdzanie krzyżowe zmiennych jest często określane jako przetwarzanie „węzła zmiennego”.

W praktycznej implementacji dekodera LDPC zestawy kodów SPC są dekodowane równolegle w celu zwiększenia przepustowości.

W przeciwieństwie do tego propagacja przekonań w kanale binarnym wymazywania jest szczególnie prosta, gdy obejmuje iteracyjne spełnianie ograniczeń.

Na przykład, weźmy pod uwagę, że prawidłowe słowo kodowe 101011 z powyższego przykładu jest transmitowane przez kanał binarnego wymazywania i odbierane z pierwszym i czwartym bitem wymazanym, dając wynik <01> 11. Ponieważ przesłany komunikat musi spełniać ograniczenia kodu, komunikat można przedstawić, zapisując odebrany komunikat na górze wykresu czynnikowego.

W tym przykładzie nie można jeszcze odzyskać pierwszego bitu, ponieważ wszystkie związane z nim ograniczenia mają więcej niż jeden nieznany bit. Aby kontynuować dekodowanie wiadomości, muszą zostać zidentyfikowane ograniczenia łączące się tylko z jednym z wymazanych bitów. W tym przykładzie wystarczy tylko drugie ograniczenie. Badając drugie ograniczenie, czwarty bit musiał mieć wartość zero, ponieważ tylko zero w tej pozycji spełniałoby to ograniczenie.

Ta procedura jest następnie powtarzana. Nowa wartość dla czwartego bitu może być teraz używana w połączeniu z pierwszym ograniczeniem w celu odzyskania pierwszego bitu, jak pokazano poniżej. Oznacza to, że pierwszy bit musi być taki, aby spełnić ograniczenie znajdujące się po lewej stronie.

Wykres współczynnika fragmentu kodu Ldpc wymazuje krok dekodowania 2.svg

W ten sposób wiadomość może być dekodowana iteracyjnie. W przypadku innych modeli kanałów komunikaty przekazywane między węzłami zmiennymi a węzłami kontrolnymi są liczbami rzeczywistymi , które wyrażają prawdopodobieństwo i prawdopodobieństwo przekonania.

Wynik ten można zweryfikować mnożąc poprawione słowo kodowe r przez macierz kontroli parzystości H :

Ponieważ wynikiem z ( syndromem ) tej operacji jest wektor zerowy trzy × jeden, otrzymane słowo kodowe r zostało pomyślnie zweryfikowane.

Po zakończeniu dekodowania, oryginalne bity '101' wiadomości mogą być wyodrębnione, patrząc na pierwsze 3 bity słowa kodowego.

Chociaż jest to ilustracyjne, ten przykład wymazywania nie pokazuje zastosowania dekodowania decyzji miękkiej lub przekazywania komunikatu decyzji miękkiej, które jest stosowane w praktycznie wszystkich komercyjnych dekoderach LDPC.

Aktualizowanie informacji o węźle

W ostatnich latach wykonano również wiele pracy poświęconej badaniu skutków alternatywnych harmonogramów aktualizacji węzłów zmiennych i węzłów z ograniczeniami. Oryginalna technika, która była używana do dekodowania kodów LDPC, była nazywana zalewaniem . Ten typ aktualizacji wymagał, aby przed aktualizacją węzła zmiennego wszystkie węzły z ograniczeniami musiały zostać zaktualizowane i odwrotnie. W późniejszej pracy Vila Casado i wsp. , zbadano alternatywne techniki aktualizacji, w których zmienne węzły są aktualizowane najnowszymi dostępnymi informacjami o węzłach kontrolnych.

Intuicja stojąca za tymi algorytmami jest taka, że ​​węzły zmienne, których wartości różnią się najbardziej, to te, które muszą zostać zaktualizowane jako pierwsze. Wysoce niezawodne węzły, których wielkość współczynnika wiarygodności logarytmicznej (LLR) jest duża i nie zmienia się znacząco od jednej aktualizacji do następnej, nie wymagają aktualizacji z taką samą częstotliwością jak inne węzły, których znak i wielkość wahają się w szerszym zakresie. Te algorytmy planowania wykazują większą szybkość zbieżności i niższe progi błędów niż te, które wykorzystują zalewanie. Te niższe progi błędów są osiągane dzięki zdolności algorytmu Informed Dynamic Scheduling (IDS) do pokonywania zestawów pułapkowania bliskich słów kodowych.

Gdy używane są nieprzepływowe algorytmy planowania, używana jest alternatywna definicja iteracji. Dla kodu ( n k ) LDPC o szybkości k / n , pełna iteracja występuje, gdy zaktualizowano n zmiennych i n  -  k węzłów ograniczających, niezależnie od kolejności ich aktualizacji.

Budowa kodu

W przypadku bloków o dużych rozmiarach kody LDPC są zwykle konstruowane poprzez badanie zachowania dekoderów. Ponieważ rozmiar bloku dąży do nieskończoności, można wykazać, że dekodery LDPC mają próg szumu, poniżej którego dekodowanie jest niezawodnie osiągane, a powyżej którego dekodowanie nie jest osiągane, potocznie określane jako efekt klifu . Ten próg można zoptymalizować, znajdując najlepszą proporcję łuków z węzłów kontrolnych i łuków ze zmiennych węzłów. Przybliżonym graficznym podejściem do wizualizacji tego progu jest wykres EXIT .

Konstrukcja określonego kodu LDPC po tej optymalizacji można podzielić na dwa główne typy technik:

  • Podejścia pseudolosowe
  • Podejścia kombinatoryczne

Konstrukcja metodą pseudolosową opiera się na wynikach teoretycznych, że w przypadku dużych bloków konstrukcja losowa zapewnia dobrą wydajność dekodowania. Ogólnie rzecz biorąc, kody pseudolosowe mają złożone kodery, ale kody pseudolosowe z najlepszymi dekoderami mogą mieć proste kodery. Często stosuje się różne ograniczenia, aby pomóc zapewnić, że pożądane właściwości oczekiwane przy teoretycznej granicy nieskończonej wielkości bloku występują przy skończonej wielkości bloku.

Podejścia kombinatoryczne można zastosować do optymalizacji właściwości kodów LDPC o małych blokach lub do tworzenia kodów za pomocą prostych koderów.

Niektóre kody LDPC są oparte na kodach Reeda-Solomona , na przykład kod RS-LDPC używany w standardzie 10 Gigabit Ethernet . W porównaniu z losowo generowanymi kodami LDPC, ustrukturyzowane kody LDPC - takie jak kod LDPC używany w standardzie DVB-S2 - mogą mieć prostszy, a zatem tańszy sprzęt - w szczególności kody zbudowane w taki sposób, że macierz H jest macierzą obiegową .

Jeszcze innym sposobem konstruowania kodów LDPC jest użycie skończonych geometrii . Metodę tę zaproponowali Y. Kou i wsp. w 2001.

Kody LDPC a kody Turbo

Kody LDPC można porównać z innymi potężnymi schematami kodowania, np. Kodami Turbo. Z jednej strony na wydajność BER kodów Turbo wpływają ograniczenia niskich kodów. Kody LDPC nie mają ograniczeń dotyczących minimalnej odległości, co pośrednio oznacza, że ​​kody LDPC mogą być bardziej wydajne przy stosunkowo dużych szybkościach kodu (np. 3/4, 5/6, 7/8) niż kody Turbo. Jednak kody LDPC nie zastępują w całości: kody Turbo są najlepszym rozwiązaniem przy niższych współczynnikach kodu (np. 1/6, 1/3, 1/2).

Zobacz też

Ludzie

Teoria

Aplikacje

Inne kody zbliżające się do pojemności

Bibliografia

Zewnętrzne linki