Lewati ke konten utama

Bagian 8.4 Pendekodean Efisien

Sekarang kita telah sampai pada tahap ketika kita dapat membangkitkan kode linear yang mendeteksi dan mengoreksi kesalahan dengan cukup mudah, tetapi mendekode tupel-\(n\) yang diterima dan menentukan kata kode terdekat masih merupakan proses yang memakan waktu, sebab tupel-\(n\) yang diterima harus dibandingkan dengan setiap kata kode yang mungkin untuk menentukan pendekodean yang tepat. Hal ini dapat menjadi kendala serius jika kodenya sangat besar.

Contoh 8.4.1.

Diberikan matriks biner
\begin{equation*} H = \begin{pmatrix} 1 & 1 & 1 & 0 & 0 \\ 0 & 1 & 0 & 1 & 0 \\ 1 & 0 & 0 & 0 & 1 \end{pmatrix} \end{equation*}
serta tupel-\(5\) \({\mathbf x} = (\codeword{11011})^\transpose\) dan \({\mathbf y} = (\codeword{01011})^\transpose\text{,}\) kita dapat menghitung
\begin{equation*} H{\mathbf x} = \begin{pmatrix} 0 \\ 0 \\ 0 \end{pmatrix} \qquad \text{dan} \qquad H{\mathbf y} = \begin{pmatrix} 1 \\ 0 \\ 1 \end{pmatrix}\text{.} \end{equation*}
Jadi, \({\mathbf x}\) merupakan kata kode, sedangkan \({\mathbf y}\) bukan, sebab \({\mathbf x}\) berada dalam ruang nol, sedangkan \({\mathbf y}\) tidak. Perhatikan bahwa \(H{\mathbf y}\) identik dengan kolom pertama \(H\text{.}\) Sesungguhnya, pada posisi inilah kesalahan terjadi. Jika kita membalik bit pertama dalam \({\mathbf y}\) dari \(0\) menjadi \(1\text{,}\) kita memperoleh \({\mathbf x}\text{.}\)
Jika \(H\) merupakan matriks \(m \times n\) dan \({\mathbf x} \in {\mathbb Z}_2^n\text{,}\) maka kita mengatakan bahwa sindrom dari \({\mathbf x}\) adalah \(H{\mathbf x}\text{.}\) Proposisi berikut memungkinkan pendeteksian dan pengoreksian kesalahan secara cepat.

Bukti.

Pembuktian ini diperoleh dari fakta bahwa
\begin{equation*} H{\mathbf x} = H({\mathbf c} +{\mathbf e}) = H{\mathbf c} + H{\mathbf e} = {\mathbf 0} + H{\mathbf e} = H{\mathbf e}\text{.} \end{equation*}
Proposisi ini menunjukkan bahwa sindrom suatu kata yang diterima hanya bergantung pada kesalahannya, bukan pada kata kode yang ditransmisikan. Pembuktian teorema berikut langsung diperoleh dari Proposisi 8.4.2 dan dari fakta bahwa \(H{\mathbf e}\) merupakan kolom ke-\(i\) dari matriks \(H\text{.}\)

Contoh 8.4.4.

Tinjau matriks
\begin{equation*} H = \begin{pmatrix} 1 & 0 & 1 & 1 & 0 & 0 \\ 0 & 1 & 1 & 0 & 1 & 0 \\ 1 & 1 & 1 & 0 & 0 & 1 \end{pmatrix} \end{equation*}
dan misalkan tupel-\(6\) \({\mathbf x} = (\codeword{111110})^\transpose\text{,}\) \({\mathbf y} = (\codeword{111111})^\transpose\text{,}\) dan \({\mathbf z} = (\codeword{010111})^\transpose\) telah diterima. Maka
\begin{equation*} H{\mathbf x} = \begin{pmatrix} 1 \\ 1 \\ 1 \end{pmatrix}, H{\mathbf y} = \begin{pmatrix} 1 \\ 1 \\ 0 \end{pmatrix}, H{\mathbf z} = \begin{pmatrix} 1 \\ 0 \\ 0 \end{pmatrix}\text{.} \end{equation*}
Jadi, \({\mathbf x}\) memiliki kesalahan pada bit ketiga dan \({\mathbf z}\) memiliki kesalahan pada bit keempat. Kata kode yang ditransmisikan untuk \({\mathbf x}\) dan \({\mathbf z}\) masing-masing pasti adalah \((\codeword{110110})\) dan \((\codeword{010011})\text{.}\) Sindrom \({\mathbf y}\) tidak muncul pada kolom mana pun dari matriks \(H\text{,}\) sehingga pasti terjadi beberapa kesalahan yang menghasilkan \({\mathbf y}\text{.}\)

Subbagian 8.4.1 Pendekodean Koset

Kita dapat menggunakan teori grup untuk memperoleh cara lain dalam mendekode pesan. Suatu kode linear \(C\) merupakan subgrup dari \({\mathbb Z}_2^n\text{.}\) Pendekodean koset atau pendekodean standar menggunakan koset-koset \(C\) dalam \({\mathbb Z}_2^n\) untuk menerapkan pendekodean kemungkinan maksimum. Misalkan \(C\) adalah kode linear \((n,m)\text{.}\) Suatu koset \(C\) dalam \({\mathbb Z}_2^n\) dituliskan dalam bentuk \({\mathbf x} + C\text{,}\) dengan \({\mathbf x} \in {\mathbb Z}_2^n\text{.}\) Berdasarkan Teorema Lagrange (Teorema 6.2.2), terdapat \(2^{n - (n - m)} = 2^m\) koset berbeda dari \(C\) dalam \({\mathbb Z}_2^n\text{.}\)

Contoh 8.4.5.

Misalkan \(C\) adalah kode linear \((5,3)\) yang diberikan oleh matriks pemeriksa paritas
\begin{equation*} H = \begin{pmatrix} 0 & 1 & 1 & 0 & 0 \\ 1 & 0 & 0 & 1 & 0 \\ 1 & 1 & 0 & 0 & 1 \end{pmatrix}\text{.} \end{equation*}
Kode tersebut terdiri atas kata-kata kode
\begin{equation*} (\codeword{00000}) \quad (\codeword{01101}) \quad (\codeword{10011}) \quad (\codeword{11110})\text{.} \end{equation*}
Terdapat \(2^{5-2} = 2^3\) koset \(C\) dalam \({\mathbb Z}_2^5\text{,}\) masing-masing berorde \(2^2 =4\text{.}\) Koset-koset ini tercantum dalam Tabel 8.4.6.
Tabel 8.4.6. Koset-koset \(C\)
Koset Koset
Wakil
\(C\) \((\codeword{00000}) (\codeword{01101}) (\codeword{10011}) (\codeword{11110})\)
\((\codeword{10000}) + C\) \((\codeword{10000}) (\codeword{11101}) (\codeword{00011}) (\codeword{01110})\)
\((\codeword{01000}) + C\) \((\codeword{01000}) (\codeword{00101}) (\codeword{11011}) (\codeword{10110})\)
\((\codeword{00100}) + C\) \((\codeword{00100}) (\codeword{01001}) (\codeword{10111}) (\codeword{11010})\)
\((\codeword{00010}) + C\) \((\codeword{00010}) (\codeword{01111}) (\codeword{10001}) (\codeword{11100})\)
\((\codeword{00001}) + C\) \((\codeword{00001}) (\codeword{01100}) (\codeword{10010}) (\codeword{11111})\)
\((\codeword{10100}) + C\) \((\codeword{00111}) (\codeword{01010}) (\codeword{10100}) (\codeword{11001})\)
\((\codeword{00110}) + C\) \((\codeword{00110}) (\codeword{01011}) (\codeword{10101}) (\codeword{11000})\)
Tugas kita adalah mencari tahu bagaimana pengetahuan tentang koset dapat membantu kita mendekode suatu pesan. Misalkan \({\mathbf x}\) adalah kata kode asli yang dikirim dan \({\mathbf r}\) adalah tupel-\(n\) yang diterima. Jika \({\mathbf e}\) adalah kesalahan transmisi, maka \({\mathbf r} = {\mathbf e} + {\mathbf x}\) atau, secara ekuivalen, \({\mathbf x} = {\mathbf e} + {\mathbf r}\text{.}\) Namun, ini tepat merupakan pernyataan bahwa \({\mathbf r}\) adalah suatu unsur dalam koset \({\mathbf e} + C\text{.}\) Dalam pendekodean kemungkinan maksimum, kita mengharapkan kesalahan \({\mathbf e}\) sekecil mungkin; artinya, \({\mathbf e}\) memiliki bobot terkecil. Tupel-\(n\) berbobot terkecil dalam suatu koset disebut pemimpin koset. Setelah kita menentukan pemimpin koset bagi setiap koset, proses pendekodean menjadi tugas menghitung \({\mathbf r} + {\mathbf e}\) untuk memperoleh \({\mathbf x}\text{.}\)

Contoh 8.4.7.

Dalam Tabel 8.4.6, perhatikan bahwa kita telah memilih wakil dengan bobot sekecil mungkin bagi setiap koset. Wakil-wakil ini merupakan pemimpin koset. Sekarang, misalkan \({\mathbf r} = (\codeword{01111})\) adalah kata yang diterima. Untuk mendekode \({\mathbf r}\text{,}\) kita mendapati bahwa kata tersebut berada dalam koset \((\codeword{00010}) + C\text{;}\) jadi, kata kode yang mula-mula ditransmisikan pasti adalah \((\codeword{01101}) = (\codeword{01111}) + (\codeword{00010})\text{.}\)
Potensi masalah dengan metode pendekodean ini adalah bahwa kita mungkin harus memeriksa setiap koset untuk mencari kata kode yang diterima. Proposisi berikut memberikan metode untuk menerapkan pendekodean koset. Proposisi itu menyatakan bahwa kita dapat mengaitkan suatu sindrom dengan setiap koset; jadi, kita dapat membuat tabel yang menetapkan pemimpin koset yang bersesuaian dengan setiap sindrom. Daftar semacam itu disebut tabel pendekodean.
Tabel 8.4.8. Sindrom untuk setiap koset
Sindrom Pemimpin Koset
\((\codeword{000})\) \((\codeword{00000})\)
\((\codeword{001})\) \((\codeword{00001})\)
\((\codeword{010})\) \((\codeword{00010})\)
\((\codeword{011})\) \((\codeword{10000})\)
\((\codeword{100})\) \((\codeword{00100})\)
\((\codeword{101})\) \((\codeword{01000})\)
\((\codeword{110})\) \((\codeword{00110})\)
\((\codeword{111})\) \((\codeword{10100})\)

Bukti.

Dua tupel-\(n\) \({\mathbf x}\) dan \({\mathbf y}\) berada dalam koset \(C\) yang sama tepat ketika \({\mathbf x} - {\mathbf y} \in C\text{;}\) namun, hal ini ekuivalen dengan \(H({\mathbf x} - {\mathbf y}) = 0\) atau \(H {\mathbf x} = H{\mathbf y}\text{.}\)

Contoh 8.4.10.

Tabel 8.4.8 merupakan tabel pendekodean bagi kode \(C\) yang diberikan dalam Contoh 8.4.5. Jika \({\mathbf x} = (\codeword{01111})\) diterima, maka sindromnya dapat dihitung sebagai
\begin{equation*} H {\mathbf x} = \begin{pmatrix} 0 \\ 1 \\ 0 \end{pmatrix}\text{.} \end{equation*}
Dengan memeriksa tabel pendekodean, kita menentukan bahwa pemimpin kosetnya adalah \((\codeword{00010})\text{.}\) Sekarang, kata kode yang diterima dapat didekode dengan mudah.
Untuk suatu kode blok \((n,k)\text{,}\) timbul pertanyaan apakah pendekodean koset merupakan skema yang dapat dikelola. Suatu tabel pendekodean memerlukan daftar koset dan sindrom, masing-masing satu untuk setiap \(2^{n - k}\) koset \(C\text{.}\) Misalkan kita memiliki kode blok \((32, 24)\text{.}\) Kita memiliki kata kode dalam jumlah yang sangat besar, yaitu \(2^{24}\text{,}\) tetapi hanya terdapat \(2^{32 - 24} = 2^{8} = 256\) koset.