
4.2 선형 블록 코딩 (Linear Block Code)
개념
- 선형 블록 코딩에서는 전송된 정보열은 항상 미리 선정된 길이 k의 배수로 설정 됨
- 그렇지 않으면 필요한 만큼의 0을 padding으로 넣어서 길이가 k의 배수가 되도록 만듬
- 각각의 k비트는 (n, k) 선형 블록 코딩에서 n비트의 코드로 코딩됨
- 예를들어 (8, 6) 코드의 경우 코드 블록의 길이 n = 8이고, 메시지의 길이 k = 6, Parity 길이 n - k = 2가 됨
- 참고) Parity: 전송받은 메시지의 오류를 검출하거나 검증할 때 사용되는 bit
- Linear Block Code의 큰 특징은 code와 code의 XOR연산의 결과로 또 다른 code를 생성하는 특징을 가짐
- (n, k)부호에는 2^n개의 서로 다른 조합의 code가 존재
- 하지만 Linear Block Code는 k개의 정보 bit로부터 출발하기 때문에 2^k개의 조합만이 code로서 허용 됨
- 즉, 2^n개의 가능한 비트 유형 가운데 2^k개를 선택하여 이를 coder의 집합으로 정의
Theorem
기본 정의
- 부호화를 위한 k개의 데이터 비트를 아래와 같이 벡터 m으로 정의
m=(m1,m2,...,m3) - 이 정보에 상응하는 부호어를 아래와 같은 n비트 길이의 벡터 c로 정의
c=(c1,c2,...,ck,ck+1,...,cn−1,cn) - 각각의 parity bit는 ⨁(XOR) 심벌로 표현되는 [모듈로-2의 가중치 합으로 구성](XOR 연산으로 구성)
- 다음과 같이 예를 들어 보면
{c1=m1c2=m2⋯ck=mkck+1=m1p1(k+1)⊕m2p2(k+1)⊕⋯⊕mkpk(k+1)⋯cn=m1p1n⊕m2p2n⊕⋯⊕mkpkn - 이 식에서
pij=(i=1,2,…,k,j=k+1,k+2,…,n)
은 특정 데이터 비트에 대한 이진 가중치를 의미
- 다음과 같이 예를 들어 보면
- Coding의 원리는 전송측에서 parity를 만들어서 첨가하고 수신측에서는 이 parity를 이용하여 전송 중에 발생할지도 모를 오류에 대응 한다는 것
연산 과정
- 행렬의 표현 형식을 고려해 보면 coder c는 원본 데이터 벡터 m에 대한 아래의 연산으로 표현
c=mG - 이 식에서 G는 생성 행렬로 정의 됨
- 생성 행렬 G는 k X n의 행렬이어야 하며, I_k의 항등 행렬(k X k 행렬)과 k X (n - k)의 parity 행렬 P를 연결한 구조로 생성 즉,
$$
\mathbf{G}=[\mathbf{I}k|\mathbf{P}]{k \times n}또는
\mathbf{G}=[100⋯0p11p12⋯p1(n−k)010⋯0p21p22⋯p2(n−k)⋯⋯⋯⋯⋯⋯⋯⋯⋯000⋯1pk1pk2⋯pk(n−k)]
$$
- 생성 행렬 G는 k X n의 행렬이어야 하며, I_k의 항등 행렬(k X k 행렬)과 k X (n - k)의 parity 행렬 P를 연결한 구조로 생성 즉,
- 생성 행렬은 다음과 같이 표현

- Parity 행렬 P는 다음과 같이 주어짐
P=[p11p12⋯p1(n−k)p21p22⋯p2(n−k)⋯⋯⋯⋯pk1pk2⋯pk(n−k)]=[P1P2⋯Pk] - 이 식에서
Pi는 i=1,2,…,k 일때, [xn−k+i−1g(x)]의 나머지
g(x)는 생성 다항식으로서Pi=rem[xn−k+i−1g(x)]
으로 정의 됨
예시
어떤 (7, 4) code의 생성 다항식이
g(x)=1+x+x3
일 때 Linear Block Code를 구하는 과정이다.
H의 전치 행렬 과정
- 이 경우 code(7) = data(4) + parity(3) 임을 알 수 있으므로 아래 관계들을 유도할 수 있음
P1=rem[x31+x+x3]=1+x→[110] P3=rem[x51+x+x3]=1+x+x2→[111] - 그리고
P4=rem[x61+x+x3]=1+x2→[101] P2=rem[x41+x+x3]=x+x2→[011] - 따라서 생성 행렬은 다음과 같이 구해 짐
G=[1000110010001100101110001101] - 편의를 위하여 code 벡터를 아래와 같이 표현
c=[m|cp]
이 식에서cp=mP
는 (n - k) bit의 parity check 벡터임 - 행렬 HT를 생성 행렬 G를 이용하여 다음과 같이 정의


- 오류 벡터를 e라고 할 때 수신 code 벡터 x가 아래와 같이 주어졌다 가정한다.
x=c⊕e - 이 경우 행렬 HT는 다음과 같은 성질을 가짐
$$
\mathbf{cH}^T = [\mathbf{m}|\mathbf{c}p]\begin{bmatrix}\mathbf{P}\ \mathbf{I}{n-k}\end{bmatrix}\
= \mathbf{mP}\oplus\mathbf{c}_p\
= \mathbf{c}_p\oplus\mathbf{c}_p\
= \mathbf{0}
$$ - HT 행렬의 전치 행렬은 다음과 같음
H=[PTIn−k] - 이 식에서 In-k는 (n - k) X (n - k)의 항등 행렬이고 PT는 parity 행렬 P의 전치 행렬이다.
- 이 H를 parity check 행렬 이라 부른다.
오류 검출 과정
- 수신측에서는 아래와 같은 연산으로 Syndrome 으로 명명된 벡터를 구하게 됨
s=xHT=(c⊕e)HT=cHT⊕eHT=eHT - 백터 s는 (n-k)차원을 가짐
- 만일 전송 오류가 없을 시 위의 Syndrome을 구하는 수식을 수신 벡터 x에 적용하면 s가 0((n - k)의 0을 원소로 같는 0벡터)행렬이 됨
- 즉, 0이 아닌 s값을 얻게되면 오류가 생긴 것으로 간주
- 다음의 G행렬이 다음과 같이 주어지면,
G=[1000111010011000101010001011]
그러면 H행렬이 아래와 같이 유도 됨H=[111010011010101011001] - 만약 m=[1 0 1 1]이 주어지면, c = mG = [1 0 1 1 0 0 1]이 만들어 짐
- 오류가 없다면 x = c이며, s = cHT = [0 0 0]이 됨
- 여기서 전송된 c에 대하여 오류가 발생하여 아래와 같이 수신됬다 가정한다
x=c⊕e=[1011001]⊕[0010000]=[1001001] - 그러면 아래와 같은 Syndrome이 산출 됨
s=x⊕HT=[1001001][111110101011100010001]=[101]=(eHT) - 이 Syndrome은 오류의 위치를 지시하고 있으며, 오류가 정정된 부호는 [1 0 1 1 0 0 1]이 됨
문제
- 아래의 행렬은 어떤 (6, 3) 선형 블록 부호화를 위한 생성 행렬을 나타낸 것이다.
- 상응하는 parity check 행렬 H를 구하시오
- Parity 행렬 P는 아래와 같이 구할 수 있음이 결과로부터 나온 parity check 행령 H는 아래와 같이 구해짐
H=[HTIn−k]= [101100011010110001] P=[101011110]따라서 parity 행렬의 전치 행렬은 아래와 같음PT=[101011110]
- Parity 행렬 P는 아래와 같이 구할 수 있음이 결과로부터 나온 parity check 행령 H는 아래와 같이 구해짐
- 메시지 벡터가 m=[1 0 1]때 code 벡터를 구하시오
- m=[1 0 1]에 대하여 c = mG를 적용하여 code 벡터 c를 아래와 같이 구할 수 있음
c=mG=[101]G=[100101010011001110]=[101011]
- m=[1 0 1]에 대하여 c = mG를 적용하여 code 벡터 c를 아래와 같이 구할 수 있음
'DAN lab. > DAN lab. Master's 1 Summer' 카테고리의 다른 글
04-04. Channel Coding and Error Control (0) | 2021.07.16 |
---|---|
04-03. Channel Coding and Error Control (0) | 2021.07.16 |
04-01. Channel Coding and Error Control (0) | 2021.07.14 |
03-01. Mobile Radio Propagation (0) | 2021.07.12 |
02-03. 확률, 통계 및 트래픽 이론 (0) | 2021.07.07 |