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.