UOMOP
Cyclic Encoder using Matlab 본문
function U = cyclicencoder(M, P)
%usage : 메세지 벡터와 생성 벡터을 입력받고 cyclicencoding된 코드워드를 출력한다.
%input : M=massage, P=생성다항식계수
%output : U = codeword using cyclicencoding
K = length(M);
N = length(P)+K-1;
DegPoly = N-K;
LFSR = zeros(1, DegPoly);
U = zeros(1, N);
U(N-K+1 : N) = M;
for i = 1 : K
feedback = mod(M(K+1-i)+LFSR(N-K), 2);
str = sprintf('Input mesag : %d \nCurrent LFSR : %s \nFeedback : %d',
M(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
U(1 : (N-K)) = LFSR;
Question.
(15,11), (31,26), (63,57) Cyclic Code 에 적용하고 Encoding작업 확인
(생성다항식 만들 때 min 옵션 사용)
clear all; close all; clc;
N = 15;
K = 11;
P = cyclpoly(N, K, 'min');
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이 반복되는 벡터를 설정
C = cyclicencoder(M, P)
-> 위 코드에서 N, K만을 조정하여 인코딩 과정을 확인
encoding의 경우, M을 [1010···· ]설정해야 해서 우선 M을 1로 나열한 후에, K가 홀수인 경우와 짝수인 경우를 나눠서 메시지 벡터를 선언하였다. 이후 이 메시지 벡터와 선언해두었던 ‘cyclicencoder’함수를 이용하여 인코딩되는 과정을 직접 확인해보았다.
메시지벡터의 MSB부터 feedback circuit에 입력되면서 마지막 LFSR와 xor되면서 feedback이 되고, feecback과의 계산이 된 값들이 LFSR(next clock)에 저장이 된다. 이 과정을 반복하면서 마지막 LFSR에 남은 값이 메시지의 parity가 되면서 encoding이 되는 것이다.
실제로 실습을 통해 확인할 수 있었다. 메시지가 MSB부터 입력이 되면서 feedback, 현재 LFSR, 다음 LFSR 값이 변했다. 결국 마지막으로 남는 LFSR이 parity가 되었고, 출력된 codeword를 확인해보면 [(Next LFSR)(10101····)]이 출력되었다.
'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 Decoder using Matlab (0) | 2022.01.15 |
Comments