4.1.4 Implementasi Decoder Reed Solomon
Setelah mengalami proses modulasi, program melakukan proses decoding data. Data yang telah rusak akan dikoreksi oleh decoder sesuai dengan
kemampuan. Proses decoding data dibagi dalam beberapa langkah berikut:
1. Proses Generate Syndrome
Proses pertama, decoder melakukan generate syndrome. Proses ini digunakan untuk mengetahui adanya perubahan data yang disebabkan oleh kanal.
Hal tersebut dikarenakan error syndrome memiliki peran penting dalam proses pembacaan error. Implementasi fungsi tersebut adalah sebagai berikut:
2. Implementasi Algoritma Berlekamp-Massey
Decoder mengimplementasikan algoritma Reformulated Inversionless
Berlekamp-Massey . Algoritma turunan Berlekamp-Massey ini digunakan untuk
mencari nilai lamda dan omega sebagai nilai kunci dari penyelesaian decoder. Implementasi fungsi tersebut adalah sebagai berikut:
syndrome = gfzeros1, 2t, m, pp; for
i = 1:nn, syndrome = syndrome.alpha_tb +reccodei;
end ;
syndrome = doublesyndrome.x; syndrome = fliplrsyndrome;
syndrome = gfsyndrome,m,pp;
k = 0; gamma = 1;
delta = gfzeros1, 3t+2, m; delta3t+1 = 1;
delta1:2t = syndrome; theta = delta1:3t+1;
delta_next = delta; for r=1:2t+1,
delta = delta_next; step1
delta_next1:3t+1 = gammadelta2:3t+2- delta1theta1:3t+1;
step2 ifdelta1 ~= 0 k=0
theta1:3t+1 = delta2:3t+2; gamma = delta1;
k = -k-1; else
theta = theta; gamma = gamma;
k = k+1; end
end lamda = deltat+1:2t+1;
omega = delta1:t;
3. Implementasi algoritma Chien search
Selanjutnya, decoder mengimplementasikan algoritma Chien search. Algoritma ini mencari letak kerusakan atau error dalam codeword. Letak
kerusakan ditemukan dengan menggunakan nilai akar dari lamda. Implementasi fungsi tersebut adalah sebagai berikut :
4. Implementasi Algoritma Forney
Decoder akan mengimplementasikan algoritma Forney. Algoritma ini berfungsi untuk mencari besar nilai setiap data error error magnitude sesuai
dengan kemampuan koreksi. Implementasi fungsi tersebut adalah sebagai berikut :
inverse_tb = gfzeros1, t+1, m, pp; for
i=1:t+1, inverse_tbi = alphai-1;
end ;
lamda_v=gf0, m, pp; accu_tb=gfones1, t+1, m,pp;
zero = gf0, m, pp; error = zeros2,nn;
for i=1:nn
accu_tb=accu_tb.inverse_tb; lamda_v=lamdaaccu_tb;
if lamda_v==zero
error1,i=1; end
end
even=floort22; if
even==t odd=t-1;
else odd=t;
end inverse table
inverse_tb = gfzeros1, t+1, m, pp; for
i=1:3t, inverse_tbi = alpha-i+1;
end ;
lamda_ov=gf0, m, pp; omega_v=gf0, m, pp;
accu_tb=gfones1, t+1, m,pp; accu_tb1=gfones1, 3t, m, pp;
omega = [zeros1,2t,omega];
for i=1:nn,
lamda_ov=lamda2:2:odd+1accu_tb2:2:odd+1; omega_v=omegaaccu_tb1;
accu_tb=accu_tb.inverse_tb1:t+1; accu_tb1=accu_tb1.inverse_tb;
5. Implementasi