Teoria informacji/TI Ćwiczenia 10: Różnice pomiędzy wersjami
m Zastępowanie tekstu – „ </math>” na „</math>” |
|||
(Nie pokazano 3 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 42: | Linia 42: | ||
{{rozwiazanie||| | {{rozwiazanie||| | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Linia 47: | Linia 48: | ||
</div> | </div> | ||
</div> | </div> | ||
Linia 55: | Linia 56: | ||
{{rozwiazanie||| | {{rozwiazanie||| | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Linia 60: | Linia 62: | ||
</div> | </div> | ||
</div> | </div> | ||
Linia 67: | Linia 69: | ||
{{rozwiazanie||| | {{rozwiazanie||| | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Linia 73: | Linia 76: | ||
</div> | </div> | ||
</div> | </div> | ||
=== Kody liniowe === | === Kody liniowe === | ||
Linia 84: | Linia 86: | ||
{{rozwiazanie||| | {{rozwiazanie||| | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Linia 91: | Linia 94: | ||
: Dwa najmniejsze przykłady już znamy: kod idealny (3,1,3) to trzykrotne powtórzenie każdego bitu, kod idealny (7,4,3) to kod Hamminga (7,4). | : Dwa najmniejsze przykłady już znamy: kod idealny (3,1,3) to trzykrotne powtórzenie każdego bitu, kod idealny (7,4,3) to kod Hamminga (7,4). | ||
</div> | </div> | ||
</div> | </div> | ||
Linia 98: | Linia 101: | ||
{{rozwiazanie||| | {{rozwiazanie||| | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
32 bity korygujące błędy oznaczają, że na każde słowo kodowe przypada <math>2^{32}-1</math> słów, które nie są kodowe. | 32 bity korygujące błędy oznaczają, że na każde słowo kodowe przypada <math>2^{32}-1</math> słów, które nie są kodowe. | ||
Dla każdego słowa kodowego w odległości 1 od niego znajduje się 256 słów, w odległości 2: <math>{256 \choose 2} \approx 2^{31}</math> słów, a w odległości 3 <math>{256 \choose 3} > 2^{45} </math> słów. Przy optymalnym rozmieszczeniu słów kodowych można zatem umożliwić korekcję maksymalnie 2 błędów w każdym bloku 256 bitów. Kod ten zatem nie potrafi poprawnie odczytywać danych już przy 1% szumów. | Dla każdego słowa kodowego w odległości 1 od niego znajduje się 256 słów, w odległości 2: <math>{256 \choose 2} \approx 2^{31}</math> słów, a w odległości 3 <math>{256 \choose 3} > 2^{45}</math> słów. Przy optymalnym rozmieszczeniu słów kodowych można zatem umożliwić korekcję maksymalnie 2 błędów w każdym bloku 256 bitów. Kod ten zatem nie potrafi poprawnie odczytywać danych już przy 1% szumów. | ||
</div> | </div> | ||
</div> | </div> | ||
=== LDPC - macierze parzystości małej gęstości === | === LDPC - macierze parzystości małej gęstości === | ||
Linia 115: | Linia 116: | ||
{{rozwiazanie||| | {{rozwiazanie||| | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Linia 120: | Linia 122: | ||
</div> | </div> | ||
</div> | </div> | ||
Linia 127: | Linia 129: | ||
{{rozwiazanie||| | {{rozwiazanie||| | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Linia 132: | Linia 135: | ||
</div> | </div> | ||
</div> | </div> | ||
{{cwiczenie|[Wydajność kodów LDPC]|Ćwiczenie 8| | {{cwiczenie|[Wydajność kodów LDPC]|Ćwiczenie 8| | ||
Udowodnij, że z dużym prawdopodobieństwem minimalna odległość między dowolną parą słów kodowych wynosi co najmniej <math>\frac{k}{\log n}</math>.}} | Udowodnij, że z dużym prawdopodobieństwem minimalna odległość między dowolną parą słów kodowych wynosi co najmniej <math>\frac{k}{\log n}</math>.}} |
Aktualna wersja na dzień 10:47, 5 wrz 2023
Kod Hamminga (7,4)
Projektowaniem efektywnych kodów korygujących błędy zajmuje się dziedzina informatyki nazywana teorią kodów. Zwykle projektowanie kodu oznacza znalezienie kompromisu między efektywnością kodu i jego prostotą (mierzoną zarówno jako stopień złożoności samego algorytmu kodowania i dekodowania, jak i mocą obliczeniową potrzebną do tych operacji). Szczególnie użytecznymi kodami, ze względu na zwięzłość ich definicji, są kody liniowe.
Definicja [Kod liniowy]
Kod liniowy długości i rzędu to dowolna liniowa podprzestrzeń wymiaru w przestrzeni wektorowej , gdzie jest skończonym ciałem. Przestrzeń definiuje zestaw poprawnych słów kodowych.
Bazę tej przestrzeni (w postaci wektorów długości ) zapisuje się często w postaci macierzy generującej kodu.
Na tych ćwiczeniach będziemy się zajmować tylko ciałem , czyli operacjami modulo 2.
Przykładem prostego kodu liniowego nad ciałem jest Kod Hamminga (7,4). Koduje on czterobitowe wiadomości przy użyciu siedmiobitowych słów w ten sposób, że minimalna odległość Hamminga pomiędzy słowami kodowymi wynosi 3. Dzięki temu przekłamanie jednego bitu w każdym słowie może zostać zawsze wykryte i naprawione (czyli poprawny przekaz wiadomości jest możliwy gdy ilość błędów nie przekroczy 14%).
Macierz generująca tego kodu wygląda następująco:
Macierz wykrywania błędów dla tego kodu wygląda następująco:
Aby zakodować czterobitową wiadomość mnoży się ją przez macierz (wyliczając każdy współczynnik modulo 2). Uzyskane siedmiobitowe słowo przesyła się następnie przez kanał. Odbiorca mnoży otrzymaną wiadomość przez macierz wykrywania błędów , uzyskując wektor o długości trzech bitów. Jeśli ten wektor jest zerowy, oznacza to, że nie nastąpiło żadne przekłamanie (bądź nastąpiło ich więcej niż 2, czego przy uzyciu tego kodu może nie dać się wykryć). Jeśli wektor jest różny od zerowego, wektor odczytany jako liczba binarna wskazuje, na którym bicie nastąpiło przekłamanie - wystarczy zatem odwrócić wartość tego bitu, aby uzyskać pierwotną wiadomość. W przypadku, gdy w bloku nastąpiło więcej niż jedno przekłamanie, końcowy wynik może być oczywiście nieprawidłowy.
Ćwiczenie [Dekodowanie kodu (7,4)]
Udowodnij, że jeśli nie nastąpiło przekłamanie, iloczyn macierzy wykrywania błędów i przesłanego wektora zawsze jest zerowy.
Rozwiązanie
Ćwiczenie [Sygnatura błędu]
Pokaż, że jeśli nastąpiło jedno przekłamanie, iloczyn macierzy wykrywania błędów i przesłanego wektora wskazuje pozycję, na której to przekłamanie nastąpiło.
Rozwiązanie
Ćwiczenie [Jakość przekazu]
Rozwiązanie
Kody liniowe
Ćwiczenie [Idealne kody]
Kodem nazywamy kod liniowy, w którym -bitowe słowa są zapisywane na bitach, a minimalna odległość pomiędzy słowami kodowymi wynosi .
- a) Ile maksymalnie błędów może poprawiać taki kod?
- b) Jaką nierówność muszą spełniać wartości , i , aby taki kod mógł istnieć?
- c) Kod nazwiemy idealnym, gdy może poprawiać błędów i każde słowo jest w odległości co najwyżej od najbliższego słowa kodowego. Dla jakich wartości mogą istnieć kody idealne poprawiające 1 błąd?
Rozwiązanie
Ćwiczenie [Szacowanie efektywnosci]
Rozwiązanie
LDPC - macierze parzystości małej gęstości
Jedną z metod generowania efektywnych kodów blokowych jest metoda LDPC. W metodzie tej na n-bitowe słowo nakładanych jest k losowych restrykcji postaci , gdzie oznacza i-ty bit słowa kodowego. Parametry k i p są dobrane tak, aby każdego bitu dotyczyła co najmniej jedna restrykcja. Kod tworzony jest tylko przez słowa spełniające wszystkie restrykcje.
Ćwiczenie [Kod LDPC jest liniowy]
Rozwiązanie
Ćwiczenie [Szybkość kodów LDPC]
Rozwiązanie
Ćwiczenie [Wydajność kodów LDPC]