정보의 압축
1. 압축의 필요성
과거에 음악을 저장하기 위해서는 CD를 사용했었다.압축하지 않은 음악이 3분, 44,100HZ, 16비트, 스테레오 파일인 경우 31MB의 용량을 가진다. CD별로 다르긴 하지만, CD가 700MB의 저장용량을 가지고 있다 할 때 압축을 하지 않은 음악을 저장하기에는 음악 1개당 약 31MB정도 하므로, CD 1개당 23곡 밖에 저장하지 못한다.
이와 마찬가지로 영상을 저장하는 저장매체로서 DVD가 주로 사용되었는데, DVD의 용량이 4.7GB라 할 때 압축하지 않은 영상은 예시로 90분, 1920X 1080 해상도 30프레임, 32비트 흑백인 경우 1,251GB로 DVD에 저장조차 할 수 없다.
정보를 효율적으로 저장하기 위해서는 저장매체의 기술 발전 또는 데이터 압축이 필요한 것이다.
2. 데이터 압축
데이터 압축이란 데이터를 더 적은 저장 공간에 효율적으로 기록하기 위한 기술, 저장공간과 전송 대역폭의 효율적 이용을 위해 데이터의 크기를 줄이는 것을 말한다. 이론적으로는 데이터의 전체 비트수를 줄이는 과정이라 할 수 있겠다.
데이터 압축에서 데이터를 압축하고 푸는 것을 인코딩, 디코딩이라고 부르며 데이터가 얼마나 압축이 되었는지 압축률을 통해 나타낸다.
- 인코딩 : 데이터 크기를 줄이는 과정
- 디코딩: 원래 데이터의 크기로 복원하는 과정
- 압축률: 어느정도 압축이 되었는지 확인할 수 있는 지표, 인코딩 전의 데이터와 인코딩 후의 데이터로 표현한다.

그렇다면 데이터를 압축은 어떻게 하는 것일까?
데이터를 압축하는 방법으로 무 손실 압축과 손실 압축이 존재한다. 무 손실 압축과 손실 압축은 말 그대로 데이터의 손실의 여부에 따라 손실이 없는 압축 방식은 무 손실 압축, 손실이 존재한다면, 손실 압축이라 불린다.
무손실 압축
1. 반복길이 코딩 ( Run-Length Coding)
Run-Length Coding (반복길이 코딩)이란 연속적으로 반복되어 나타나는 정보( 문자, 픽셀)들을 그 정보와 반복된 횟수 (run-lenght)로 표현하는 압축 방법이다.

Run-Length Coding (반복길이 코딩) 은 반복되는 정보가 많을 수록 압축률이 좋다. 예를 들어 TAABGGLC의 경우 압축시에 T2AB2GLC와 같이 압축하게 되어 원래 데이터와 크기의 차이가 거의 없지만, 위와 같이 같은 데이터가 많이 반복될 수록 더 좋은 압축률을 보인다. 또한 압축시에 데이터가 손실되는 것이 아닌 같은 데이터만 갯수로 치환하여 입력하는 방식이기에 무 손실 압축 방식이다.
압축효과가 좋은 경우로 동영상에서 자막을 표시할 때를 예로들어 설명하도록 하겠다.동영상에서 자막을 표시할 때에는 픽셀 단위로 보았을 때 글자를 표현하는 흰색 픽셀과 글자가 아닌 부분을 표현하는 검은색 픽셀이 존재한다. 데이터의 표현 방식이 2개 밖에 존재하지 않기 때문에 동영상에서 자막을 표시할 때에는 2가지 데이터 표현 방식이 무수히 많이 반복될 것이다.
검은색 픽셀을 B라고 하고, 흰색 픽셀을 W라 할 때 자막정보에 대한 데이터를 압축하면 다음과 같이 효과적으로 압축할 수 있다.
WWWWWWWWWWWWBWWWWWWBWWWWBBBBWWW
--> 12WB6WB4W4B3W
2. 허프만 코딩 ( Huffman Coding)

허프만 코딩 ( Huffman Coding)데이터를 구성하는 단위정보들의 빈도수를 기반으로, 각 단위의 정보를 표현하는 비트수 를 효과적으로 할당하는 방법이다.
허프만 코딩 ( Huffman Coding)에는 2가지의 특징이 있다고 볼 수 있다.
첫 번째 특징으로는 고정 길이 코드(fixed length code)를 사용하지 않고, 가변 길이 코드(variable length code)를 사용한다. 고정 길이 코드(fixed length code) 의 대표적인 예시로는 아스키코드를 예로 들 수 있다. 아스키코드의 경우 어떤 알파벳을 표현하는데 8bit의 고정적인 크기의 공간을 할당한다. 반면, 가변 길이 코드 (variable length code)는 알파벳에 따라 표현하는데 데이터의 크기가 알파벳 마다 다를 수 있다.
두 번째로는 허프만 트리로 만들어서 압축을 하게 된다.
허프만 트리란 해당 문자열에서 문자열의 빈도에 따라 트리 방식으로 정렬하는 것을 말한다.
DABAAABCCC가 존재한다고 할 때 아스키코드로 변환하는 경우 총 80bit의 저장공간을 소비하게 된다.
이를 허프만 트리로 구현하는 과정은 아래와 같다.

허프만 트리로 빈도수에 따라 각 알파벳은 A[0], C[10], D[110], B [111]로 나타낼 수 있다.
DABAAABCCC를 110 0 111 0 0 0 111 10 10 10과 같이 1100111000111101010로 나타낼 수 있다.
손실 압축
1. DM ( Delta Modulation)

델타 변조( DM-delta modulation)는 아날로그 신호를 디지털 신호로 변환하는 방법 중 하나로, 아날로그 신호를 일련의 구견으로 나누어 근사치에 대해 원본 신호값과 차이를 구하여 오차의 증가 또는 감소에 의해 증가/감소 상태 변화를 결정한다.
델타 변조는 차이 정보를 표현하는데 오직 1비트( +, -)만을 이용한다. 차이 정보에 따라 미리 정해진 차이 값을 더하거나 빼서 원래 정보를 복원한다. 압축률은 매우 높은편이지만, 원래 데이터의 값을 완벽하게 복원할 수 없다.
정의만 들었을 때 이해가 안되기 때문에 자세하게 예시를 풀어서 설명하도록 하겠다.

왼쪽 표의 원래 데이터란, 어느 일정 구간마다의 오른쪽 그래프의 아날로그 신호 값이다. 이후 DM인코딩은 아날로그 신호 대비 디지털 신호에 대한 이진 그래프의 높이가 더 높아야 할지 낮아야 할지 증가 / 감소에 대한 상태이다.
즉 아날로그 신호와 최대한 비슷하게 맞추기 위해 아날로그 신호보다 이진 그래프의 높이가 낮으면 DM인코딩 칸에 +가, 높이가 더 높으면 -를 표시하는 것이다.
오른쪽 그래프에서 첫번 째 이진테이터 그래프의 증감 부분을 보면, 디지털 신호가 될 이진 그래프 보다 아날로그 신호의 그래프가 더 위에 있기 때문에 DM인코딩 칸에는 +가 들어가게 된다. 이 차이는 L(dm)=16으로 일정하다.
다음 칸에서도 아날로그 신호의 데이터는 41 이진 그래프는 32이므로 더 적기 때문에 DM인코딩 칸에는 +가 들어가게 된다.
이를 반복하다보면 원래 데이터가 이진 데이터보다 작아지는 경우가 생기는데 이때에는 DM인코딩 칸에는 -가 들어가게 된다.
차이 정보를 표현하는데 오직 1비트만을 이용하기 때문에 디코딩 하는 경우 원본 데이터에서 외곡이 많이 생기는 편이다.
2. ADM( Adaptive Delta Modultation)

ADM변조는 DM변조에서 증감의 차이 정보를 오직 1비트만 사용하는 것과 다르게 차이 정보의 순서에 따라 차이 값의 규모를 변화시킨다.
L만 사용하는 것이 아닌, p와 q를 추가로 사용한다. p와 q는 p x q =1, p>1, q<1 (p, q는 실수)이다.
- ( +, +), ( -, -): 차이 값의 규모를 키운다 → L x p (1)
- (+, -), (-, +) : 차이 값의 규모를 줄임 → L ⅹ q (2)
L의 차이 값만 사용하는 것이 아닌, p 또는 q와 L 모두 사용하기 때문에 DM에 비해 원래 데이터와의 오차를 더 줄일 수 있다.
위의 표에서 왼쪽 첫번째 부터 t1, t2, t3라고 할 때 t1에서 t2로 ADM인코딩이 +이기 때문에 첫 L인 16이만큼 증가한 것을 확인할 수 있다. t2에서 t3로 갈 때 t2의 ADM인코딩이 +이므로 +가 2번 연속 나와 L의 값을 24로 증가 시킨다.
p=3/2로 설정하여 인코딩 하였기 때문에 16*3/2의 값인 첫 L값에서 8만큼 증가한 L값인 것을 확인할 수 있다.
이처럼 (1)처럼 연속으로 증가하거나 연속으로 감소하는 경우, p 을 L에 곱하여 다음 구간에서 활용하고, (2)와 같은 경우에는 차이 값의 규모를 줄이기 위해 q를 L에 곱하여 다음구간에서 활용한다.이처럼 보정을 통하여 DM변조보다 ADM변조가 원래 데이터와의 오차를 더 줄일 수 있는 것이다.
'Computer Science' 카테고리의 다른 글
| [컴퓨터 구조] 파이프라이닝과 해저드 ( Pipelining & Hazards) (1) | 2024.03.19 |
|---|---|
| [데이터 통신] 정보의 형태와 디지털화 ( 아날로그, 디지털 ) (2) | 2024.03.12 |
| [시스템 소프트웨어] 왜 컴퓨터에서는 10진수가 아닌 2진수를 사용할까? (1) | 2023.10.18 |
| [시스템 소프트웨어] unsigned와 signed의 차이 / signed의 음수 표현 (2) | 2023.10.17 |