UOMOP

Cyclic Decoder using Matlab 본문

Wireless Comm./Matlab

Cyclic Decoder using Matlab

Happy PinGu 2022. 1. 15. 05:45
function Mhat = cyclicdecoder(R, P, T)
%usage : received vector(R), 생성 vector(P), syndrom(T)을 이용하여 massage(M)을 도출
%input : R=received massage, P=생성다항식계수, T = syndrom Table
%output : M = only massage using decorder
 
K = length(R);
N = length(P)+K-1;
DegPoly = N-K;
LFSR = zeros(1, DegPoly);
a = K-(N-K);
 
for i = 1 : a
    feedback = mod(R(K+1-i)+LFSR(N-K), 2);
    str = sprintf('Input mesag : %d \nCurrent LFSR : %s \nFeedback      : %d',
    R(K+1-i), num2str(LFSR), feedback);
    disp(str);
 
    for j = DegPoly : -1 : 2
        if (P(j) == 1)
            LFSR(j) = rem((LFSR(j-1)+feedback), 2);
        else
            LFSR(j) = LFSR(j-1);
        end
    end
    LFSR(1) = feedback;
    disp(['Next LFSR     : ', num2str(LFSR)]);
    disp('-------------------------------');
    
end
 
SYN = mod(LFSR + R(1:N-K), 2)
index = bi2de(SYN, 'left-msb')
ErrorPattern = T(index+1, :)
 
Uhat = R + ErrorPattern;
Mhat = Uhat(N-K+1 : K);
 
end

 

 

Question. 

            (15, 11) Decoding 과정 확인해보기

clear all; close all; clc;
 
 N = 15;
 K = 11;
 P = cyclpoly(N, K, 'min');
 
 %M 정의
  M = ones(1, K);
 
 if mod(K, 2) == 0
 
     for i = 1 : (K)/2
        M(2 * i) = 0;
     end
 else
      for i = 1 : (K-1)/2
        M(2 * i) = 0;
      end
 end
 % K값 변화에 따라 1,0이 반복되는 벡터를 설정
 
 %E 정의
 E = zeros(1, N);
 E(N) = 1;
 %N변화에 따른 E 벡터 설정
 
 C = cyclicencoder(M, P);
 R = mod(C+E, 2);
 T = syndtable(cyclgen(N, P, 'system'));
 Mhat = cyclicdecoder(R, P, T)

 

 

 decoding의 경우 error가 더해진 received code(R)를 encoding과 같이 feedback circuit 과정을 거치게 한다. LFSR로 parity가 정해지면 이 값과 수신된 R의 parity를 더하여 신드롬을 확인한다. binary인 신드롬을 10진수로 바꿔 몇 번째 Error Pattern인지 확인하고, 그 Error Pattern을 수신된 R에 더하여 오류를 정정한다. 오류가 정정된 Uhat에서 메시지 벡터만을 추출해내는 것이 목표인 것이다.
 
우선, 마지막 비트만 1이 되는 에러 벡터를 생성하기 위해 E=zeros(1, N); E(N)=1;로 코딩을 하였다. 이 신호가 cyclic encoding 된 codeword와 더해지게 된다. 이 벡터를 R이라고 하고 위에 소개했던 과정을 거친다.
 
실제로 출력되는 값들은 정의했던 [10101····]만이 K개 만큼 출력되었다. 신드롬 테이블을 확인해보았을 때 index에서 1을 더한 값이 Error Pattern이 작업공간에 저장되어있는 것도 확인할 수 있었다.

'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
RS Encoder/ RS Decoder using Matlab  (3) 2022.01.15
Cyclic Encoder using Matlab  (0) 2022.01.14
Comments