Pada bagian ini kami akan mulai kenalkan apa itu kode siklis. Kita akan melihat nanti bahwa kode Hamming dan kode Golay merupakan salah satu contoh dari kode siklis. Tentu saja, masih ada kode siklis lainnya yang penting yang bukan kode Hamming atau kode Golay.
Misal v suatu kata panjang n. Pergeseran siklis π(v) dari v adalah kata panjang n yang didapat dari v dengan memindahkan digit terakhir dari v ke digit pertama dan menggeser
digit lainnya satu posisi ke kanan. Sebagai contoh perhatian berikut ini.
v 01011 111100 111 0101 10001
π(v) 10101 011110 111 1010 11000
Kode C dikatakan kode siklis jika π(v) ∈ C untuk setiap v ∈ C.
Contoh 4.2.1. Kode C = {000, 101, 110, 011} adalah kode siklis. Pertama, jelas bahwa C
linier. Selanjutnya tentukan π(x) untuk semua x ∈ C.
π(000) = 000, π(101) = 110, π(110) = 011, π(011) = 101. Karena π(x) ∈ C untuk setiap x ∈ C maka C kode siklis.
Contoh 4.2.2. Kode C = {0000, 1100, 0110, 1001} bukan kode siklis karena π(0110) = 0011 6∈ C.
Lemma 4.2.3. Pergeseran siklis π bersifat linier, yakni π(x+y) = π(x)+π(y) dan π(ax) =
aπ(x), a ∈ K = {0, 1}. Ini berarti bahwa untuk menunjukkan suatu kode linier C siklis kita cukup dengan menunjukkan bahwa π(x) ∈ C untuk setiap x pada satu basis dari C.
Bukti. Misal x = (x0x1· · · xn−1), y = (y0y1· · · yn−1) maka x + y = (x0 + y0, x1y1, · · · , xn−1yn−1). Karena itu, π(x + y) = (xn−1+ yn−1, x0y0, · · · , xn−2yn−2) = π(x) + π(y). Selan-jutnya, bila a ∈ K, maka ax = (ax0, ax1, · · · , axn−1) dan π(ax) = (axn−1, ax0, · · · , axn−2) =
aπ(x). 2
Contoh 4.2.4. Pada contoh 4.2.1 kita tahu bahwa salah satu basis dari C adalah {101, 110}.
Karena π(101) = 110 ∈ C dan π(110) = 011 ∈ C. Jadi, C siklis.
Bagaimana kita mengkonstruksi suatu kode siklis? Ambil sebarang kata di Kn, sebut
v. Kemudian, bentuk himpunan S yang terdiri dari kata v dan semua pergeseran siklis dari v, yakni S = {v, π(v), π2(v), π3(v), · · · , πn−1(v)}. Selanjutnya, definisikan kode C sebagai span linier dari S, yakni C = hSi. (Catatan: πk(v) = π(πk−1(v)), untuk k ≥ 2). Maka kode
C = hSi yang dibentuk adalah kode siklis. Vektor v diatas disebut sebagai generator dari C. Karena setiap kode linier siklis yang memuat v pasti juga memuat S maka kita katakan
kode C sebagai kode linier siklis terkecil yang memuat v.
Contoh 4.2.5. Misal n = 3 dan v = 001. Maka S = {v, π(v), π2(v)} = {001, 100, 010} dan
71
Contoh 4.2.6. Misal n = 4 dan v = 1010. Maka S = {v, π(v)} = {1010, 0101}.
Defin-isikan C = hSi = {0000, 1010, 0101, 1111}. Maka C kode siklis.
Kode linier siklis dapat dinyatakan dalam bentuk polinom dengan cara mengaitkan katakode v di kode linier siklis C dengan polinom v(x) di K[x] dan pergeseran siklis π(v) dengan polinom xv(x) mod 1 + xn. Perlu diperhatikan bahwa 1 ≡ xn (mod 1 + xn). Sebagai contoh, bila v = 1010 maka v(x) = 1 + x2 dan π(v) = 0101 berkorespondensi dengan xv(x) = x(1 + x2) = x + x3 mod 1 + x4. Dan, π2(v) = 1010 berkaitan dengan
x2v(x) = x2(1 + x2) = x2+ x4 = 1 + x2 mod 1 + x4.
Jelas bahwa jika c(x) ∈ h{v(x), xv(x), · · · , xn−1v(x)}i (semuanya dalam modulo 1 +xn), maka ini berarti bahwa
c(x) = (a0v(x) + a1xv(x) + · · · + an−1xn−1v(x)) mod (1 + xn) = (a0+ a1x + a2x2+ · · · + an−1xn−1)v(x) mod (1 + xn) = a(x)v(x) mod (1 + xn),
dimana a(x) suatu polinom di K[x]. Jadi setiap katakode (polinom) di kode linier siklis
C dapat dinyatakan sebagai perkalian suatu polinom dengan v(x) (generator dari C), dan
sebaliknya. Atau fakta ini dapat dituliskan dalam lemma berikut.
Lemma 4.2.7. Misal C suatu kode linier siklis dan v ∈ C. Maka, untuk setiap polinom
a(x) berlaku c(x) = a(x)v(x) mod (1 + xn) adalah katakode di C. 2
Diantara semua katakode taknol pada suatu kode linier siklis C, terdapat secara tunggal katakode g ∈ C dimana g(x) mempunyai derajat terkecil. Hal ini benar karena bila ada dua polinom g(x) dan h(x) yang mempunyai derajat terkecil t dalam kode C, maka g(x)+h(x) =
f (x) ∈ C dengan derajat polinom f (x) kurang dari t (karena xt+ xt= 0). Karena derajat terkecil sama dengan t maka f (x) harus sama dengan 0. Jadi g(x) = h(x).
Selanjutnya akan ditunjukkan bahwa bila g(x): polinom derajat terkecil di kode linier siklis C maka g(x) merupakan polinom generatornya. Misal c(x) sebarang katakode di C.
Karena deg(c(x)) > deg(g(x)), maka dengan algoritma pembagian, berlaku:
c(x) = t(x)g(x) + r(x)
Atau
r(x) = t(x)g(x) + c(x).
Berdasarkan Lemma 4.2.7, t(x)g(x) juga merupakan katakode di C, jadi r(x) juga katakode di C. Berdasarkan Algoritma pembagian berlaku r(x) = 0 atau deg(r(x)) < deg(g(x)). Namun, karena g(x) polinom derajat terkecil di C dan r(x) ∈ C maka haruslah r(x) = 0. Jadi c(x) = t(x)g(x). Dengan demikian, g(x) merupakan polinom generator dari C. Teorema 4.2.8. Misal C kode linier siklis panjang n dan g(x) merupakan polinom
gener-atornya. Jika deg(g(x)) = n − k maka 1. C mempunyai dimensi k,
2. Katakode-katakode berikut ini g(x), xg(x), · · · , xk−1g(x) membentuk suatu basis di C, 3. c(x) ∈ C jika dan hanya jika c(x) = a(x)g(x) untuk suatu polinom a(x) dengan deg(a(x)) < k (dengan kata lain, g(x) merupakan pembagi dari setiap katakode c(x)).
Bukti. Pernyataan (3) telah dibuktikan sebelum teorema ini. Jika g(x) mempunyai derajat n − k maka g(x), xg(x), · · · , xk−1g(x) senantiasa bebas linier (karena semuanya
berderajat berbeda). Karena g(x) membagi setiap katakode c(x) maka terdapat poli-nom tunggal a(x) = a0 + a1x + · · · + ak−1xk−1 sehingga c(x) = a(x)g(x) = a0g(x) + a1xg(x) + · · · + ak−1xk−1g(x). Dengan demikian, c(x) merupakan kombinasi linier dari g(x), xg(x), · · · , xk−1g(x). Jadi, {g(x), xg(x), · · · , xk−1g(x)} merupakan basis dari C. 2
Contoh 4.2.9. Misal n = 7 dan g(x) = 1 + x2+ x3 merupakan generator dari kode siklis C. Maka salah satu basis dari C adalah:
g(x) = 1 + x2+ x3 ⇔ 1011000 xg(x) = x + x3+ x4 ⇔ 0101100 x2g(x) = x2+ x4+ x5⇔ 0010110 x3g(x) = x3+ x5+ x6⇔ 0001011
Perlu dicatat bahwa x4g(x) mod 1+x7 = 1+x4+x6adalah katakode di C karena 1+x4+x6= (1 + x2+ x3)g(x).
73
Contoh 4.2.10. Tentukan kode siklis terkecil C panjang 6 yang memuat g(x) = x + x4 ⇔
010010. Untuk mencari kode siklis ini maka daftarkan semua pergeseran siklis dari g(x)
dan kombinasinya. Maka didapat,
C = {000000, 010010, 001001, 100100, 011011, 110110, 101101, 111111}.
Karena 100100 ⇔ 1+x3 merupakan polinom berderajat terkecil di C maka 1+x3merupakan polinom generator. Semua katakode dari C dalam bentuk polinom diberikan pada tabel di bawah ini.
Kata c P olinom c(x) F aktorisasi
000000 0 0(1 + x3) 100100 1 + x3 1(1 + x3) 010010 x + x4 x(1 + x3) 001001 x2+ x5 x2(1 + x3) 110110 1 + x + x3+ x4 (1 + x)(x + x3) 101101 1 + x2+ x3+ x5 (1 + x2)(1 + x3) 011011 x + x2+ x4+ x5 (x + x2)(1 + x3) 111111 1 + x + x2+ x3+ x4+ x5 (1 + x + x2)(1 + x3)
Teorema 4.2.11. g(x) merupakan polinom generator dari kode linier siklis C panjang n
jika dan hanya jika g(x) membagi 1 + xn (atau 1 + xn= h(x)g(x)).
Bukti. Dari Lemma 4.2.7, c(x) = h(x)g(x)(mod 1 + xn) = h(x)g(x) + t(x)(1 + xn), adalah katakode untuk setiap h(x). Berdasarkan Algoritma Pembagian, g(x) akan membagi setiap katakode c(x) jika dan hanya jika ia membagi 1 + xn. Sehingga, berdasarkan Teorema 4.2.8 g(x) merupakan polinom generator untuk kode siklis tersebut jika dan hanya jika g(x) membagi 1 + xn. 2
Akibat 4.2.12. Polinom generator g(x) untuk kode linier siklis terkecil panjang n yang
memuat kata v (polinom v(x)) adalah pembagi bersama terbesar dari v(x) dan 1 + xn, yakni g(x) = gcd(v(x), 1 + xn).
Bukti. Jika g(x) polinom generator maka g(x) membagi 1 + xn dan sekaligus v(x). Akan tetapi, g(x) ada di h{v(x), xv(x), · · · , xn−1v(x)}i, maka diperoleh
atau ini dapat ditulis sebagai:
g(x) = a(x)v(x) + b(x)(1 + xn).
Maka sebarang pembagi bersama dari v(x) dan 1 + xn akan senantiasa membagi g(x). Karena itu, g(x) merupakan pembagi bersama terbesar. 2
Contoh 4.2.13. Misal n = 8 dan v = 11010100 (v(x) = 1 + x + x3+ x5). Pembagi bersama
terbesar dari v(x) dan 1 + x8 adalah 1 + x. Maka kode linier siklis terkecil yang memuat v sebagai katakode akan mempunyai polinom generator g(x) = 1 + x. Sehingga berdimensi 8-1=7.
Bila polinom g(x) membagi 1 + xn maka g(x) merupakan polinom generator (Teorema 4.2.11). Dan, menurut Teorema ??, g(x), xg(x), · · · , xk−1g(x) akan membentuk suatu basis
dari kode linier siklis C panjang n yang memuat g(x). Dengan demikian, salah bentuk matriks generator dari kode C adalah:
G = g(x) xg(x) x2g(x) .. . xk−1g(x) .
Contoh 4.2.14. Diberikan C = {000, 110, 101, 011} suatu kode linier siklis. Maka polinom
generatornya adalah g(x) = 1 + x. Dalam hal ini, n = 3 dan k = 2, maka salah satu basis dari C terdiri dari:
g(x) = 1 + x ⇔ 110, xg(x) = x(1 + x) = x + x2 ⇔ 011. Dengan demikian matriks generator dari C adalah:
G = µ g(x) xg(x) ¶ = µ 110 011 ¶ .
Contoh 4.2.15. Misal C suatu kode linier siklis panjang 7 dengan polinom generator g(x) = 1+x2+x3. Maka ini berarti bahwa n = 7, dan n−k = 3. Dengan demikian k = 4, sehingga salah satu basis dari C akan terdiri dari:
75
xg(x) = x + x3+ x4, x2g(x) = x2+ x4+ x5, dan
x3g(x) = x3+ x5+ x6. Jadi matriks generatornya adalah:
G = 1011000 0101100 0010110 0001011 .
Misal C suatu kode linier siklis dengan panjang n, dimensi k (jadi polinom generator
g(x) berderajat n − k). Maka, k buah digit informasi (a0, a1, · · · , ak−1) yang akan diencode dapat dinyatakan sebagai suatu polinom a(x) = a0+ a1x + · · · + ak−1xk−1. Polinom ini dise-but sebagai polinom informasi. Sehingga, proses encoding di sini tidak lain adalah proses perkalian polinom, yakni a(x) diencode menjadi a(x)g(x) = c(x). Ini berarti bahwa kita hanya perlu menyimpan polinom generator g(x) saja dalam melakukan encoding. Hal ini merupakan suatu kemajuan dibanding dengan teknik encoding sebelumnya yang memer-lukan matriks generator secara menyeluruh.
Selanjutnya kita akan mencari matriks cek paritas dari kode linier siklis C panjang n dengan polinom generator g(x). Untuk melakukan itu, kita akan mencari matriks H yang bersifat bahwa wH = 0 jika dan hanya jika w katakode di C.
Tulis w(x) = c(x) + e(x) dimana c(x): katakode dan e(x): polinom kesalahan. Polinom
sindrom, s(x), dari w(x) didefinisikan sebagai s(x) = w(x) mod g(x). Karena derajat g(x)
adalah n − k maka s(x) berderajat < n − k. Karena w(x) = c(x) + e(x) dan c(x) = a(x)g(x) untuk suatu polinom a(x) maka didapat s(x) = e(x) mod g(x). Sehingga, polinom sindrom hanya bergantung pada pola kesalahan.
Definisikan matriks H dengan baris ke-i, ri, adalah kata panjang n − k yang berkaitan dengan polinom ri(x) = xi mod g(x). Maka, H akan ditunjukkan merupakan matriks cek paritas. Misal w kata yang diterima dan w(x) = c(x) + e(x). Maka,
wH = (c + e)H
=Pn−1j=0(cj + ej)rj
⇔Pn−1j=0(cj+ ej)rj(x)
= (Pn−1j=0cjxj) mod g(x) + (Pn−1j=0ejxj) mod g(x) = c(x) mod g(x) + e(x) mod g(x)
= 0 + e(x) mod g(x) = s(x).
Maka s(x) = 0 jika dan hanya jika w(x) katakode. Jadi H matriks cek paritas dari C. Contoh 4.2.16. Misal n = 7 dan g(x) = 1 + x2+ x3. Maka matriks cek paritas untuk kode C yang mempunyai polinom generator g(x) adalah:
r0(x) = x0mod g(x) = 1 ⇔ 100 r1(x) = x1mod g(x) = x ⇔ 010 r2(x) = x2mod g(x) = x2 ⇔ 001 r3(x) = x3mod g(x) = 1 + x2 ⇔ 101 r4(x) = x4mod g(x) = 1 + x + x2 ⇔ 111 r5(x) = x5mod g(x) = 1 + x ⇔ 110 r6(x) = x6mod g(x) = x + x2 ⇔ 011 Dengan demikian matriks cek paritasnya adalah:
H = 100 010 001 101 111 110 011 .
Jika w(x) = 1 + x3 + x6 diterima maka w = 1001001 dan s = wH = 010. Sehingga s(x) = x = 1 + x3+ x6 mod (1 + x2+ x3).
Diskusi 4.2.17.
1. Tentukan basis dari kode linier siklis terkecil panjang n yang memuat katakode v di bawah ini:
(a) v = 1011000, n = 7 (b) v = 001101, n = 6 (c) v = 110011001, n = 9
77
2. Temtukan semua kata v panjang n yang memenuhi: (a) π(v) = v;
(b) π2(v) = v; (c) π3(v) = v.
3. Tentukan Polinom generator dari kode linier siklis yang memuat kata berikut ini. (a) 101010
(b) 11111 (c) 11000 (d) 10101
4. Tentukan kode linier siklis C = hSi dengan S diberikan di bwah ini. Tentukan polinom generator g(x) nya dan kemudian nyatakan setiap katakode sebagai kelipatan dari
g(x).
(a) S = {0101, 1010, 1100}
(b) S = {01111, 11110, 01010, 11000} (c) S = {1000, 0100, 0001}
5. Misalkan g(x) = 1 + x + x3 merupakan polinom generator dari kode linier siklis C panjang 7.
(a) Encode polinom informasi berikut ini: 1 + x3, 1 + x, x + x2+ x3
(b) Tentukan polinom informasi/pesan untuk katakode berikut ini: c(x) = 1 + x2+
x4+ x5; 1 + x + x6; x2+ x4+ x6.
6. Tentukan basis dan matriks generator serta matriks cek paritas dari kode linier siklis panjang n dengan polinom generator g(x).
(a) n = 9, g(x) = 1 + x3+ x6 (b) n = 15, g(x) = 1 + x + x2
(c) n = 15, g(x) = 1 + x + x4 (Polinom ini membangun kode Hamming) (d) n = 15, g(x) = 1 + x3+ x4
(e) n = 6, g(x) = 1 + x2
(f) n = 8, g(x) = 1 + x3
(g) n = 23, g(x) = 1 + x + x5+ x6+ x7+ x9+ x11 (Tunjukkan bahwa ini membangun kode Golay).