UOMOP
Cyclic Decoder using Matlab 본문
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