KR20160102593A - 분포데이터의 블럭화를 이용한 허프만 부호화의 효율화 방법 및 그 장치 - Google Patents

분포데이터의 블럭화를 이용한 허프만 부호화의 효율화 방법 및 그 장치 Download PDF

Info

Publication number
KR20160102593A
KR20160102593A KR1020150024762A KR20150024762A KR20160102593A KR 20160102593 A KR20160102593 A KR 20160102593A KR 1020150024762 A KR1020150024762 A KR 1020150024762A KR 20150024762 A KR20150024762 A KR 20150024762A KR 20160102593 A KR20160102593 A KR 20160102593A
Authority
KR
South Korea
Prior art keywords
data
group
block
symbols
symbol
Prior art date
Application number
KR1020150024762A
Other languages
English (en)
Inventor
김정훈
Original Assignee
김정훈
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 김정훈 filed Critical 김정훈
Priority to KR1020150024762A priority Critical patent/KR20160102593A/ko
Publication of KR20160102593A publication Critical patent/KR20160102593A/ko

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

본 발명은 기존의 허프만 부호화 방식으로는 압축률이 저조하거나 효과적이지 않을 경우를 위하여 순환블럭 및 그룹의 개념을 도입하여 허프만 부호화 방식을 통해 압축률을 증가시킬수 있는 데이터 그룹별로 구분하여 각각 다른 허프만 부호화테이블을 적용하여 압축률을 향상시키는 방법에 관한 발명이다.
압축 및 압축해제시 순환블럭 및 그룹을 인식하는 방법에 있어서 매우 독창적인 방법을 적용하였다. 1번째부터시작하여 101번째 데이터 10 을 만남으로써, 0~15까지의 모든 출현가능한 심볼을 1번이상 처음으로 만날수가 있다.
제2순환은, 101번째까지의 제1순환까지의 빈도의 분포를 구분한채, 102번째부터 계속 읽기 시작하여, 개념적으로 다시 0~15 까지의 모든 출현가능한 모든 심볼을 1번이상 처음으로 만날때까지를 의미한다. 볼 실시례에서는 102번째 데이터부터 ~ 1082번째 데이터가 제2순환 블럭을 구성한다. 한편 최대순환블록구성방식을 이용하면, 상기와 같은 순환블록의 범위가 다소 확장될 수 있다.

Description

분포데이터의 블럭화를 이용한 허프만 부호화의 효율화 방법 및 그 장치{IMPROVED HUFFMAN CODING METHOD AND APPARATUS THEREOF BY CREATING INNER-BLOCK AND GROUP BASED ON VARIANCE IN GROUP's SYMBOL FREQUENCY DATA}
데이터 압축분야
허프만 부호화 기술
발명을 실시하기 위한 구체적인 내용에 상술
발명을 실시하기 위한 구체적인 내용에 상술
본 발명은 허프만 부호화를 보다 더 효율적으로 구현하여 압축률을 향상시킬 수 있다.
예를들어, 109,505 byte의 데이터 화일을 예로들면, 4비트단위씩 잘라서 그 분포를 확인하면 아래 표1과 같다. 4비트 단위씩 자르면 이진수 "0000"~"1111" 범위의 값 0~15까지의 값을 가질 수 있다.
4비트심볼 출현빈도
0 24434
1 13255
2 13528
3 12391
4 13765
5 12907
6 13236
7 13298
8 12635
9 12377
10 13259
11 12420
12 11828
13 12956
14 12673
15 14048
상기 표1을 허프만 부호화를 수행하여 부호화하면 아래 표2와 같다. 한편 허프만부호화는 공지의 기술로서, 무손실 압축에서 사용되는 엔트로피 부호화의 일종으로 심볼의 빈도로부터 접두사 코드(prefix code, 어떤 한 심볼의 코드가 다른 심볼 코드의 접두어가 되지 않는 코드)를 만들어 내는 알고리즘으로 적게 발생하는 심볼일수록 더 긴 코드를 할당하고, 자주 발생하는 심볼일수록 더 짧은 코드를 할당한다. 고정길이 심볼에 대하여 가변길이 코드를 생성하는 알고리즘 인데, 본 발명에서는 이러한 허프만 부화의 특징에서 "가변길이" 심볼에서 가변길이 코드를 생성하는 알고리즘으로 발전하여 활용하였다.
허프만 코드를 설계하는 방법은 매우 다양한데, 하나의 예시로서, 이진트리(binary tree)를 사용하여 허프만 코드를 생성하는 방법이다. 이진 트리구조에서 외부노드(external node) 혹은 잎(leaf node)는 이에 대응하는 심볼을 나타낸다. 임의의 심볼에 대한 Huffman 코드는 뿌리노드로부터 시작하여 심볼에 대응하는 leaf node까지 내려오면서, 각각의 가지에 할당된 코드워드를 모드 결합하여 생성한다.
Figure pat00001

상기 그림에서 A심볼의 경우에 뿌리노드(root node)에서부터 inner node를 거쳐 차례로 내려오는 경로인 arm 에 할당된 비트를 순차적으로 적용한 "0" 이 허프먼 부호이고, 심볼 B의 경우에는 "10" , 심볼 C의 경우에는 "110", 심볼 D의 경우에는 "111" 이 된다. 이러한 허프만 트리를 구성하는 방법중 최소변이 Huffman 코드를 하나의 예시로 구체적으로 설명하면, 가장 낮은 발생확률또는 빈도를 갖는 두 심볼을 결합한 후 새로 생성된 두심볼간의 발생확률의 합 또는 빈도수의 합을 남아있는 심볼들의 확률과 다시 비교하여 다시 정렬한후 코드 생성과정을 반복한다. 다섯개의 심볼로 구성된 집합 S={a,b,c,d,e} 에 대한 최소변이 Huffman 코드를 설계해보면, 각각의 발생 빈도는 a,b,c,d,e 순서대로 2회,4회, 2회,1회,1회라고 하자. 물론 횟수이외에 발생확률을 이용하여도 계산하여도 동일한 계산과정을 따르면된다.
본 발명에서는 상기 심볼의 집합 a,b,c,d,e등이 바로 각각 출현한 바이너리 클러스터들이 심볼이 되는 것이다.
최소변이 Huffman 코드의 시작은 가장 낮은 발생확률 또는 출현 빈도를 갖는 두 심볼 d와 e를 결합한다. 그리고 두 심볼에 대응하는 코드워드의 가장 마지막 비트에 서로 다른 비트를 할당한다. 이때 서로다른 비트를 할당하는 규칙은, 발생확률 또는 출현빈도가 높은 쪽에 "0"을 적은쪽에 "1"을 할당하고, 물론 그 반대도 가능하다. 그런데 일단 정해지면 그 규칙은 전체 트리생성과정에 일관적으로 적용되어야 복호화과정이 간명해진다.
확률 또는 출현빈도가 같으면, 심볼의 정렬순서에 따라 특정 기준으로 선택하여 할당할 수 있다. 본 실시례에서는, 심볼을 오름차순 정렬했을때 위에 위치하는 심볼에 "0"을 할당하였다. 다만 심볼을 내림차순 정렬을 하면 위에 위치하는 심볼과 아래 위치하는 심볼의 위치가 바뀌어 "0"과 "1"의 할당순서는 달라질수 있으나, 허프만 트리의 구조는 기본적으로 유지되므로, 부호화 및 복호화 그리고 성능에 영향을 주지는 않는다
즉 아래 그림에서, D 에 "0"을 할당하고, E에 "1"을 할당했는데, D에 "1"을 할당하고, E에 "0"을 할당해도 무방하다는 것이다. 다만, 일단 규칙이 내림차순이냐 오름차순이냐가 정해지면 일관되게 적용하여야 복호화과정이 간명해진다.
한편, 다음으로 이 두 심볼(d,e)를 결합하여 새로운 심볼 n1을 만든. 새로운 심볼 n1의 발생빈도는 두 심볼 d와 e의 발생빈도의 합과 같다 따라서, n1의 빈도는 2이다. 그리고, 생성된 a,b,n1,c 이렇게 4개의 심볼의 발생빈도에 따라 심볼들을 재정렬하되, 재정렬시 새롭게 생성된 심볼의 확률과 동일한 확률 또는 출현빈도를 갖는 기존 심볼이 있는 경우, 새롭게 생성된 심볼을 동일한 확률 또는 출현빈도를 갖는 기존 심볼보다 더 위쪽에 위치시킨다. 이것이 일반 huffman코드와 최소변이 huffman코드와 다른점이다.
상기와 같은 과정을 아래 그림으로 보인다.
Figure pat00002
이 과정을 요약하면 아래와 같다. 각 leaf node로 내려오는 경로의 부호의 합이 바로 각 심볼당 허프만 부호가 된다.
Figure pat00003

상기 예를 실제 바이너리 클러스터를 심볼로 적용하여 허프만 코드를 생성한 결과를 표20에 보인다.
바이너리 클러스터 심볼 출현빈도 허프만부호
A 2 10
B 4 00
C 2 11
D 1 010
E 1 011
본 발명은 허프만 부호화 산출방법은 최소변이 트리를 이용한 결과를 사용했으나, 본 발명에서 일반적 허프만 트리, 적응적허프먼 부호화등 매우 다양한 공지의 허프만 트리생성방법을 이용하여 부호화하고, 복호화할 수 있음은 물론이며, 본 발명의 일 실시례에서는 최소변이 트리를 이용한 허프만 부호화방식을 이용하여 표현하였다.
한편 이렇게 최소변이 Huffman tree 구현법에 따라 부호화한 결과 압축이후의 크기를 아래 표2에 보인다.
4비트 심볼 출현빈도 허프만부호 압축크기 원본크기
0 24434 000 73302 97736
1 13255 1001 53020 53020
2 13528 1100 54112 54112
3 12391 0010 49564 49564
4 13765 1101 55060 55060
5 12907 0110 51628 51628
6 13236 1000 52944 52944
7 13298 1011 53192 53192
8 12635 0100 50540 50540
9 12377 11111 61885 49508
10 13259 1010 53036 53036
11 12420 0011 49680 49680
12 11828 11110 59140 47312
13 12956 0111 51824 51824
14 12673 0101 50692 50692
15 14048 1110 56192 56192
총합 875811 876040
상기 표2를 보면 알 수 있다시피, 허프만 부호화 사전을 제외한 압축된 데이터 229 bit(=876040-875811) 에 불과함을 알 수 있다
본 발명은 이렇게 전체적인 심볼별 출현빈도에 따른 허프만 부호화의 결과가 좋지 않을경우, 이의 결과를 보다 더 효율적으로 하기 위한 방법이다.
먼저, 본 실시례를 예로들면, 4비트로 구성된 심볼들을 순차적으로 읽어오면서 모든 출현가능한 심볼을 최초로 1번이상 다 만났을 경우를 제1순환 블럭이라고 한다. 예를 들면, 본 실시례에서는, 101번째 데이터인 10 (이진수로 "1010") 을 만나면, 0~15까지의 전체 심볼이 모두 1번이상씩 만나게 되는데, 100번째 데이터까지 읽은 후의 집계결과를 표3에, 다음 데이터인 101번째 데이터까지 읽은후의 집계결과를 표4에 보인다.
심볼 출현빈도
0 33
1 5
2 4
3 6
4 7
5 8
6 9
7 7
8 5
9 1
11 2
12 3
13 4
14 4
15 2
총합계 100
심볼 출현빈도
0 33
1 5
2 4
3 6
4 7
5 8
6 9
7 7
8 5
9 1
10 1
11 2
12 3
13 4
14 4
15 2
총합계 101
상기 표3과 표4에서 보듯이 1번째부터시작하여 101번째 데이터 10 을 만남으로써, 0~15까지의 모든 출현가능한 심볼을 1번이상 처음으로 만날수가 있다.
제2순환은, 101번째까지의 제1순환까지의 빈도의 분포를 구분한채, 102번째부터 계속 읽기 시작하여, 개념적으로 다시 0~15 까지의 모든 출현가능한 모든 심볼을 1번이상 처음으로 만날때까지를 의미한다. 볼 실시례에서는 102번째 데이터부터 ~ 1082번째 데이터가 제2순환 블럭을 구성한다.
표5에는, 102번째부터 ~ 1181번째 데이터를 읽은 결과의 분포를 보이고, 표6은 102번째부터~1182번째 데이터를 읽은 결과의 분포를 보인다.
심볼 출현빈도
0 1035
1 3
2 5
3 4
4 3
5 1
6 5
7 4
8 2
9 2
10 4
11 3
12 4
13 3
15 2
총합계 1080
심볼 출현빈도
0 1035
1 3
2 5
3 4
4 3
5 1
6 5
7 4
8 2
9 2
10 4
11 3
12 4
13 3
14 1
15 2
총합계 1081
상기 표5 및 표6을 보다시피, 1182번째의 14를 만남으로써 0~15까지의 모든심볼을 다시 처음으로 1번이상 만나게 됨을 알 수 있다.
아래 그림은 상기와 같은 제1순환블럭과, 제2순환블럭을 도식화하였다.
Figure pat00004
한편, 이렇게 순환블록을 구분하는 방식의 한가지 추가적인 변형으로서
나타날수 있는 모든 심볼을 처음으로 1번 만날때, 그 위치의 심볼까지(예를들면 상기 그림에서는 101번째, 1182 번째 심볼,...)만 포함하여 하나의 순환블록을 구성할 수도 있으나, 뒤이어서 같은 심볼이 연속하여 나타는 경우까지를 포함하여 하나의 순환블록을 구성할 수도 있다. 전자의 방식을 본 발명에서는 최소순환블록 구성방식이라고 하고, 후자의 방식의 최대순환블록 구성방식이라고 명명하기로 하고, 본 발명에서는 두가지 모두 사용할 수가 있으며, 설정으로 특정 하나를 선택할 수 있다.
즉 아래 그림을 보면, 최대순환블록 방식을 보이고 있다. 이미 101번째 심볼에서 전체 나타날수 있는 심볼을 최초로 1회이상 모두 만났지만, 102번째부터 199번째까지 101번째와 동일한 심볼이 연속된 경우와 같은 경우, 199번째까지를 제1순환블록으로 포함하고, 모든 심볼의 출현빈도를 초기화한다음 200번째부터 제2순환블록을 새롭게 구성하는 방식이다.
Figure pat00005

반면 최소순환블록방식의 경우에는 아래 그림과 같이, 이미 101번째 심볼에서 고정길이 비트 추출방식에서 전체 나타날수 있는 심볼을 최소 1회이상 모두 만났는데, 여기에서 제1순환블럭을 생성하고, 모든 심볼의 출현빈도를 초기화한다음 102번째 심볼부터 제2순환블록을 새롭게 구성하는 방식이다.
Figure pat00006

본 명세서의 실시례에서는 상기중에 최소블록구성방식의 예를 들었으며, 최대 블록구성방식으로 순환블록을 구성하여 동일한 알고리즘을 적용할 수 있다.
이와 같은 방식을 확장하면, 원본데이터에서 N 번째 순환을 이루는 심볼들의 순번의 구간을 구분할 수 있는데,
본 발명에서는 먼저 상기와 같이 제1순환블럭을 확인하였으면, 해당 순환블럭의 심볼과 출현빈도의 분포표 예를들어, 표4와 같은 표를 이용하여, 분포표가 충분히 허프만 부호화를 수행하였을때 압축효과가 클 것인가를 미리 계산할 수 있다. 예를들어, 어떤 지표를 이용하여 압축효과를 예측할 것인가는 여러가지가 있을수 있고, 본 발명에서는 하나의 예시로서 심볼별 출현빈도의 분산값을 하나의 지표로 삼았으나, 심볼별 출현빈도의 분포의 경향을 나타내는 어떠한 형태의 통계학적, 수리적 지표를 이용하여도 무방하나 다만 압축효율에 있어서는 다소 차이가 발생할 수 있다. 중요한 점은 허프만 부호화의 압축효과를 가장 극대화 할수 있는지 여부를 확인할 수 있으면 된다.표4로 부터, 제1순환블럭의 각 심볼별 출현빈도의 분산값을 구하면 약 56.495 이다. 분산값을 구하는 공식은 공지의 방법으로 적용가능하므로 구체적인 계산법은 생략하도록 한다.
그런데 이 분산값을 미리 설정해둔 threshold값 T 와 비교하여 T 이상일 경우에는 충분히 데이터가 분산하여 분포한다는 것을 알 수 있으므로, 허프만 부호화를 이용한 압축효과가 클 것으로 예상하는 것인데, 본 실시례에서 T=10000 으로 설정하였다.
따라서, 표4의 제1순환블럭까지의 데이터분포로는 충분한 허프만 부호화의 압축효과를 얻을 수 없을 것이다. 이와 같은경우에는, 제1순환 블럭 및 다음 순환블럭인 제2순환블럭의 분포값을 합산한 표7과 같은 데이터의 출현빈도의 분산값을 구하여야 한다. 표7은 결국 표4의 제1순환블럭과 표6의 제2순환블럭의 분포값을 합산한 것이다.
심볼 출현빈도
0 1068
1 8
2 9
3 10
4 10
5 9
6 14
7 11
8 7
9 3
10 5
11 5
12 7
13 7
14 5
15 4
총합계 1182
상기 표7의 출현빈도의 분산값을 계산하면, 70826.25 이다. 따라서 T=10000을 넘으므로, 제1순환블럭 및 제2순환블럭을 묶어서 제1그룹(GRP=1)이라고 하고, 제1그룹은 내부적으로 2개의 순환블럭을 가지고 있고(RL=2), 범위는 1번째 데이터로부터~1182번째 데이터까지로 정의된다. 제1그룹에 대한 허프만부호화를 수행하여, 압축을 수행하면 아래 표8과 같다 CV는 심볼의 종류이며(0~15 , 이진수로 표현하면 0000~1111이다), HUFF는 최소변이 허프만 트리에 따른 허프만 부호화결과이다. VAR_S 는 해당 그룹(GRP=1) 에서의 출현빈도(FRQ)의 분산값을 의미한다. DIC_SIZE는 허프만 부호화의 결과값 및 압축해제를 위한 헤더를 구성하는 사전정보중의 일부의 크기이다. 압축해제를 위한 정보로서 후술하겠는데, DIC_SIZE의 전체 합과 사전정보의 구분정보를 추가한 값이 최종 DIC_SIZE가 된다. DIC_SIZE는 별도로 하고 먼저 간단히 COMPRESSED로 표현된 압축예상 크기는 1620 bit가 되고 원본크기는 4728 비트가 된다. 이때 원본은 제1순환블럭 및 제2순환블럭을 포함하는 1번째~1182번째데이터까지의 크기이다.
CV FRQ GRP RL VAR_S COMPRESSED DIC_SIZE ORIGINAL CV HUFF
0 1068 1 2 70286.25 1068 1 4272 0 1
1 8 1 2 70286.25 40 5 32 1 01011
2 9 1 2 70286.25 45 5 36 2 01100
3 10 1 2 70286.25 50 5 40 3 01110
4 10 1 2 70286.25 50 5 40 4 01111
5 9 1 2 70286.25 45 5 36 5 01101
6 14 1 2 70286.25 56 4 56 6 0011
7 11 1 2 70286.25 44 4 44 7 0001
8 7 1 2 70286.25 35 5 28 8 00101
9 3 1 2 70286.25 18 6 12 9 010100
10 5 1 2 70286.25 25 5 20 10 00000
11 5 1 2 70286.25 25 5 20 11 00001
12 7 1 2 70286.25 35 5 28 12 01000
13 7 1 2 70286.25 35 5 28 13 01001
14 5 1 2 70286.25 25 5 20 14 00100
15 4 1 2 70286.25 24 6 16 15 010101
즉, 1번째~1182번째까지의 제1순환블럭 및 제2순환블럭의 데이터에 대해 상기 표8의 부호화테이블을 토대로, 각 심볼에 대해 HUFF코드로 비트할당하여 압축데이터를 생성한다.
이렇게 제1그룹에 대한 압축을 마치고, 다음 데이터인 1183번째 데이터부터 계속 이어서, 제2그룹을 상기 제1그룹과 동일한 방식을 적용하여 그룹별로 압축을 수행을 계속해나간다. 제2그룹에서는 개념적으로 1183번째 데이터가 1번째 데이터와 같다고 보고 제1그룹을 생성하는 과정을 동일하게 적용하면 된다.
표9에 제2그룹에 대한 압축결과를 보인다. 제2그룹은 16개의 순환블럭으로 구성됨을 알수 있다. 즉 제3순환블럭부터~제18순환블럭까지의 심볼의 분포수를 합산한 결과값이 분산이 70582.36으로서 T=10000을 최초로 넘었다는 것을 알수 있고,
1183번째에서부터 FRQ의 합인 2069개의 데이터를 포함하는 3251번째까지의 데이터임을 알 수 있다. 8276 bit의 원본데이터를 5760비트로 압축하였음을 알수 있다.
아래 표17에 그 내용을 보인다.
CV FRQ GRP RL VAR_S COMPRESSED DIC_SIZE ORIGINAL CV HUFF
0 1125 2 16 70582.36 1125 1 4500 0 1
1 61 2 16 70582.36 305 5 244 1 01010
2 85 2 16 70582.36 340 4 340 2 0000
3 57 2 16 70582.36 285 5 228 3 00110
4 53 2 16 70582.36 265 5 212 4 00010
5 57 2 16 70582.36 285 5 228 5 00111
6 71 2 16 70582.36 355 5 284 6 01101
7 74 2 16 70582.36 370 5 296 7 01110
8 59 2 16 70582.36 295 5 236 8 01000
9 54 2 16 70582.36 270 5 216 9 00011
10 77 2 16 70582.36 385 5 308 10 01111
11 63 2 16 70582.36 315 5 252 11 01100
12 56 2 16 70582.36 280 5 224 12 00100
13 56 2 16 70582.36 280 5 224 13 00101
14 60 2 16 70582.36 300 5 240 14 01001
15 61 2 16 70582.36 305 5 244 15 01011
T와 관련하여, 순환블럭의 분포수를 합산하면서 분산을 구하는 방식도 속도면에서 경제적인데, 각 순환블럭의 분포수를 합산하면서 실제로 그에 따른 허프만 부호화를 수행하여 가장 압축효과가 높은 순환블럭의 합산조합을 계산하여, 하나의 그룹으로 묶으면서 압축을 수행할 수도 있다.
즉, 상기에서는 제1순환블럭+제2순환블럭의 심볼별 출현빈도의 분산이 T=10000을 넘었음을 이용하여 제1그룹으로 묶었으나, 제1순환블럭에 대해 실제 허프만 부호화를 수행하여 그 압축률과 제1순환블럭+제2순환블럭에 대한 실제 허프만 부호화를 수행한 압축률, 그리고 제1순환블럭+제2순환블럭+제3순환블럭에 대한 실제 허프만 부호화를 수행한 압축률등 제a순환블럭~제b순환블럭에 대한 실제 허프만 부호화의 수행한 결과의 압축률중에서 어떤 조합이 가장 효과적인지를 계산하여 그룹을 묶으면서 압축을 수행할 수도 있다.
한편 다시 상기 분산에 따른 순환그룹 묶음법으로 돌아와서, 이렇게 각 그룹별로 압축을 수행하다보면, 데이터의 마지막까지 오게되는데, 마지막 그룹까지 묶은다음 압축을 한다음, 그룹을 묶는 조건을 만족하지 못한 상태로 데이터의 끝에 도달하게 된다. 이와 같은 마지막 미완의 그룹을 최종그룹이라고 명명하기로 하고, 최종그룹은 그대로 T값의 조건을 만족하지 못하더라도, 허프만 부호화를 그대로 수행하도록 한다. 본 실시례에서는 제28그룹이 최종그룹이며,
표9에 그 압축결과를 보인다. 최종그룹은 분산조건을 만족하지 않으므로, VAR_S는 의미가 없고, 몇개의 순환블럭이 묶였는지도 큰 의미가 없으므로 표9에서는 공란으로 보인다.
CV FRQ GRP RL VAR_S COMPRESSED DIC_SIZE ORIGINAL CV HUFF
0 219 28 219 1 876 0 0
1 25 28 100 4 100 1 1010
2 29 28 116 4 116 2 1011
3 11 28 55 5 44 3 10000
4 17 28 85 5 68 4 11100
5 13 28 65 5 52 5 10011
6 41 28 164 4 164 6 1111
7 35 28 140 4 140 7 1101
8 11 28 55 5 44 8 10001
9 10 28 60 6 40 9 111011
10 5 28 30 6 20 10 100100
11 6 28 36 6 24 11 100101
12 9 28 54 6 36 12 110011
13 9 28 54 6 36 13 111010
14 7 28 42 6 28 14 110010
15 16 28 80 5 64 15 11000
표10에서는 본 실시례의 모든 그룹별 압축효과를 표로 보이기로 한다. 지면관계상 3그룹부터 26그룹까지는 생략하였다.
CV FRQ GRP RL VAR_S COMPRESSED DIC_SIZE ORIGINAL CV HUFF
0 1068 1 2 70286.3 1068 1 4272 0 1
1 8 1 2 70286.3 40 5 32 1 01011
2 9 1 2 70286.3 45 5 36 2 01100
3 10 1 2 70286.3 50 5 40 3 01110
4 10 1 2 70286.3 50 5 40 4 01111
5 9 1 2 70286.3 45 5 36 5 01101
6 14 1 2 70286.3 56 4 56 6 0011
7 11 1 2 70286.3 44 4 44 7 0001
8 7 1 2 70286.3 35 5 28 8 00101
9 3 1 2 70286.3 18 6 12 9 010100
10 5 1 2 70286.3 25 5 20 10 00000
11 5 1 2 70286.3 25 5 20 11 00001
12 7 1 2 70286.3 35 5 28 12 01000
13 7 1 2 70286.3 35 5 28 13 01001
14 5 1 2 70286.3 25 5 20 14 00100
15 4 1 2 70286.3 24 6 16 15 010101
0 1125 2 16 70582.4 1125 1 4500 0 1
1 61 2 16 70582.4 305 5 244 1 01010
2 85 2 16 70582.4 340 4 340 2 0000
3 57 2 16 70582.4 285 5 228 3 00110
4 53 2 16 70582.4 265 5 212 4 00010
5 57 2 16 70582.4 285 5 228 5 00111
6 71 2 16 70582.4 355 5 284 6 01101
7 74 2 16 70582.4 370 5 296 7 01110
8 59 2 16 70582.4 295 5 236 8 01000
9 54 2 16 70582.4 270 5 216 9 00011
10 77 2 16 70582.4 385 5 308 10 01111
11 63 2 16 70582.4 315 5 252 11 01100
12 56 2 16 70582.4 280 5 224 12 00100
13 56 2 16 70582.4 280 5 224 13 00101
14 60 2 16 70582.4 300 5 240 14 01001
15 61 2 16 70582.4 305 5 244 15 01011
0 477 27 8 12572.7 477 1 1908 0 0
1 55 27 8 12572.7 220 4 220 1 1001
2 65 27 8 12572.7 260 4 260 2 1011
3 26 27 8 12572.7 156 6 104 3 111111
4 54 27 8 12572.7 216 4 216 4 1000
5 51 27 8 12572.7 255 5 204 5 11110
6 100 27 8 12572.7 400 4 400 6 1110
7 80 27 8 12572.7 320 4 320 7 1100
8 23 27 8 12572.7 138 6 92 8 110101
9 23 27 8 12572.7 138 6 92 9 110110
10 12 27 8 12572.7 72 6 48 10 101000
11 16 27 8 12572.7 96 6 64 11 101001
12 24 27 8 12572.7 144 6 96 12 110111
13 25 27 8 12572.7 150 6 100 13 111110
14 17 27 8 12572.7 102 6 68 14 110100
15 30 27 8 12572.7 150 5 120 15 10101
0 219 28 219 1 876 0 0
1 25 28 100 4 100 1 1010
2 29 28 116 4 116 2 1011
3 11 28 55 5 44 3 10000
4 17 28 85 5 68 4 11100
5 13 28 65 5 52 5 10011
6 41 28 164 4 164 6 1111
7 35 28 140 4 140 7 1101
8 11 28 55 5 44 8 10001
9 10 28 60 6 40 9 111011
10 5 28 30 6 20 10 100100
11 6 28 36 6 24 11 100101
12 9 28 54 6 36 12 110011
13 9 28 54 6 36 13 111010
14 7 28 42 6 28 14 110010
15 16 28 80 5 64 15 11000
원본데이터 사이즈 876,040 bit 를 857,929 bit로 압축하였고,
여기에 압축해제를 위한 사전정보를 구성하는 방법을 설명하고자 한다.
압축해제를 위한 사전정보는 표10의 HUFF 코드를 순차적으로 일렬로 저장을 먼저한다 . 즉 표10의 그룹1 의 HUFF코드를 예를들면
표11과 같은데, 일렬로 저장은 하면 "10101101100011100111....010101" 과 같을 것이다.
HUFF
1
01011
01100
01110
01111
01101
0011
0001
00101
010100
00000
00001
01000
01001
00100
010101
상기와 같이 표10의 모든 HUFF데이터를 일렬로 저장을 하면, 표10의 DIC_SIZE의 총합인, 1916 bit가 된다.
이렇게 일렬로 구성된 "연결HUFF데이터"를 0~15개의 심볼단위로 정확하게 구분하면서, 전체 28개 그룹별로 구분하기 위해서는, 표10의 각각의 HUFF셀당의 길이인 DIC_SIZE 셀 각각을 저장하여야 하는데, 그대로 저장하는것보다는 DIC_SIZE를 허프만 부호화하여 저장하는것이 효과적이다.
표12에 표10의 DIC_SIZE의 값과 그 분포값을 보이고, 허프만 부호화결과값을 표13에 보인다.
DIC_SIZE 출현빈도 크기
1 7 7
2 4 8
3 15 45
4 284 1136
5 112 560
6 22 132
7 4 28
총합 448 1916
DIC_SIZE 출현빈도 원본크기 허프만부호화 압축크기
1 7 7 00110 35
2 4 8 001110 24
3 15 45 0010 60
4 284 1136 1 284
5 112 560 01 224
6 22 132 000 66
7 4 28 001111 24
총합 448 1916 717
표13의 DIC_SIZE 허프만 부호화결과인 717bit의 압축데이터 및 표13이 DIC_SIZE 및 허프만 부호화를 이용한 부호화 테이블을 이용하면,
표10의 448개의 HUFF cell을 연결한 연결huff데이터를 각각 16개씩 구분할 수 있고, 몇개의 그룹에 할당되었는지를 알수 있게 된다.
즉, 표11의 그룹1의 연결huff 데이터 "10101101100011100111....010101" 에 대하여, 그룹1의 DIC_SIZE 정보의 허프만 압축데이터 00110 01 01 01 01 01 1 1 01 000 01 .... 000 를 표13의 부호화테이블을 이용하여 해독하면,
DIC_SIZE가 1,5,5,5,5,5,4,4,5,6,5,...., 6 임을 알수있고, 이 정보를 이용하여 연결huff데이터를 해당 DIC_SIZE 값의 비트수로 각각 분할하면 표11의 huff 만 데이터의 cell이 완벽히 복구된다. 각 huffman 부호는 4비트 고정길이 추출심볼의 경우에는 16개마다 1개 순환그룹이 사용하는 허프만 부호임을 자연스럽게 알수있다.
즉 몇비트 고정길이 추출을 수행하였는지를 알면, 몇개의 허프만 부호마다 1개의 순환그룹이 사용하는 허프만 부호인지를 알 수 있다는 의미이다.
따라서, 압축해제를 위한 사전정보로서, 요약하면,
표10의 huff cell을 연결한 연결huff데이터 / DIC_SIZE의 허프만 압축데이터 / DIC_SIZE 별 부호화테이블이 필요하다.
다음으로, 각 그룹별 RL정보가 필요하다 . 표10을 정리한 표14를 보인다.
각 그룹별로 몇개의 순환블럭이 포함된것인지에 대한 정보이다.
RL정보는 최대값을 표현할수있는 비트수를 할당하여, GRP수만큼 저장하면 된다.
표14에서 보듯 최대 RL값은 467순환블럭을 포함한 제7그룹이다. 467은 9비트의 이진수로 표현가능하므로, 최종그룹을 제외한 27개 group의 각 RL을 표현하기 위해 27*9 = 243bit의 정보가 압축해제를 위한 정보에 추가된다
물론 각 그룹별 RL 정도들 자체도 허프만 부호화방식이나 별도의 압축방식으로 더 줄일수 있음은 물론이다.
GRP RL
1 2
2 16
3 19
4 108
5 223
6 316
7 467
8 355
9 403
10 165
11 172
12 64
13 60
14 40
15 35
16 143
17 96
18 31
19 232
20 196
21 159
22 31
23 23
24 16
25 3
26 4
27 8
28 N/A
이제 최종압축결과를 나열하면 아래와 같다.표10의 결과로부터 각 해당 그룹별로 해당 범위의 순번에 속하는 심벌에 대한 허프만 부호화결과 및 연결huff데이터, DIC_SIZE 부호화 테이블 및 허프만 부호화데이터, 각 group별 RL데이터이다.
이제 압축해제 방법을 설명하고자 한다.원본심볼에 대한 허프만코드 압축데이터에 대하여 일렬huff데이터 및 DIC_SIZE정보를 이용하여, 각 그룹별로 적용될 0~15까지의 각 심볼당 허프만 코드를 해독하면, 아래와 같다. 16개씩의 허프만 코드당 1개의 그룹에 적용될 압축해제를 위한 허프만 각 심볼 0~15에 대한 순차적인 허프만 부호인 것이다. 일련huff데이터에 대하여 DIC-SIZE 압축해제 데이터로부터 16개의 huffman 코드를 분리하면,아래 표15와 같다. 이제 압축데이터로의 제일 앞에서부터 뒷방향으로 이동하면서, 아래 HUFF만 코드별로 할당된 심볼을 복호화를 진행한다.
GRP 심볼 HUFF
1 0 1
1 1 01011
1 2 01100
1 3 01110
1 4 01111
1 5 01101
1 6 0011
1 7 0001
1 8 00101
1 9 010100
1 10 00000
1 11 00001
1 12 01000
1 13 01001
1 14 00100
1 15 010101
한편 그룹별 RL데이터로부터 group 1에는 RL=2임을 알수있다.
그리고, 4비트 고정비트열 추출에 따른 순환블록 방식은 최소순환블록 방식을 이용하여 구성하였기 때문에 복호화를 진행하면서 복호화된 심볼의 빈도수 분포를 계산하면서, 모든 심볼을 처음으로 1회이상 만나는 경우에 RL을 1감소시키고, 심볼의 빈도수 분포를 리셋한다음 다시 그 다음 복호화 심볼부터 심볼의 출현빈도수를 계산하여 다시 처음으로 모든 심볼을 처음으로 1회이상 만날때 RL을 1감소시키는 과정을 반복한다. 이때 RL이 0 이되므로, 즉 돌려말하면, 복호화를 진행하면서 복호화되는 심볼들의 빈도를 조사하여, 출현가능한 모든심볼을 1회이상 처음으로 만날때가 RL회에 걸쳐 진행되면 해당 그룹에 대한 복호화는 끝난다는 것이다.
그런데 만약에 순환블록 구성방식을 최대순환블록 구성방식을 적용했다면,
복호화를 진행하면서 복호화된 심볼의 빈도수 분포를 계산하면서, 모든 심볼을 처음으로 1회이상 만나는 경우 바로 바로 RL을 1 감소시키는 것이 아니라, 모든 심볼을 처음으로 1회이상 만났을때의 기준심볼의 위치 다음에 기준심볼과 동일한 심볼이 계속 이어져서 나타났다면, 그 심볼들까지를 모두 만났을때 RL을 1 감소시켜서 한개의 순환그룹내의 순환블록으로 인식하는 것이다. 이러한 과정을 반복해서, RL이 0 이되면, 그때까지의 수집된 심볼들이 해당 순환그룹이 되는것이다.
한편, 본 실시례에서는 최소순환블록 구성 방식의 실시례이고, 그룹1의 경우 RL=2이므로, 제1순환블럭, 제2순환블럭에 해당하는 심볼을 표15 의 테이블을 이용한 복호화가 모두 끝나게 된다.
다음으로, 원본심볼에 대한 허프만코드 압축데이터에 대하여 일렬huff데이터 및 DIC_SIZE정보를 이용하여, 17번째~32번째의 2그룹에 적용될 0~15까지의 각 심볼당 허프만 코드를 해독하여, 제2그룹의 복호화를 위한 허프만 복호화 테이블을 구성한다. 표16과 같다. 이제 압축데이터에서 제1그룹 복호화까지 진행된 데이터의 다음 데이터부터 다시 이어서 뒷방향으로 이동하면서, 아래 HUFF만 코드별로 할당된 심볼을 복호화를 진행한다.그룹1의 복호화와 같은 방식으로 진행하는데 표14의 제2그룹의 RL값이 16이므로, 16개의 순환블럭을 만날때까지 계속 표16의 테이블을 기준으로 그룹2의 데이터로서 복호화를 진행하면 된다.
GRP 심볼 HUFF
2 0 1
2 1 01010
2 2 0000
2 3 00110
2 4 00010
2 5 00111
2 6 01101
2 7 01110
2 8 01000
2 9 00011
2 10 01111
2 11 01100
2 12 00100
2 13 00101
2 14 01001
2 15 01011
상기와 같은 과정을 계속적으로 반복하며, 마지막 최종그룹의 경우에는, RL 에 관계없이 압축데이터의 마지막에 도달할때까지 해당 그룹의 허프만 테이블을 참조하여 압축해제과정을 모두 진행함으로써, 압축해제과정은 종료하게 된다.
본 발명의 효과를 보다 정량적으로 보이면, 표10으로부터 심볼에 대한 허프만 압축데이터 857,929 bit + DIC_SIZE압축데이터 717 bit + 각 그룹별 RL데이터 243비트 + 소량의 DIC_SIZE 압축해제테이블(표13의 DIC_SIZE별 허프만코드데이터)등의 데이터로서 대략적으로 858,889 에서 몇백비트 내외에서 최종압축데이터를 얻을수 있다. 그런데 표2를 보듯이 동일한 데이터에 대하여, 최소변이 허프만 트리를 이용한 허프만부호화를 수행하면, 875,811 bit 로밖에는 압축이 되지 않으며, 이마저도 허프만 사전테이블을 제외한 값이다.
따라서 본 발명을 이용하여 약 17,000 bit 의 추가압축효과를 얻을 수 있음, 특히 출현빈도가 거의 균등하여 허프만부호화의 효율이 떨어지는 데이터 분포에서도 사용이 가능하다.
본 실시례에서는 4비트단위로 구분된 심볼을 기준으로 하여 0~15까지의 16개의 심볼을 기준으로 하였으나, K 비트 단위로 구분된 심볼을 기준으로 0~2^k-1 까지의 2^k 개의 심볼을 기준으로 하여 T값을 적절히 데이터의 전체적인 크기와 분산에 따라 적절하게 사용자가 지정하여 최적의 압축률을 보이도록 설정할 수 있다.
그 예시로서, 8비트 단위로 구분하여 데이터를 읽어들일 경우 출현가능한 심볼은 0~255 까지 256개의 심볼이 가능하다.
5,682,432 bit의 이진데이터를 8비트 단위로 읽어들이면, 710,304 byte가 되는데, 심볼별 출현빈도는 아래표 18과 같다.
심볼 출현빈도
0 7465
1 3878
2 3455
3 4163
4 2237
5 2696
6 3644
7 2883
8 2029
9 2193
10 2383
11 2475
12 3067
13 2506
14 12051
15 2262
16 1638
17 2112
18 2429
240 3181
241 3418
242 1180
243 1797
244 1722
245 1394
246 1966
247 1421
248 3151
249 1392
250 1756
251 1721
252 2103
253 1650
254 1740
255 1779
전체 710,304개의 심볼들을 최상위부터 최하위로 이동하면서(또는 그 반대로) 256가지의 심볼을 1회이상 처음 만날때마다 상술한 최소순환블록 또는 최대순환블록 단위로 구분하는 방식중 하나로 구분한뒤, 해당 신규 블록이 구분때마다, 해당 순환그룹 및 해당 신규 블록까지를 포함한 256가지 심볼별 출현빈도를 계산한뒤, 출현빈도들의 분산값을 계산하여 특정값이 넘지 못할경우(본 실시례에서는 10,000으로 설정했음) RL을 추가로 1씩 증가시고, 신규 순환블록들은 통합하여 순환그룹을 계속 키우는 과정을 거치고, 분산이 특정임계치를 넘어서면 해당 순환그룹에 대하여 허프만 부호화를 수행하는 과정을 반복한다. 상기 설명과정은 4비트 고정비트열로 추출할 것인지 8비트 고정비트열로 추출할것이지의 차이만 있고, 나머지 과정은 모두 동일하다.
다만 8비트 고정비트열 추출한 경우에는, 본 명세서에서는 순환블록구성시 최대순환블록 단위로 구분하는 방식으로 압축을 수행한 예시를 표19에 보인다.
전체 5,682,432 bit 에 대하여 본 발명을 적용한 결과 5,320,225 bit로 압축되었으며(부호화사전포함), 일반적인 단회 허프만 부호화 적용결과 5,544,278 bit로 압축되어(부호사전 제외) 압축율의 개선이 있음을 알수있다.
아래 표19를 보듯이, GRP은 25개가 생성되었고, 마지막 25번 그룹은 순환그룹내 분산값이 특정 값을 넘기지 못한채로, 데이터의 끝에 도달한 경우이기 때문에, 순환블록의 구분의 구분없이 그룹단위에서 허프만 부호를 생성한 결과이고, 순환그룹 1의 경우에는 RL=12이므로, 12개의 순환블록이 합해진 결과 심볼별 출현빈도의 분산값이 특정값(본 발명에서는 10000이상)을 넘어서서 12개 순환블록을 포함하여 제1순환그룹이 되고, 이에 대한 허프만 부호화를 수행한 결과이다.
CV FRQ GRP RL VAR_S COMPRESSED DIC_SIZE ORIGINAL HUFF
0 1479 1 12 16946.68 5916 4 11832 1110
1 96 1 12 16946.68 768 8 768 11000000
2 79 1 12 16946.68 711 9 632 001001000
3 112 1 12 16946.68 896 8 896 10001000
4 88 1 12 16946.68 792 9 704 000001000
5 85 1 12 16946.68 765 9 680 000101000
6 118 1 12 16946.68 944 8 944 01111110
7 93 1 12 16946.68 744 8 744 11010110
8 82 1 12 16946.68 738 9 656 000111000
9 79 1 12 16946.68 711 9 632 001001001
10 80 1 12 16946.68 720 9 640 001000100
11 87 1 12 16946.68 783 9 696 000011010
250 69 1 12 16946.68 621 9 552 011000101
251 75 1 12 16946.68 675 9 600 001011111
252 115 1 12 16946.68 920 8 920 10000101
253 88 1 12 16946.68 792 9 704 000000011
254 101 1 12 16946.68 808 8 808 10101111
255 150 1 12 16946.68 1200 8 1200 00110100
0 1780 25 8900 5 14240 00001
1 176 25 1408 8 1408 01001010
2 295 25 2065 7 2360 1000001
3 151 25 1208 8 1208 01111010
4 95 25 855 9 760 001110000
5 283 25 1981 7 2264 1001101
6 169 25 1352 8 1352 01010010
7 105 25 945 9 840 001000110
8 201 25 1608 8 1608 00101100
9 186 25 1488 8 1488 00111111
10 100 25 900 9 800 001011110
250 144 25 1152 8 1152 10001111
251 114 25 1026 9 912 000000101
252 92 25 828 9 736 010000011
253 132 25 1056 8 1056 10111100
254 101 25 909 9 808 001010111
255 147 25 1176 8 1176 10000101

Claims (1)

  1. 발명을 실시하기 위한 구체적인 내용에 상술
KR1020150024762A 2015-02-21 2015-02-21 분포데이터의 블럭화를 이용한 허프만 부호화의 효율화 방법 및 그 장치 KR20160102593A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020150024762A KR20160102593A (ko) 2015-02-21 2015-02-21 분포데이터의 블럭화를 이용한 허프만 부호화의 효율화 방법 및 그 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150024762A KR20160102593A (ko) 2015-02-21 2015-02-21 분포데이터의 블럭화를 이용한 허프만 부호화의 효율화 방법 및 그 장치

Publications (1)

Publication Number Publication Date
KR20160102593A true KR20160102593A (ko) 2016-08-31

Family

ID=56877180

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150024762A KR20160102593A (ko) 2015-02-21 2015-02-21 분포데이터의 블럭화를 이용한 허프만 부호화의 효율화 방법 및 그 장치

Country Status (1)

Country Link
KR (1) KR20160102593A (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113708772A (zh) * 2021-08-11 2021-11-26 山东云海国创云计算装备产业创新中心有限公司 一种哈夫曼编码方法、系统、装置及可读存储介质
CN117176179A (zh) * 2023-11-03 2023-12-05 苏州硒瑞恩生物科技有限公司 一种核酸合成仪数据编码处理方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113708772A (zh) * 2021-08-11 2021-11-26 山东云海国创云计算装备产业创新中心有限公司 一种哈夫曼编码方法、系统、装置及可读存储介质
CN117176179A (zh) * 2023-11-03 2023-12-05 苏州硒瑞恩生物科技有限公司 一种核酸合成仪数据编码处理方法
CN117176179B (zh) * 2023-11-03 2024-01-26 苏州硒瑞恩生物科技有限公司 一种核酸合成仪数据编码处理方法

Similar Documents

Publication Publication Date Title
KR101049699B1 (ko) 데이터의 압축방법
CN104283568B (zh) 一种基于部分霍夫曼树的数据压缩编码方法
JP5936687B2 (ja) ツリー構造の適応的エントロピー符号化方法
KR100894002B1 (ko) 선택적 압축과 복원 및 압축 데이터에 대한 데이터 포맷을위한 장치 및 방법
CN1183683C (zh) 使用前缀预测的位自适应编码方法
CN106560010B (zh) Vlsi高效霍夫曼编码设备和方法
CN107565970B (zh) 一种基于特征识别的混合无损压缩方法及装置
WO2013102818A1 (en) Generating a code alphabet of symbols to generate codewords for words used with a program
Külekci Enhanced variable-length codes: Improved compression with efficient random access
KR20160102593A (ko) 분포데이터의 블럭화를 이용한 허프만 부호화의 효율화 방법 및 그 장치
KR20160106229A (ko) 문맥기반 분포데이터의 블럭화를 이용한 허프만 부호화의 효율화 방법 및 그 장치
KR101612281B1 (ko) 이진 데이터의 압축 및 복원 방법과 장치
KR20160100496A (ko) 바이너리 클러스터를 이용한 허프만 부호화 효율화 방법 및 그 장치
Belodedov et al. Development of an algorithm for optimal encoding of WAV files using genetic algorithms
CN114023392A (zh) 一种dna存储的码字设计方法
CN105490683B (zh) 保存范式哈夫曼树的方法及装置
KR101590790B1 (ko) 이진 데이터의 압축 및 복원 방법과 장치
CN114429200A (zh) 规范化哈夫曼编解码方法及神经网络计算芯片
CN108259515A (zh) 一种适用于带宽受限下传输链路的无损信源压缩方法
KR20160097476A (ko) 분포데이터의 블럭화를 이용한 허프만 부호화의 효율화 방법 및 그 장치
KR101652735B1 (ko) 이진 데이터의 압축 및 복원 방법과 장치
US20110317759A1 (en) System, method, and computer program product for parameter estimation for lossless video compression
CN111384962A (zh) 数据压缩解压装置和数据压缩方法
KR20160047686A (ko) 분할된 클러스터 종류수 기준 데이터 분할을 이용한 인위적 엔트로피 확대를 이용한 데이터 압축 및 그 해제방법
KR20160100497A (ko) 모자이크 바이너리 클러스터를 이용한 허프만 부호화 효율화 방법 및 그 장치