UOMOP

RS Encoder/ RS Decoder using Matlab 본문

Wireless Comm./Matlab

RS Encoder/ RS Decoder using Matlab

Happy PinGu 2022. 1. 15. 23:51

RS Encoder

function U = RSEncoder(M)
 
K = length(M);
m = M.m;
N = 2^m-1;
DegPoly = N - K;
P = flip(rsgenpoly(N, K));
 
LFSR = gf(zeros(1, N-K), m);
 
U = gf(zeros(1, N), m);
U(N-K+1:N) = M;
 
for i = 1 : K
    feedback = LFSR(DegPoly) + M(K-i+1);
    for j = DegPoly : -1 : 2
        LFSR(j) = LFSR(j-1) + feedback*P(j);
    end
    LFSR(1) = feedback * P(1);
end
 
U(1:(N-K)) = LFSR;

RS Decoder

function Mhat = RSDecoder(R)
 
a = gf(2, 3);
N = length(R);
K = N - R.m;
m = R.m;
 
S1 = GetSyndrom(R, a);
S2 = GetSyndrom(R, a^2);
S3 = GetSyndrom(R, a^3);
S4 = GetSyndrom(R, a^4);
 
Sm = [S1 S2; S2 S3];
Sv = [S3; S4];
Sigma = Sm\Sv;
 
SigCoeff = [1 flip(Sigma')];
 
Beta = [];
for i = 1 : N
    sig_a = GetSyndrom(SigCoeff, a^(i-1));
    if sig_a == 0
        Beta = [Beta 1/a^(i-1)];
    end
end
 
Em = [Beta(1) Beta(2); Beta(1)^2 Beta(2)^2];
Ev = [S1 S2]';
 
e = Em\Ev;
 
A = a.^[0 : N-1];
NumErr = length(e);
E = gf(zeros(size(R)), m);
 
for i = 1 : NumErr
    E(find(A ==Beta(i))) = e(i);
end
 
Uhat = R + E;
Mhat = Uhat(N-K+2 : N);
 
end

분석

인코딩 :

 RS방식도 Cyclic방식이기 때문 에 레지스터를 사용하고 LFSR의 마지막 신호가 parity가 된다. 우선 신호가 들어오게 되면 CyclicEncoder와 같이 인코딩이 된다. 여기서 다른 점은 생성다항식이다. RS방 식은 갈루아영역에서 계산되기 때문이다. 생성다항식이 (7, 3) 인코딩의 경우 g(x) = (x-a)(x-a^2)(x-a^3)(x-a^4)이고 U(x)가 g(x) 나누어 떨어지므로 g(x)의 근을 U(x)에 대입하면 값 0이 도출된다. 실제로 코드워드에 생성다항식의 근을 대입하 면 값이 0이 되는 것을 확인하였다.


디코딩 :

우선 우리가 인코딩한 코드에 잡음이 섞이게 되면 오류가 발생할 것이다. 오류가 섞이게 되면 신드롬 검사 를 거쳤을 때 그 값이 0이 아닐 것이고 우리는 이것을 이용하여 에러가 발생한 위치와 그때의 에러 값을 찾아 야한다.

우선, 수신된 다항식에 a^i를 대입하여 신드롬을 계산한다. 이때 모두 0이 나온다면 에러를 없을 것이다. 하지만 에러가 아닌 어떠한 a^n 값이 검출되면 에러가 발생하여 신드롬이 0이 아닌 것이다.

에러 발생위치를 찾기 위해 Error Locator polynomial을 이용한다. 이 다항식의 근은 1/b 가 되고, 에러 위치 다항식의 근을 구해서 뒤집으면 b, 즉 에러 발생 위치를 확인할 수 있게 된다. 시그마와 베타의 관계식으로 2개의 연립방정식을 세울 수 있고 이 방정식을 계산하여 최종적이 Error를 확인한 다. 에러가 발생한 수신신호에 에러를 더해주어 오류를 정정하여 원 신호를 복구해주는 과정이 RS 디코딩이다. 실제로, 실습을 통해 RS 인코딩/디코딩을 확인해보았다.

'Wireless Comm. > Matlab' 카테고리의 다른 글

PSK BER using Matlab(Simulink)  (0) 2022.01.17
Cyclic Encoder/Decoder using Simulink  (0) 2022.01.16
BCH Decoder using Matlab  (0) 2022.01.16
Cyclic Decoder using Matlab  (0) 2022.01.15
Cyclic Encoder using Matlab  (0) 2022.01.14
Comments