Kody Reeda–Solomona — definicja, korekcja błędów i zastosowania

Kody Reeda–Solomona: wyjaśnienie definicji, mechanizm korekcji błędów i praktyczne zastosowania w CD/DVD/Blu‑ray, transmisjach DSL, WiMAX, DVB i ATSC.

Autor: Leandro Alegsa

Korekcja błędów Reed-Solomon jest kodem korekcji błędów typu forward. Działa ona poprzez nadpróbkowanie wielomianu skonstruowanego z danych. Wielomian ten jest oceniany w kilku punktach, a wartości te są przesyłane lub zapisywane. Próbkowanie wielomianu częściej niż jest to konieczne powoduje, że wielomian jest nadpróbkowany. Tak długo, jak otrzymuje "wiele" punktów poprawnie, odbiornik może odzyskać oryginalny wielomian nawet w obecności "kilku" złych punktów.

Kody Reed-Solomon są używane w wielu różnych rodzajach zastosowań komercyjnych, na przykład w płytach CD, DVD i Blu-ray, w technologiach transmisji danych, takich jak DSL i WiMAX oraz w systemach nadawczych, takich jak DVB i ATSC.

Podstawy i parametry

Kody Reed–Solomona to bloki symboliczne zdefiniowane nad ciałem skończonym GF(2^m). Każdy symbol to m bitów; typowe praktyczne wartości to m = 8 (symbol = bajt). Maksymalna długość kodu wynosi n = 2^m − 1 symboli. Kod oznaczamy zwykle jako RS(n, k), gdzie k to liczba symboli danych, a n − k to liczba symboli nadmiarowych (parzystych kontrolnych).

  • Maksymalna liczba błędów: kod RS może skorygować do t = (n − k) / 2 błędów symbolowych (gdzie "błąd symbolowy" oznacza, że cały symbol — np. bajt — jest błędny).
  • Skracanie kodów: w praktyce często stosuje się kody skrócone (shortened), żeby dopasować długość bloku do konkretnego zastosowania.
  • Kod systematyczny: zwykle stosuje się wersję systematyczną, w której oryginalne symbole danych występują jawnie w kodzie, a symbole kontrolne są dołączone na końcu lub w z góry ustalonych pozycjach.

Jak to działa — intuicja

Wyobraźmy sobie, że z wiadomości tworzymy wielomian P(x) stopnia mniejszego niż k. Kodowanie polega na ocenieniu tego wielomianu w n różnych punktach ciała GF(2^m) i przesłaniu/ zapisaniu wartości P(x_i). Ponieważ ocenianych punktów jest więcej niż stopień wielomianu, przy braku błędów możliwa jest jednoznaczna rekonstrukcja przez interpolację. Jeśli część ocen jest uszkodzona (błędna), algorytmy dekodujące potrafią zlokalizować i skorygować do t błędnych symboli, a następnie odtworzyć oryginalny wielomian (i stąd dane).

Kodowanie

  • W najprostszym ujęciu tworzy się wielomian z k symboli danych (współczynniki wielomianu) i oblicza jego wartości w n punktach → otrzymuje się wektor długości n.
  • W implementacjach praktycznych częściej stosuje się schematy systematyczne: do danych dopisywane są n − k symboli kontrolnych obliczonych tak, by cały wektor spełniał równania kontrolne (np. transformacja DFT po polu skończonym lub algorytmy oparte na generatorze wielomianowym).

Dekodowanie — główne kroki i algorytmy

Proces dekodowania zwykle składa się z kilku etapów:

  • obliczenie syndromów (suma ważona odebranych symboli — wykrywa obecność błędów),
  • utworzenie wielomianu lokalizującego błędy (error locator),
  • znalezienie pozycji błędów (np. przez wyszukiwanie miejsc zerowych wielomianu lokalizującego przy pomocy tzw. Chien search),
  • obliczenie wartości błędów (magnitudes) i poprawienie symboli (np. algorytm Forneya).

Najczęściej stosowane algorytmy do konstrukcji wielomianu lokalizującego to algorytm Berlekamp–Massey lub podejście oparte na algorytmie Euklidesa dla wielomianów. W praktyce implementacje łączą szybkie wyszukiwanie miejsc zerowych z tablicami GF(2^m) dla przyspieszenia działań arytmetycznych.

Erasurey i kombinacje błędów/erasur

Reed–Solomon potrafi też obsługiwać sytuacje, gdy pozycje uszkodzone są znane (tzw. erasures). Zasadnicza nierówność dla możliwości korekcji to:

2e + s ≤ n − k,

gdzie e to liczba błędów (nieznane pozycje), a s to liczba erasures (znane pozycje). Z tego wynika, że erasures "kosztują" połowę zasobu korekcyjnego w porównaniu z błędami nieznanymi.

Przykłady i zastosowania praktyczne

  • W zastosowaniach z bajtami (m = 8) typowa maksymalna długość to n = 255. Popularnym przykładem jest RS(255,223) — różnica n − k = 32 daje t = 16, czyli korekcję do 16 błędnych bajtów na blok.
  • W praktyce kody RS często stosuje się w połączeniu z innymi metodami: interleaving (przeplataniem) rozprasza błędy skupione w czasie lub przestrzeni, a kodowanie konkatenowane (np. RS z kodem konwolucyjnym) zwiększa odporność na różne typy zakłóceń.
  • Typowe zastosowania to: płyty optyczne (CD/DVD/Blu‑ray), pamięci masowe i taśmy magnetyczne, kody kreskowe i dwuwymiarowe (np. QR), transmisje satelitarne i kosmiczne (deepspace), multicast i broadcast, a także systemy telekomunikacyjne. W wielu systemach (np. systemy nadawcze i łącza danych) RS pełni rolę kodu zewnętrznego w konfiguracji konkatenowanej.

Zalety i ograniczenia

  • Zalety: silna korekcja błędów symbolowych (np. całych bajtów), dojrzałe algorytmy dekodujące, możliwość korekcji erasures, elastyczność parametrów (n, k), dobre wsparcie sprzętowe i programowe.
  • Ograniczenia: operacje arytmetyczne po GF(2^m) mogą być kosztowne obliczeniowo (zwłaszcza dla dużych m), dekodowanie złożonych kombinacji błędów bardzo gęstych może wymagać dużych zasobów, a w przypadku bardzo długich bloków pojawiają się opóźnienia — stąd w praktyce stosuje się skracanie i interleaving.

Podsumowanie

Kody Reed–Solomon to uniwersalne, dobrze przeanalizowane kody blokowe oparte na interpolacji wielomianowej nad ciałami skończonymi. Dzięki możliwości korekcji błędów symbolowych i obsługi erasures znalazły szerokie zastosowanie w nośnikach pamięci, transmisji danych i systemach nadawczych. W praktycznych wdrożeniach dobiera się rozmiar symbolu, długość bloku i stopień nadmiarowości tak, by uzyskać odpowiedni kompromis między odpornością na błędy a narzutem i złożonością implementacji.

Przegląd

Kody Reeda-Solomona są kodami blokowymi. Oznacza to, że stały blok danych wejściowych jest przetwarzany na stały blok danych wyjściowych. W przypadku najczęściej używanego kodu R-S (255, 223) - 223 wejściowe symbole Reed-Solomona (każdy o długości ośmiu bitów) są kodowane w 255 symboli wyjściowych.

  • Większość schematów R-S ECC jest systematyczna. Oznacza to, że pewna część wyjściowego słowa kodowego zawiera dane wejściowe w ich oryginalnej postaci.
  • Rozmiar symbolu Reed-Solomon równy 8 bitom został wybrany, ponieważ dekodery dla większych rozmiarów symboli byłyby trudne do zaimplementowania w obecnej technologii. Ten wybór projektowy wymusza, aby najdłuższe słowo kodowe miało długość 255 symboli.
  • Standardowy (255, 223) kod Reeda-Solomona jest w stanie skorygować do 16 błędów symbolu Reeda-Solomona w każdym słowie kodowym. Ponieważ każdy symbol składa się z ośmiu bitów, oznacza to, że kod może skorygować do 16 krótkich błędów spowodowanych przez wewnętrzny dekoder konwolucyjny.

Kod Reeda-Solomona, podobnie jak kod konwolucyjny, jest kodem przezroczystym. Oznacza to, że jeśli symbole kanału zostały odwrócone gdzieś na linii, dekodery będą nadal działać. Wynik będzie uzupełnieniem oryginalnych danych. Kod Reed-Solomon traci jednak swoją przejrzystość, jeśli stosowane jest wypełnienie wirtualnym zerem. Z tego powodu jest obowiązkowe, aby sens danych (tzn. prawdziwy lub uzupełniony) został rozstrzygnięty przed dekodowaniem Reed-Solomon.

W przypadku programu Voyager kody R-S osiągają prawie optymalną wydajność, gdy są konkatenowane z wewnętrznym kodem (7, 1/2) konwolucyjnym (Viterbiego). Ponieważ dla każdego korygowanego błędu wymagane są dwa symbole kontrolne, daje to w sumie 32 symbole kontrolne i 223 symbole informacyjne na słowo kodowe.

Dodatkowo, słowa kodowe Reed-Solomon mogą być przeplatane na podstawie symboli przed zakodowaniem konwencjonalnym. Ponieważ to rozdziela symbole w słowie kodowym, staje się mniej prawdopodobne, że wybuch z dekodera Viterbiego zakłóca więcej niż jeden symbol Reed-Solomon w jednym słowie kodowym.

Podstawowa idea

Kluczową ideą kodu Reeda-Solomona jest to, że zakodowane dane są najpierw wizualizowane jako wielomian. Kod ten opiera się na twierdzeniu z algebry, które mówi, że dowolne k różnych punktów jednoznacznie określa wielomian stopnia co najwyżej k-1.

Nadawca określa wielomian stopnia k - 1 {displaystyle k-1}{\displaystyle k-1}, w skończonym polu, który reprezentuje k {displaystyle k} punktów danychk. Wielomian jest następnie "zakodowany" przez jego ocenę w różnych punktach, a te wartości są tym, co jest faktycznie wysyłane. Podczas transmisji, niektóre z tych wartości mogą zostać uszkodzone. Dlatego też w rzeczywistości wysyłanych jest więcej niż k punktów. Tak długo, jak wystarczająco dużo wartości są odbierane poprawnie, odbiornik może wydedukować, co było oryginalnym wielomianem i zdekodować oryginalne dane.

W tym samym sensie, że można poprawić krzywą przez interpolację obok luki, kod Reeda-Solomona może pokonać serię błędów w bloku danych, aby odzyskać współczynniki wielomianu, który narysował oryginalną krzywą.

Historia

Kod ten został wynaleziony w 1960 roku przez Irvinga S. Reeda i Gustave'a Solomona, którzy byli wówczas członkami MIT Lincoln Laboratory. Ich przełomowy artykuł nosił tytuł "Polynomial Codes over Certain Finite Fields". Gdy go pisali, technologia cyfrowa nie była jeszcze na tyle zaawansowana, by zaimplementować tę koncepcję. Pierwszym zastosowaniem kodów RS w masowej produkcji była w 1982 roku płyta kompaktowa, na której zastosowano dwa przeplatane kody RS. W 1969 roku Elwyn Berlekamp i James Massey opracowali efektywny algorytm dekodowania dla kodów RS o dużych odległościach. Obecnie kody RS są stosowane w dyskach twardych, płytach DVD, telekomunikacji i protokołach transmisji cyfrowych.



Przeszukaj encyklopedię
AlegsaOnline.com - 2020 / 2025 - License CC3