Loading [MathJax]/jax/output/HTML-CSS/jax.js

Coding은 데이터 압축, 암호화, 오류감지 및 수정, 데이터 전송 및 저장에 사용되는 이론이다. 주된 목적은 데이터의 패턴을 분석해서 압축하여 통신을 가능하게 하는 것이다.

 

1. Source coding: Data compression

데이터 압축의 목적으로 사용되는 coding의 경우, 가장 빈번하게 나오는 결과에는 짧은 표현을, 가장 덜 발생하는 결과에는 상대적으로 긴 표현을 주어 압축한다.

(ex. 모스 부호가 한국인에게는 가장 유명하다)

 

Definitions

  • Source code란 부호화된 데이터라고 보면된다.
  • c(x) : codeword of x
  • l(x) : c(x)의 길이
  • D : D-ary alphabet으로 만들 수 있는 source code의 집합 (유한한 길이)

 

Code를 평가하는 방법 중 하나는 expected length L(C)를 측정하는 방법이다. L(C)는 code의 optimality를 확인하는 데 사용된다.

L(C)=p(x)l(x)

 

Example.

현재, 4개의 sample을 보여주고 있다. 그러므로 unifom-length codeword라면 log4이므로 2 bits임을 알 수 있다. 문제에서 제시하는 code의 경우 L(C)를 구해보면 1.75 bits이다. 따라서 그냥 바꾼 것 보다 좋다는 것을 알 수 있다.

 

X의 entropy를 구해보면, H(X)는 1.75 bits임을 알 수 있다. Entropy는 RV X를 최대한 압축한 정보량이므로 codeword compression의 lower bound이다. H(X)=L(C)이므로 제시하는 code는 optimal임을 알 수 있다.

 

Example.

풀이는 다 적었다.

 

Example. Morse code

모스부호는 영어에서 가장 많이 사용되는 E나 T에 제일 짧은 부호를 할당하였고 Q나 Z와 같이 덜 사용되는 알파벳에는 긴 부호를 할당하였다.

모스부호의 경우, 태생적으로 모든 부호 사이에 space가 있어 optimal은 아니다.

 

Code에 있어 주요한 개념은 다음과 같다.

  • Nonsingularity : x가 다르면 c(x)도 다르다.
  • Code extension : c(x)=00, c(y)=11이면 c(xy)=0011이다.
  • Uniquely decodable codes : Individual codeword가 unique하면 된다.
  • Prefix/instantaneous code : Codeword의 prefix가 다른 codeword가 아니다. (모든 codeword가 구별되기 때문에, 미래의 bit를 확인안해도 된다.)

 

2. Kraft Inequality

D의 알파벳 크기를 가지는 Prefix code라면, 다음의 부등식을 만족한다.

Dli1

 

Converse는 Kraft inequality를 만족하면 해당 l(x)로 prefix code를 만들 수 있음을 의미하게 된다.

*증명은 교과서를 보자

 

Kraft inequality는 에도 성립한다.

i=1Dli1

 

간단하게 증명하자면 다음 그림처럼 할당할 수 있기 때문이다.

 

그래서 정리하자면 다음과 같다.

  • Kraft inequality 만족하면, prefix code가 존재한다.
  • Prefix code라면 Kraft inequality를 만족한다.
  • Uniquely decodable code는 prefix code보다 codeward length가 길거나 같다.

 

3. Optimal Code

Optimal이 되려면, 길이가 짧으면 장땡이다.

 

그래서 optimal code를 찾기 위한 식은 다음과 같다.

minimizeL(C)=pili

subjecttoDli1

 

그러나 위 문제는 li이가 integer이기 때문에 convex optimization을 사용할 수 없다. 그래서 라그랑주 곱셈이랑 KKT로 잘 해결한다. 그래서 다음의 결과를 얻는다. (Shannon code가 된다)

pi=Dli

li=logDpi
L=pili=HD(X)

 

이래서 아까 앞에서 entropy가 lower bound라고 언급했었다. 정리하면 다음과 같다.

LHD(X)

with equality iff pi=Dli

 

Length의 bound를 구해보자. li=logDpi였다. li는 integer임으로 ceiling을 통해 구하게 되고 Kraft inequality를 만족하는지 확인해보면 만족한다.

ceiling을 이용하기 때문에, 모든 li가 optimal일 때 범위는 다음처럼 제한된다.

HD(X)LHD(X)+1

*shannon code는 optimal이군

4. Compression with Wrong Codes

  • source distribution : p(x)
  • assigned codeword length : l(x)=ceiling(logq(x))

H(p)+D(p||q)Epl(X)<H(p)+D(p||q)+1

 

q와 p가 다를수록 D(p||q)가 커진다. 이는 곧 code length가 길어짐을 의미하게 된다.

  • px={0.5,0.25,0.125,0.125}
  • H(X)=1.75
  • qx={0.25,0.25,0.25,0.25}

D(p||q)는 0.25가 되어 codeword length = H(x) + D(p||q) = 2 bits가 된다.

 

5. Huffman Code : Optimal code construction

  1. Decreasing order로 확률 줄세우기
  2. D-ary면 D개만큼 알파벳 할당하기
  3. D개 합치기
  4. 반복

Bi-nary case

Average length를 구해보면, 2.3 bits가 나온다.

 

Ter-nary case에 대해서는 다음과 같다. 3개의 least prob.을 합치는 식으로 진행한다.

Ter-nary case

마찬가지로 average length를 구해보면, 1.5 ternary digits이다.

 

두 케이스를 구분하는 방법은 DE[l(x)]로 진행한다.

  • Bi-nary = 22.3 = 4.92
  • Ter-nary = 31.5 = 5.20

 

근데 하다보면 끝에서 D개가 안남을 수 있다. 이 경우에는 Dummy를 추가해서 구한다.

1+(D1)k로 시작 size를 맞추면 된다. 위 예제는 D=3이므로 k=3을 가정해 7로 시작 size를 맞추었다.

 

Suboptimal way; Fano's construction

이외에도 suboptimal인 Fano의 코드 생성방법이 있다. Prob.을 줄세워서 이등분 할건데, 최대한 양쪽이 비슷한 확률을 가지도록 나누는 것이다. 그래서 하나씩 0과 1을 할당하며 이 방법을 계속 반복한다.

이 방법은 L(C)H(X)+2가 된다.

 

Optimality of Huffman code

1. Shannon code(sub-optimal)와의 비교

  • let px = {1/3, 1/3, 1/4, 1/12}
  • Then Huffman code length = (2,2,2,2) or (1,2,3,3)
  • Then Shannon code = (2,2,2,4)

3번째 친구는 Shannon이 더 좋지만, average length 측면에서는 Huffman(2)이 Shannon(2.17) 보다 좋음

 

Binary Huffman code는 optimal이다. 하지만 많은 다른 optimal code가 있다.

 

2. Optimality 조건

  • pi>pjlilj이다.
  • Two longest codeword는 같은 길이임
  • Two longest codeword는 마지막 bit만 다름

잘 생각해보면 저래야 optimal을 달성하며 2번 조건은 사실 의미가 없고 3번의 경우 무조건 만족해야지만 optimal인건 아니다. 

 

어쨋든 Huffman code의 경우 해당 조건을 모두 만족해서 optimal이다.

 

6. Shannon-Fano-Elias codes

누적 확률을 이용해 codeword를 만드는 방법이다.

F(x)=axp(a)

 

간단한 계산을 위해, 수정된 누적합을 사용한다.

F(X)=p(a)+12p(x)

 

F(X)는 real number이기 때문에, code로 사용하기 어려움이 있다. 그래서 largest less than F(X) 값으로 사용한다. Prefix free property도 가능하다.

Prefix 문제 해결방법

 

Example.

Binary로 구하는 과정은 다음과 같다고 한다. (챗지피티쓰)

  • 0.125를 2진수로 변환합니다. 0.125는 2진수로 0.001입니다.
  • 0.125 *2 = 0.25 (0, 소수점 이하가 0.25 남음)
  • 0.25 × 2 = 0.5 (0, 소수점 이하가 0.5 남음)
  • 0.5 × 2 = 1.0 (1, 소수점 이하가 0 남음)
  • 결과: 0.125 (10진수) = 0.001 (2진수)

 

SFE로 만든 code의 경우, average L(C)는 2.75 bits이다. Huffman이 1.75 bits였으니 Suboptimal임을 알 수 있다. SFE는 sequence에 적용할 수 있어 Arithmetic coding에 자주 사용된다. 특히 Binary 데이터에 자주 사용된다.

 

7. Competitiveness of Shannon codes

가장 쉬운 방법은 codeword의 길이를 비교하는 것이다. a에 대해서 codeword의 길이가 짧으면 +1, 길면 -1 점수를 부과하는 방식으로 비교할 수 있다.

 

Shannon code가 질 확률은 다음과 같다.

지기 매우 어렵다는 것을 의미한다.

 

Specific case에 대해서는 Shannon code가 optimal임을 보일 수도 있다. 가령 Prob.이 지수승으로 나타나는 dyadic prob. mass function을 distribution으로 가지는 경우이다. (p(x)=2k) 이 경우에 대해서 Shannon code는 l(x)=l(x) for all x가 아닌 이상 항상 더 좋다.

'Study > Coding and Information Theory' 카테고리의 다른 글

[08] Linear Codes  (2) 2024.06.11
[07] Channel Capacity  (1) 2024.06.09
SUMMARY  (1) 2024.04.10
[05] Entropy Rates  (1) 2024.04.10
[04] AEP, Asymptotic Equipartition Property  (0) 2024.04.10