W algorytmie Welcha-Berlekampa do dekodowania kodów Reeda-Solomona podaje się listę punktów reprezentujących komunikat z błędami na w nieznanych lokalizacjach (i otrzymuje się do algorytmu). Wyjście jest wielomianem przechodzącym przez wszystkie podane punkty z wyjątkiem tych, w których wystąpiły błędy.
Metoda polega na rozwiązaniu układu równań liniowych formy
dla wszystkich gdzie ma stopień a ma stopień co najwyżej . Zmienne są współczynnikami i .
Aby upewnić się, że ma stopień zwykle dodaje się ograniczenie, że współczynnik wynosi 1 do układu liniowego powyżej. W praktyce jednak niekoniecznie wiadomo . Jednym nieefektywnym (ale wciąż wielomianowym sposobem) radzeniem sobie z tym jest wypróbowanie dla wszystkich wartości zaczynających się od , aż do znalezienia rozwiązania.
Moje pytanie brzmi: czy istnieje bardziej skuteczny sposób na określenie ? Alternatywnie, czy istnieje modyfikacja układu liniowego, która pozwala na użycie górnej granicy na zamiast dokładnej wartości?
W szczególności chcę użyć tego konkretnego dekodera dla kodów Reeda-Solomona, a nie zupełnie innego algorytmu opartego na innych technikach.
W odpowiedzi na odpowiedź DW, oto mój działający przykład. Wszystko odbywa się modulo 7.
plain message is: [2, 3, 2]
polynomial is: 2 + 3 t^1 + 2 t^2
encoded message is: [[0, 2], [1, 0], [2, 2], [3, 1], [4, 4]]
corrupted message is: [[0, 2], [1, 0], [2, 3], [3, 1], [4, 4]]
Zatem błąd tkwi w trzecim punkcie.
Gdy omawiane równanie wielomianowe wynosi
Podłączenie daje układ w postaci macierzy:
[2, 0, 0, 6, 0, 0, 0, 0, 0]
[0, 0, 0, 6, 6, 6, 6, 6, 0]
[3, 6, 5, 6, 5, 3, 6, 5, 0]
[1, 3, 2, 6, 4, 5, 1, 3, 0]
[4, 2, 1, 6, 3, 5, 6, 3, 0]
[0, 0, 1, 0, 0, 0, 0, 0, 1]
Ostatni wiersz jest ograniczeniem, że . Stosując eliminację Gaussa otrzymujemy
[1, 0, 0, 0, 0, 0, 1, 4, 0]
[0, 1, 0, 0, 0, 0, 3, 3, 1]
[0, 0, 1, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 1, 0, 0, 2, 1, 0]
[0, 0, 0, 0, 1, 0, 2, 2, 5]
[0, 0, 0, 0, 0, 1, 4, 5, 2]
I wybierając 1 dla obu wolnych zmiennych otrzymujemy wektor rozwiązania
[2, 2, 1, 4, 1, 0, 1, 1]
Co przekłada się na
E is 2 + 2 t^1 + 1 t^2
Q is 4 + 1 t^1 + 0 t^2 + 1 t^3 + 1 t^4
I nie dzieli . Zauważ, że współczynniki jak
Dla mam dobre rozwiązanie:
system is:
[2, 0, 6, 0, 0, 0, 0]
[0, 0, 6, 6, 6, 6, 0]
[3, 6, 6, 5, 3, 6, 0]
[1, 3, 6, 4, 5, 1, 0]
[4, 2, 6, 3, 5, 6, 0]
[0, 1, 0, 0, 0, 0, 1]
reduced system is:
[1, 0, 0, 0, 0, 0, 5]
[0, 1, 0, 0, 0, 0, 1]
[0, 0, 1, 0, 0, 0, 3]
[0, 0, 0, 1, 0, 0, 3]
[0, 0, 0, 0, 1, 0, 6]
[0, 0, 0, 0, 0, 1, 2]
solution is [5, 1, 3, 3, 6, 2]
Q is 3 + 3 t^1 + 6 t^2 + 2 t^3
E is 5 + 1 t^1
P(x) = 2 + 3 t^1 + 2 t^2 # this is correct!
r(x) = 0
Zauważ, że chociaż powyższy kontrprzykład został wygenerowany przez kod, który napisałem od zera (była to zasadniczo pierwsza rzecz, której próbowałem), można sprawdzić, czy rozwiązania są poprawne ręcznie, więc nawet jeśli mój kod jest wadliwy, nadal jest prawidłowym kontrprzykładem do roszczenia że użycie działa.