KR20050053996A - 허프만 코드를 효율적으로 복호화하는 방법 및 장치 - Google Patents

허프만 코드를 효율적으로 복호화하는 방법 및 장치 Download PDF

Info

Publication number
KR20050053996A
KR20050053996A KR1020030087260A KR20030087260A KR20050053996A KR 20050053996 A KR20050053996 A KR 20050053996A KR 1020030087260 A KR1020030087260 A KR 1020030087260A KR 20030087260 A KR20030087260 A KR 20030087260A KR 20050053996 A KR20050053996 A KR 20050053996A
Authority
KR
South Korea
Prior art keywords
huffman
code
value
bit string
bits
Prior art date
Application number
KR1020030087260A
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 KR1020030087260A priority Critical patent/KR20050053996A/ko
Priority to US10/968,995 priority patent/US6919827B2/en
Publication of KR20050053996A publication Critical patent/KR20050053996A/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, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

본 발명은 오디오, 비디오 등의 데이터 처리 과정에서 널리 사용되는 허프만 코드를 이용하여 데이터를 복원하는 복호화 방법 및 장치에 있어서, 기존의 허프만 테이블에 비해 효율성을 제고할 수 있는 개량된 허프만 테이블을 구성하고 이를 검색하는 방법 및 그 방법을 수행하는 장치에 관한 것이다.
본 발명에 따른 허프만 코드 복호화 방법은, 허프만 코드 길이의 증가분 및 허프만 코드의 반복회수를 포함하는 개량 허프만 테이블을 작성하는 단계와, 허프만 부호화된 데이터가 저장된 메모리에서 허프만 코드 길이의 증가분 만큼의 비트를 추출하여 이전 비트열의 말미에 추가함으로써 새로운 비트열을 생성하는 단계와, 개량 허프만 테이블에서 반복회수 만큼 해당 코드의 값을 읽고 그 중에서 새로운 비트열의 값과 일치하는 값이 존재하는가를 판단하는 단계로 이루어진다.
본 발명에 따르면, 허프만 복호화 알고리즘을 사용하는 기기에 있어서 허프만 코드의 검색 루틴 및 비교 루틴의 사용회수를 감소시킴으로써 불필요한 시스템 자원 소모를 줄일 수 있다.

Description

허프만 코드를 효율적으로 복호화하는 방법 및 장치{Method and apparatus for decoding Huffman code effectively}
본 발명은 데이터를 압축하는 방법에 관한 것으로, 보다 상세하게는 오디오, 비디오 등의 데이터 처리 과정에서 널리 사용되는 허프만 코드를 이용하여 데이터를 복원하는 복호화 방법 및 장치에 있어서, 기존의 허프만 테이블에 비하여 효율성을 제고할 수 있는 개량된 허프만 테이블을 구성하고 이를 검색하는 방법 및 그 방법을 수행하는 장치에 관한 것이다.
최근에 컴퓨터(computer)의 급속한 진보에 수반하여 컴퓨터(computer) 내에서 대용량의 데이터를 취급하고 기억 장치를 효율적으로 이용하여 데이터 전송 시간을 단축하기 위하여, 데이터를 압축하는 방식이 일반화되어 있다.
데이터를 압축한 때에 사용된 부호화 방법으로서 다양한 방법들이 알려져 있다. 이 중, 문자 코드(cord), 벡터(vector) 정보, 화상 등, 대상 데이터를 한정하지 않고 다양한 데이터에 적용 가능한 부호화 방법을 유니버설(universal) 부호화라고 불리고 있다. 유니버설(universal) 부호화로서는, 문자열의 유사성을 이용한 사전형 부호화와, 문자의 출현 빈도를 이용한 확률 통계형 부호화로 분류된다.
이중에서 확률 통계형 부호화에서 대표적인 방법으로 허프만 부호화(Huffman encoding)가 있다. 허프만 부호화는 각 문자에 대한 부호로서 그 문자의 출현 빈도에 역 비례 한 부호 길이를 갖는 부호(Huffman code)를 사용된다. 먼저, 도 1을 참조하여 허프만 부호의 생성시에 사용되는 데이터 구조인 허프만 트리(Huffman tree)에 관하여 설명한다. 도 1에서 원형 및 사각형으로 나타난 부분은 노드(node)를 의미한다. 최상위에 존재하는 노드를 '루트 노드(root node)'라고 하고 노드간을 연결한 선분을 '가지(branch)'라고 한다. 또, 기존에 존재하는 노드X에 가지로 접속되고 있는 하위 노드Y를 노드X의 '차일드 노드(child node)'라고 하고, 역으로 노드X는 노드Y의 '페어런트 노드(parent node)'라고 부른다. 차일드 노드를 갖지 않는 노드를 '단말 노드(terminal node)'이라고 하는데, 각 단말 노드에는 문자가 대응된다. 또, 단말 노드를 제외한 노드는 '내부 노드(internal node)'라고 하고, 루트 코드로부터 각 노드까지의 가지의 수를 레벨(level)이라고 한다.
허프만 트리에서, 루트 노드로부터 부호화해야 할 문자와 대응되는 단말 노드에 이르는 경로가 부호로서 출력된다. 즉, 루트 노드로부터 목적으로 한 단말 노드에 이르기까지 왼쪽으로 분기되는 때에는 "1"이 출력되고, 오른쪽으로 분기되는 때에는"0"이 출력된다. 예를 들면, 도 1에 나타난 허프만 트리에서는, 노드 번호7의 단말 노드에 대응되고 있는 문자A에 대해서는 부호"00"이 출력되고, 노드 번호8의 단말 노드에 대응되고 있는 문자B에 대해서는 부호"011"이 출력된다.
상기와 같은 부호화 과정과는 반대로 허프만 복호화에서는, 루트 노드로부터 복호 대상인 데이터의 각 비트(bit)의 값에 따라 각 노드를 찾아서 도달한 단말 노드에 대응되고 있는 문자가 출력된다.
허프만 부호화는 이와 같은 허프만 트리가 다음과 같은 순서(이를 허프만 알고리즘이라 한다)로 생성된다. 첫째, 각 단말 노드에 대응하는 문자의 출현 빈도를 기록해 둔다. 둘째, 출현 빈도의 가장 작은 2개의 노드에 대하여, 새로운 노드를 1개를 작성하고, 작성한 노드와 상기 2개의 노드를 각각 가지로 연결한다. 또, 가지로 연결한 2개의 노드의 출현 빈도의 합을 상기 새로 작성한 노드에 기록한다. 셋째, 모든 수준의 모든 노드들이 하나의 트리로 결합될 때까지 둘째 과정을 반복한다.
이와 같은 순서로 생성된 허프만 트리는 각 문자에 대하여 그 문자의 출현 빈도에 역 비례 한 부호 길이를 갖는 부호가 할당된 것이 된다. 이 때문에, 이 허프만 트리를 이용하여 부호화하고 이를 테이블(이를 허프만 테이블이라 한다)로 구성해 두었다가 허프만 복호화 과정에서 같은 테이블을 이용하여 복호화한다면 효율적으로 데이터를 압축할 수 있게 되는 것이다.
이러한 허프만 테이블은 허프만 부호화기 및 허프만 복호화기에서 미리 알고 있을 수도 있고, 데이터의 전송이 있을 때 헤더 정보를 이용하여 허프만 부호화기에서 허프만 복호화기로 전송할 수도 있다. 전자의 방법은 각 문자의 빈도수를 통계적으로 구한 후 허프만 테이블을 몇 가지로 특정해 놓고 그 테이블들을 허프만 부호화기 및 허프만 복호화기에서 미리 알고 있는 방식이다. 그 후 실제 데이터를 전송할 때 허프만 부호화기에서 상기 특정된 테이블 중 하나의 테이블을 지정하면 허프만 복호화기에서 같은 테이블을 이용하여 복호화하게 되는 것이다. 후자의 방법은 허프만 부호화기에서 전송하고자하는 데이터를 부호화할 당시에 각 문자의 빈도수를 구하고 허프만 테이블을 작성한 후, 작성된 허프만 테이블을 데이터와 함께 허프만 복호화기에 전송한다. 그러면, 허프만 복호화기에서는 상기 전송된 허프만 테이블을 이용하여 데이터를 복호화할 수 있다.
도 2는 종래의 허프만 테이블의 예를 나타낸 것이다. 종래의 허프만 테이블은 각 허프만 코드별로, 허프만 코드의 길이를 나타내는 'CodeLength'와, 허프만 코드의 십진값을 나타내는 'CodeWord'와, 각 허프만 코드를 식별하기 위한 양자화 값인'QuantValue'로 구성된다. 상기 도 1의 설명에서와 같이 문자가 발생하는 빈도에 따라서 허프만 코드를 작성하여 다음 도 3의 표와 같은 결과를 얻을 수 있었다고 하자. 여기서, QuantValue 각각은 실제로 데이터가 의미하는 값을 지시하는데, 그 데이터의 종류(텍스트 데이터인지, 이미지 데이터인지 등)에 따라서 {e, t, a, c, r, s, ...}와 같이 직접 문자를 나타낼 수도 있고, {빨강, 파랑, 노랑, ...}과 같이 색상을 나타낼 수도 있다. 상기 도 3의 표를 허프만 테이블로 구성하면 도 2와 같은 결과를 얻게 된다. 하나의 허프만 코드는 CodeLength 및 CodeWord로 나누어 나타낼 수 있다. 예를 들어, '011101'은 CodeLength는 '6'이고 CodeWord는 십진수 '29'로 나타낼 수 있다.
상기와 같은 허프만 테이블을 이용한 종래의 허프만 복호화 방법을 도 4를 참조하여 살펴본다. 먼저, 허프만 부호화된 데이터를 수신하여 메모리에 저장한다(S400). 그리고, 허프만 복호화기의 메모리에서 한 비트를 추출한다(S410). 상기 추출한 한 비트를 현재 비트열의 말미에 추가한다(S420). 다음으로, 메모리에 저장된 허프만 테이블에서 현재 코드의 CodeLength를 읽어 들인다(S430). 상기 허프만 테이블은 상기 수신된 데이터에 포함되어 수신된 후 메모리에 저장된 것일 수도 있고, 상기 수신된 데이터와는 별도로 허프만 복호화기의 메모리에 미리 저장된 것일 수도 있다. 다음으로, 현재 비트열의 비트수와 상기 읽어 들인 CodeLength가 같은가를 비교하여(S440), 다른 경우에는 다시 메모리에서 한 비트를 추출한다(S410). 그리고 같은 경우에는 허프만 테이블에서 상기 CodeLength에 해당하는 CordWord, 즉 현재 코드의 CodeWord를 읽는다(S450). 다음으로, 현재 비트열과 상기 CodeWord 값이 같은가를 판단하여(S460) 다르면, 메모리에 저장된 허프만 테이블에서 현재 코드에 대한 다음 코드의 CodeLength를 읽은 후(S470), 다시 S440 단계로 돌아가서 현재 비트열의 비트수와 CodeLength가 같은가를 판단한다.
상기 S460 단계에서의 판단 결과, 같으면 상기 현재 코드의 QuantValue를 리턴한다(S480). 그 후 메모리에 저장된 데이터의 모든 비트를 추출하였는가를 판단하여(S490) 모두 추출하였으면 종료하고, 아직 남은 데이터가 존재하면 이전 비트열을 'NULL'로 초기화하고 S410이하의 단계를 수행한다.
상기 도 4의 과정을 보다 자세히 이해하기 위하여 데이터에 실제 값을 적용한 예를 설명한다. 허프만 부호화기로부터 수신되어 허프만 복호화기의 메모리에 저장된 데이터가 '000110111'이라고 가정한다. 먼저, 데이터에서 하나의 비트(0)를 추출한다(S410). 이는 첫번째 추출한 비트이므로 이전 비트열이 존재하지 않아서 S420 단계를 수행하여도 그 값이 변하지 않는다. 메모리에 저장된 허프만 테이블에서 첫번째 코드의 CodeLength '1'을 읽는다(S430). 그 다음 현재 비트열의 비트수 '1'와 CodeLength '1'이 일치하므로(S440의 예) 현재 비트열 값 '0'과 허프만 코드 테이블에서 현재 코드의 CodeWord '1'을 비교한다(S460). 그러나 그 값이 일치하지 않으므로 다음 코드의 CodeLength '2'를 읽고(S470), 현재 비트열의 비트수 '1'과 CodeLength '2'를 비교하지만(S440) 그 값이 다르므로 다시 메모리에서 한 비트 '0'을 추출하고(S410), 그것을 이전의 비트열 '0'의 말미에 추가한다(S420). 그러면 현재 비트는 '00'이 된다. 메모리에 저장된 허프만 테이블에서 현재 코드의 CodeLength '2'를 읽는다(S430). 그 다음 현재 비트열의 비트수 '2'와 CodeLength '2'가 일치하므로(S440의 예) 현재 비트열 값(십진값으로 '0')과 허프만 코드 테이블에서 현재 코드의 CodeWord '0'을 비교한다(S460). 비교 결과 그 값이 일치하므로 현재 코드의 QuantValue '2'를 리턴한다(S480).
이제 메모리에 남은 비트는 '0110111'이다. 아직 메모리에 모든 비트를 추출한 것은 아니므로 이전 비트열을 초기화하고(S490) 다시 메모리에서 한 비트를 추출한다(S410). 이후 '0', '01', '011', '0110', '01101', '011011'과 같이 비트열에 비트를 하나씩 추가하면서 허프만 테이블의 다음 코드와 비교하지만 비트열 값과 CodeWord가 일치하지 않으므로(S460의 아니오) S410 내지 S460까지의 과정이 반복하여 수행된다. 비트열이'0110111'이 되었을 때에도 CodeLength가 7인 코드 중 CodeWord가 57, 56인 경우는 비트열 값과 CodeWord가 일치하지 않아서(S460의 아니오), S470, S440, S450 단계를 차례로 거치게 된다. 상기 단계들을 거친 후에야 비로소 '0110111'의 비트열 값인 '55'와 CodeWord인 '55'가 일치하게 되어(S460의 예), 현재 코드의 QuantValue인 '9'를 리턴한다(S480). 메모리에 저장된 모든 비트가 추출되었으므로(S490의 예) 모든 과정은 종료된다.
이와 같이 종래의 허프만 부호화된 데이터를 복호화하는 방식을 의사 코드(pseudo code)로 구성한 예는 다음의 프로그램 1에서 보는 바와 같다.
------------------- [프로그램 1의 시작] -----------------------------
do {
/* STEP1 : 입력 data로부터 Word값과 WordLength를 구함 */
......
a = extract(1bit); //메모리로부터 한 비트씩 추출하여
Word = Word << 1; //이전 값에 붙임
Word += a;
WordLength++; //메모리에서 읽은 총 비트의 수
......
/* STEP2 : 허프만 테이블로 부터 CodeWord와 CodeLength를 읽어와 위에서 구한 값과 비교 */
while ( CodeLength(허프만 테이블로부터 얻음) == WordLength(입력 버퍼에서 읽은 비트열의 비트의 수) )
{
if ( Word == CodeWord[nIndex] ) //테이블에서 일치하는 CodeWord를 찾음
{
QuanizationValue = pHuffmanQ->QuantValue[nIndex];
return 1;
//CodeLength와 CodeWord 값 모두 일치할 경우 해당하는 QuantValue를 return
}
else
Index++;
//두 값 중 하나라도 틀릴 경우 Index를 증가시키고
CodeLength=pHuffmanQ->WordLength[nIndex];
//테이블에서 다음 값을 읽어와 찾을 때까지 반복
}
} while ( HuffmanQ_Lookup(nQValue) == NULL );
------------------- [프로그램 1의 끝] ------------------------------
종래의 허프만 알고리즘(Huffman algorithm)은 기본적으로 인코딩과정에서 신호를 양자화하고 테이블화 하여 데이터의 양을 줄이고, 이를 디코더에서 다시 복원할 때 동일한 테이블을 참조하여 실제 값(value)을 찾는 방식으로 되어 있다. 따라서, 테이블을 참조하거나 값을 찾는 회수가 많아 질수록 시스템 자원을 많이 소모하게 된다. 다시 말하면, 허프만 복호화 과정에서 다음 코드의 길이(Length)가 얼마인지 모르기 때문에 추출한 비트로 구성된 비트열의 값 및 비트수가 허프만 테이블의 CodeWord 및 CodeLength와 서로 같을 때까지 불필요한 비교(S440)를 자주하게 되고, 상당한 시스템 자원(system resource)를 소모하는 ExtractBit 함수(메모리로부터 비트를 추출하는 함수)를 자주 호출하게 되므로 비효율적이라는 것이다. 특허, 허프만 테이블에서 같은 CodeLength가 많이 반복되는 경우에는 그 비효율성이 더더욱 커진다.
본 발명은 상기한 문제점을 고려하여 창안된 것으로, 종래의 허프만 테이블을 효율적으로 재구성하는 것을 목적으로 한다.
또한, 본 발명은 허프만 복호화 수행시 검색 루틴과 비교 루틴을 감소시켜 평균적으로 소모되는 시스템 자원의 소모를 줄이고 보다 빠르게 복호화를 수행할 수 있는 방법을 제공하는 것을 목적으로 한다.
상기한 목적을 달성하기 위하여 본 발명에 따른 허프만 코드의 복호화 방법은 허프만 코드 길이의 증가분 및 상기 허프만 코드의 반복회수를 포함하는 개량 허프만 테이블을 작성하는 제1단계; 허프만 부호화된 데이터가 저장된 메모리에서 상기 허프만 코드 길이의 증가분 만큼의 비트를 추출하여 이전 비트열의 말미에 추가함으로써 새로운 비트열을 생성하는 제2단계; 상기 개량 허프만 테이블에서 상기 반복회수 만큼 해당 코드의 값을 읽고 그 중에서 상기 새로운 비트열의 값과 일치하는 값이 존재하는가를 판단하는 제3단계; 및 상기 판단 결과 상기 비트열과 값이 일치하는 코드의 값이 존재하면 그 코드를 식별하기 위한 양자화 값을 출력하는 제4단계를 포함하는 것을 특징으로 한다.
상기 제3단계에서의 판단 결과, 상기 비트열과 값이 일치하는 코드의 값이 존재하지 않으면 상기 제2단계 내지 제4단계를 다시 수행하는 제5단계를 더 포함하는 것이 바람직하다.
상기 개량 허프만 테이블은, 작은 비트수를 갖는 허프만 코드부터 순차적으로 나열하고, 각 비트수 별로 이전 비트수에 대한 증가분 및 각 비트수 별로 중복되는 회수를 세트로 하여 구성되는 부가정보 테이블; 및 각 허프만 코드별로 코드 값과 양자화 값을 배열한 테이블을 포함하는 것이 바람직하다.
상기한 또다른 목적을 달성하기 위하여, 본 발명에 따른 허프만 코드의 복호화 장치는, 허프만 코드 길이의 증가분 및 상기 허프만 코드의 반복회수를 포함하는 개량 허프만 테이블을 작성하는 테이블생성부; 허프만 부호화된 데이터가 저장된 메모리에서 상기 허프만 코드 길이의 증가분 만큼의 비트를 추출하여 이전 비트열의 말미에 추가함으로써 새로운 비트열을 생성하는 비트추출부; 및 상기 개량 허프만 테이블에서 상기 반복회수 만큼 해당 코드의 값을 읽고 그 중에서 상기 새로운 비트열의 값과 일치하는 값이 존재하는가를 판단하여 일치하는 코드의 값이 존재하면 그 코드를 식별하기 위한 양자화 값을 출력하는 비교판단부를 포함하는 것을 특징으로 한다.
상기 허프만 코드의 복호화 장치는, 출력된 양자화 값을 입력받아 그에 해당하는 복호화된 데이터 값을 출력하는 데이터출력부를 더 포함하는 것이 바람직하다.
상기 개량 허프만 테이블은 허프만 코드 부호화 장치에서 생성되어 상기 허프만 코드의 복호화 장치로 전달되고 상기 테이블생성부에서 상기 전달된 테이블 그대로 작성하는 것이 바람직하다. 또한, 상기 개량 허프만 테이블은 허프만 코드 부호화 장치로부터 상기 허프만 코드의 복호화 장치로 전달된 기존의 허프만 테이블을 이용하여 상기 테이블생성부에서 재구성하여 작성하는 것도 바람직하다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예를 상세히 설명한다. 본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 것이며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
도 5는 종래의 허프만 테이블을 개량하기 위하여 '부가정보(side information)'를 생성하는 과정을 설명한 것이다. 본 과정에서는 각 코드별로 기록된 CodeLength를 허프만 코드 길이의 증가분(이하 'CodeLength_Inc'라 한다) 및 상기 코드의 반복회수(이하 'RepeatNum'이라 한다)의 세트로 변경한다. 예를 들어, CodeLength가 5인 경우는 그 이전에 CodeLength가 3인 경우에 비하여 비트 증가분이 2이고 CodeLength인 5가 두 번 반복되므로 이에 대한 부가정보 세트는 (2, 2)가 된다. 또한, CodeLength가 7인 경우는 그 이전에 CodeLength가 6인 경우에 비하여 비트 증가분이 1이고 CodeLength인 7이 여섯 번 반복되므로 이에 대한 부가정보 세트는 (1, 6)이 되는 것이다.
도 6은 종래의 허프만 테이블 및 부가정보를 이용하여 작성된 개량 허프만 테이블을 나타낸 것이다. 본 발명에 따른 개량된 허프만 테이블(이하 '개량 허프만 테이블'이라 한다)은 종래의 허프만 테이블의 CodeLength에 관한 정보 대신에 상기 생성한 부가정보 테이블을 포함한다. 그리고 종래의 허프만 테이블 중 CodeLength를 제외한 CodeWord 및, QuantValue를 포함한다. CodeWord 및 QuantValue는 종래의 허프만 테이블에서와 마찬가지의 값을 갖는다.
도 7은 본 발명에 따른 허프만 복호화기의 구성을 나타낸 블록도이다. 본 발명에 따른 허프만 복호화기(700)는 데이터입력부(710), 메모리(720), 비트추출부(730), 비교판단부(740), 테이블생성부(750), 테이블판독부(760), 그리고 데이터출력부(770)로 구성될 수 있다.
데이터입력부(710)는 허프만 부호화기에 의하여 허프만 코드로 부호화된 데이터(10)를 수신한다.
메모리(720)는 상기 수신된 데이터(10) 및 종래의 허프만 테이블을 저장한다. 이러한 허프만 테이블은 허프만 부호화기 및 허프만 복호화기에서 서로 미리 알고 있을 수도 있고, 데이터의 전송이 있을 때 헤더 정보를 이용하여 허프만 부호화기에서 허프만 복호화기로 전송하여 메모리(720)에 저장할 수도 있다. 그리고, 메모리(720)는 상기 종래의 허프만 테이블뿐만 아니라 상기 허프만 테이블을 재구성하여 생성되는 개량 허프만 테이블도 저장한다. 본 발명은 이와 같이, 허프만 복호화기에서 종래의 허프만 테이블을 이용하여 본 발명에서 제시하는 개량 허프만 테이블을 생성함으로써 동작할 수도 있지만, 이에 한정되지 않고, 허프만 부호화기에서 먼저 개량 허프만 테이블을 생성하여 부호화된 데이터와 함께 허프만 복호화기에 전송하고, 이 테이블을 허프만 복호화기에서 그대로 이용함으로써 동작할 수도 있음에 주목하여야 한다. 상기 종래의 허프만 테이블 및 개량 허프만 테이블의 구성은 도 2 및 도 6에서 각각 설명한 바와 같다.
비트추출부(730)는 개량 허프만 테이블의 부가정보 중 CodeLength_Inc 값만큼의 비트를 메모리(720)에 저장된 데이터로부터 추출하고, 이미 추출된 비트열이 있으면 상기 추출된 비트를 그 말미에 추가하여 새로운 비트열을 생성한다.
테이블생성부(750)는 상기 종래의 허프만 테이블의 CodeLength 정보로부터 '부가정보'를 생성하고 종래의 허프만 테이블을 재구성함으로써 본 발명에서 제시하는 개량 허프만 테이블을 생성한다.
테이블판독부(760)는 개량 허프만 테이블에서 소정의 반복횟수(RepeatNum)만큼 CodeWord 및 QuantValue를 읽어들인다.
비교판단부는(740)는 상기 비트추출부(730)에 의하여 현재 생성된 비트열과, 테이블판독부(760)에서 RepeatNum 수만큼 읽어 들인 CodeWord를 비교하여 같은 값이 존재하는지를 판단하고, 일치하는 값이 존재하면 그 코드의 QuantValue를 리턴한다.
마지막으로, 데이터출력부(770)는 상기 리턴된 QuantValue를 입력받아 그에 해당하는 복호화된 데이터(20) 값을 출력한다.
도 8은 본 발명의 동작 과정을 나타낸 흐름도이다.
먼저, 데이터입력부(710)는 허프만 부호화된 데이터(10)를 수신하고, 수신된 데이터(10)를 메모리(720)에 저장한다(S800). 다음으로, 테이블생성부(750)는 종래의 허프만 테이블로부터 부가정보를 구성하고 이로부터 개량 허프만 테이블을 작성한다(S810). 만약 허프만 부호화기에서 개량 허프만 테이블을 구성하여 데이터와 함께 허프만 복호화기에 전달하거나 미리 허프만 부호화기 및 허프만 복호화기 간에 특정한 개량 허프만 테이블을 사용하기로 약속되어 있으면 이미 개량 허프만 테이블이 생성되어 있으므로 상기 S810 단계는 생략된다. 다음으로, 테이블판독부(760)는 메모리(720)에 저장된 개량 허프만 테이블의 부가정보 중 첫번째 세트로부터 CodeLength_Inc 및 RepeatNum을 읽는다(S820).
비트추출부(730)는 메모리(720)에 저장된 데이터로부터 상기 CodeLength_Inc 만큼의 비트를 추출하여 이전 비트열에 추가함으로써 새로운 비트열을 생성한다(S840). 도 9를 참조하여 상기 S840 단계를 보다 상세히 살펴보면, 이전에 추출되어 생성되어 있는 비트열의 CodeLength가 7비트라고 하고, 여기에 새로이 N비트를 추출하여 그 말미에 삽입하기 위하여 우선 메모리상에서 이전 비트열을 N비트만큼 좌측으로 이동(shift)하여 N비트가 삽입될 공간을 확보하여야 한다. 그 후 추출된 N비트를 이전 비트열의 말미에 삽입하면 CodeLength가 7+N비트인 새로운 비트열이 생성되는 것이다.
다음으로, 테이블판독부(760)는 메모리(720)에 저장된 개량 허프만 테이블에서 RepeatNum 수만큼의 다음 CodeWord를 읽는다(S850). 그러면, 비교판단부(740)는 상기 읽은 CodeWord 중에서 현재 비트열 값과 일치하는 CodeWord가 존재하는가를 판단하여(S860) 존재하는 경우(S860의 예)에는 상기 일치한 코드의 QuantValue를 리턴한다(S880). 그리고, 비교판단부(740)는 메모리에 저장된 데이터의 모든 비트를 추출하였으면(S890의 예) 종료하고, 그렇지 않으면(S890의 아니오) 메모리(720)에 저장된 데이터로부터 추출된 이전 비트열을 'NULL' 값으로 초기화하고(S899) 다시 S820 이하 단계를 반복하여 수행한다.
상기 S860 단계에서의 판단 결과 일치하는 CodeWord가 존재하지 않는 경우(S860의 아니오)에는 테이블판독부(760)는 개량 허프만 테이블의 부가정보 중 다음 세트로부터 CodeLength_Inc 및 RepeatNum을 읽고(S870), 다시 S830 이하 단계를 반복하여 수행한다.
상기 도 8의 과정을 보다 자세히 이해하기 위하여 데이터에 실제 값을 적용한 예를 설명한다. 허프만 부호화기로부터 수신되어 허프만 복호화기의 메모리에 저장된 데이터가 '000110111'이라고 하고, 개량 허프만 테이블은 도 6에 나타난 바와 같다고 가정한다. 먼저, 개량 허프만 테이블의 부가정보 중 첫번째 세트(1,1)을 읽고 CodeLength_Inc=1, RepeatNum=1 임을 확인한 다음 메모리에서 1비트 '0'을 추출하고 그 값을 RepeatNum 만큼의 CodeWord, 즉 하나의 CodeWord '1'과 비교한다. 양 값이 다르므로 다시 두번째 세트 (1,1)을 읽고 CodeLength_Inc=1, RepeatNum=1 임을 확인한 다음 데이터로부터 1비트 '0'을 추출하여 새로운 비트열('00')을 생성하고 이 비트열과 하나의 다음 CodeWord '0'을 비교한다. 양 값이 같으므로 상기 CodeWord에 해당하는 QuantValue '2'를 리턴한다.
이제 메모리에 남은 데이터는 '0110111'이다. 아직 메모리에 모든 비트를 추출한 것은 아니므로 이전 비트열을 초기화하고 개량 허프만 테이블의 부가정보 중 첫번째 세트(1,1)부터 세번째 세트(1,1)까지 반복하여 수행하면 이미 추출된 비트열은 '011'이 된다. 다음으로 네번째 세트(2,2)를 읽고 CodeLength_Inc=2, RepeatNum=2 임을 확인한 다음 메모리에서 2비트('01')를 추출하여 새로운 비트열('01101')을 생성하고 이와 다음 2개의 CodeWord, 즉 15, 12를 비교한다. 상기 새로운 비트열을 십진수로 하면 13이 되는데, 상기 2개의 CodeWord와 일치하는 값이 없으므로 다시 다섯번째 세트(1,1)를 읽고 비트열 '011011'과 29를 비교한다. '011011'의 십진수 값은 27인데 이는 29와 일치하지 않으므로 다시 여섯번째 세트(1,6)을 읽게 된다. 그러면 새로운 비트열은 '0110111'(십진수로 55)이 되는데, RepeatNum '6'에 따라 다음 6개의 코드를 읽으면 각각 57, 56, 55, 54, 53, 52이므로 서로 일치하는 숫자 55에 해당하는 QuantValue인 '9'를 리턴한다. 이제는 메모리에 남은 데이터가 없으므로 모든 과정은 종료된다.
이와 같이 본발명에 따른 허프만 부호화된 데이터를 복호화하는 방식을 의사 코드(pseudo code)로 구성한 예는 다음의 프로그램 2에서 보는 바와 같다.
----------------------- [프로그램 2의 시작] --------------------------
do {
/* STEP1 : 같은 WordLength의 반복회수로 루프 회수를 미리 정함 */
......
nbit = pHuffmanQ->CodeInfo[mIndex++]
repeatNum = pHuffmanQ->CodeInfo[mIndex++]
a = extract(nbit);
//메모리로부터 필요한 만큼 한번에 n 비트씩 추출하여
Word = Word << n; //이전 값에 붙임
Word += a;
WordLength += n; //입력 버퍼에서 읽은 총 비트의 수
......
/* STEP2: 허프만 테이블로부터 미리 정한 회수내에서 같은 CodeWord 값이 있는지 찾는 방식으로 바뀜 */
for( i = 0; i < repeatNum; i = i + 1 )
//메모리에서 매번 읽어와서 비교하는 부분이 제거됨
{
if ( Word == pHuffmanQ->CodeWord[nIndex] )
//테이블에서 일치하는 codeword 값을 찾음
{
QuanizationValue = pHuffmanQ->QuantValue[nIndex++];
return 1; //같은 CodeLength가 몇 회 반복될지 미리 알고 있으므로, CodeWord만 비교하여 같으면 해당하는 QuantValue를 리턴하면 된다
}
}
} while ( HuffmanQ_Lookup(nQValue) == NULL );
---------------------- [프로그램 2의 끝] --------------------------
이상 첨부된 도면을 참조하여 본 발명의 실시예를 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
엠베디드 시스템(Embeded System)을 탑재한 기기들은 시스템 자원을 사용하는 양이 증가하면 이에 따라 소비전력도 증가하게 되고, 기기를 동작하기 위하여는 보다 고성능의 칩셋(chipset)을 요구하게 되어 기기의 제조 또는 사용에 있어 추가 비용을 발생시킨다. 따라서, 이러한 기기들에 있어서는 특히 시스템 자원을 보다 적게 사용할 수 있도록 소프트웨어 알고리즘을 개선하는 것은 필수적이라 할 수 있다.
본 발명에 따르면, 허프만 복호화 알고리즘을 사용하는 기기에 있어서 허프만 테이블을 효율적으로 재구성하고 검색 루틴 및 비교 루틴의 사용회수를 감소시킴으로써 불필요한 시스템 자원 소모를 줄일 수 있다. 특히 허프만 테이블에서 같은 길이를 갖는 허프만 코드가 다수 존재하는 경우에는 허프만 테이블을 저장하는 메모리 자체도 상당히 절약할 수 있다.
적용 환경에 따라 다소 차이가 있을 수 있지만 실제, 어셈블러(assembler)로 구현한 프로그램으로 테스트한 결과 Huffman de-Quantization block에서 약 30~40%정도의 성능(performance) 개선 효과가 있었다.
도 1은 허프만 트리의 예를 나타낸 도면.
도 2는 종래의 허프만 테이블의 예를 나타낸 도면.
도 3은 도 2의 예에 적용되는 종래의 허프만 코드의 예를 나열한 표.
도 4는 종래에 허프만 테이블을 이용하여 복호화하는 방법을 나타낸 흐름도.
도 5는 종래의 허프만 테이블을 개량하기 위한 '부가정보' 생성 과정을 나타낸 도면.
도 6은 본 발명에 따른 개량 허프만 테이블의 예를 나타낸 도면.
도 7은 본 발명에 따른 허프만 복호화기의 구성을 나타낸 블록도.
도 8은 본 발명의 동작 과정을 나타낸 흐름도.
도 9는 S840 단계를 보다 상세하게 설명하기 위한 도면.
(도면의 주요부분에 대한 부호 설명)
700 : 허프만 복호화기 710 : 데이터입력부
720 : 메모리 730 : 비트추출부
740 : 비교판단부 750 : 테이블생성부
760 : 테이블판독부 770 : 데이터출력부

Claims (9)

  1. 허프만 코드 길이의 증가분 및 상기 허프만 코드의 반복회수를 포함하는 개량 허프만 테이블을 작성하는 제1단계;
    허프만 부호화된 데이터가 저장된 메모리에서 상기 허프만 코드 길이의 증가분 만큼의 비트를 추출하여 이전 비트열의 말미에 추가함으로써 새로운 비트열을 생성하는 제2단계;
    상기 개량 허프만 테이블에서 상기 반복회수 만큼 해당 코드의 값을 읽고 그 중에서 상기 새로운 비트열의 값과 일치하는 값이 존재하는가를 판단하는 제3단계; 및
    상기 판단 결과 상기 비트열과 값이 일치하는 코드의 값이 존재하면 그 코드를 식별하기 위한 양자화 값을 출력하는 제4단계를 포함하는 것을 특징으로 하는 허프만 코드의 복호화 방법.
  2. 제1항에 있어서, 상기 제3단계에서의 판단 결과
    상기 비트열과 값이 일치하는 코드의 값이 존재하지 않으면 상기 제2단계 내지 제4단계를 다시 수행하는 제5단계를 더 포함하는 것을 특징으로 하는 허프만 코드의 복호화 방법.
  3. 제1항에 있어서, 상기 개량 허프만 테이블은
    작은 비트수를 갖는 허프만 코드부터 순차적으로 나열하고, 각 비트수 별로 이전 비트수에 대한 증가분 및 각 비트수 별로 중복되는 회수를 세트로 하여 구성되는 부가정보 테이블; 및
    각 허프만 코드별로 코드 값과 양자화 값을 배열한 테이블을 포함하는 것을 특징으로 하는 허프만 코드의 복호화 방법.
  4. 허프만 코드 길이의 증가분 및 상기 허프만 코드의 반복회수를 포함하는 개량 허프만 테이블을 작성하는 테이블생성부;
    허프만 부호화된 데이터가 저장된 메모리에서 상기 허프만 코드 길이의 증가분 만큼의 비트를 추출하여 이전 비트열의 말미에 추가함으로써 새로운 비트열을 생성하는 비트추출부; 및
    상기 개량 허프만 테이블에서 상기 반복회수 만큼 해당 코드의 값을 읽고 그 중에서 상기 새로운 비트열의 값과 일치하는 값이 존재하는가를 판단하여 일치하는 코드의 값이 존재하면 그 코드를 식별하기 위한 양자화 값을 출력하는 비교판단부를 포함하는 것을 특징으로 하는 허프만 코드의 복호화 장치.
  5. 제4항에 있어서,
    상기 출력된 양자화 값을 입력받아 그에 해당하는 복호화된 데이터 값을 출력하는 데이터출력부를 더 포함하는 것을 특징으로 하는 허프만 코드의 복호화 장치.
  6. 제4항에 있어서, 상기 개량 허프만 테이블은
    작은 비트수를 갖는 허프만 코드부터 순차적으로 나열하고, 각 비트수 별로 이전 비트수에 대한 증가분 및 각 비트수 별로 중복되는 회수를 세트로 하여 구성되는 부가정보 테이블; 및
    각 허프만 코드별로 코드 값과 양자화 값을 배열한 테이블을 포함하는 것을 특징으로 하는 허프만 코드의 복호화 장치.
  7. 제4항에 있어서, 상기 개량 허프만 테이블은 허프만 코드 부호화 장치에서 생성되어 상기 허프만 코드의 복호화 장치로 전달되고 상기 테이블생성부에서 상기 전달된 테이블 그대로 작성하는 것을 특징으로 하는 허프만 코드의 복호화 장치.
  8. 제4항에 있어서, 상기 개량 허프만 테이블은 허프만 코드 부호화 장치로부터 상기 허프만 코드의 복호화 장치로 전달된 기존의 허프만 테이블을 이용하여 상기 테이블생성부에서 재구성하여 작성하는 것을 특징으로 하는 허프만 코드의 복호화 장치.
  9. 제1항 내지 제3항의 방법을 컴퓨터로 판독가능한 프로그램으로 기록한 기록매체.
KR1020030087260A 2003-12-03 2003-12-03 허프만 코드를 효율적으로 복호화하는 방법 및 장치 KR20050053996A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020030087260A KR20050053996A (ko) 2003-12-03 2003-12-03 허프만 코드를 효율적으로 복호화하는 방법 및 장치
US10/968,995 US6919827B2 (en) 2003-12-03 2004-10-21 Method and apparatus for effectively decoding Huffman code

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020030087260A KR20050053996A (ko) 2003-12-03 2003-12-03 허프만 코드를 효율적으로 복호화하는 방법 및 장치

Publications (1)

Publication Number Publication Date
KR20050053996A true KR20050053996A (ko) 2005-06-10

Family

ID=34632063

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020030087260A KR20050053996A (ko) 2003-12-03 2003-12-03 허프만 코드를 효율적으로 복호화하는 방법 및 장치

Country Status (2)

Country Link
US (1) US6919827B2 (ko)
KR (1) KR20050053996A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180060725A (ko) * 2016-11-29 2018-06-07 에릭슨엘지엔터프라이즈 주식회사 전화번호 검색 방법 및 장치

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI524681B (zh) * 2011-04-26 2016-03-01 晨星半導體股份有限公司 霍夫曼解碼器及其解碼方法
US8484170B2 (en) 2011-09-19 2013-07-09 International Business Machines Corporation Scalable deduplication system with small blocks
US8593308B1 (en) * 2012-05-31 2013-11-26 International Business Machines Corporation Method of accelerating dynamic Huffman decompaction within the inflate algorithm
JP6641857B2 (ja) * 2015-10-05 2020-02-05 富士通株式会社 符号化プログラム、符号化方法、符号化装置、復号化プログラム、復号化方法および復号化装置
JP6686639B2 (ja) * 2016-03-31 2020-04-22 富士通株式会社 符号化プログラム、符号化装置、符号化方法、復号化プログラム、復号化装置および復号化方法
CN111384966B (zh) * 2018-12-28 2022-05-10 上海寒武纪信息科技有限公司 数据解码方法
CN110473264B (zh) * 2019-07-26 2023-04-07 北京华捷艾米科技有限公司 基于霍夫曼编码的深度图压缩方法、解压缩方法及编码器
CN112332854A (zh) * 2020-11-27 2021-02-05 平安普惠企业管理有限公司 霍夫曼编码的硬件实现方法、装置及存储介质
CN113746487B (zh) * 2021-08-25 2023-11-03 山东云海国创云计算装备产业创新中心有限公司 一种数据压缩方法、装置及电子设备和存储介质

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5615020A (en) * 1993-05-13 1997-03-25 Keith; Michael System and method for fast huffman decoding
JP2746109B2 (ja) * 1994-03-09 1998-04-28 日本電気株式会社 ハフマン符号復号化回路
US5686915A (en) * 1995-12-27 1997-11-11 Xerox Corporation Interleaved Huffman encoding and decoding method
JP3305190B2 (ja) 1996-03-11 2002-07-22 富士通株式会社 データ圧縮装置及びデータ復元装置
SE512613C2 (sv) 1996-12-30 2000-04-10 Ericsson Telefon Ab L M Metod och organ för informationshantering
EP1069691A1 (en) * 1999-06-15 2001-01-17 STMicroelectronics S.r.l. Decoding method for a Huffman code
KR20010058369A (ko) 1999-12-27 2001-07-05 구자홍 코드길이에 따른 허프만 코드 복호장치 및 방법
US6636167B1 (en) 2000-10-31 2003-10-21 Intel Corporation Method of generating Huffman code length information
JP4501288B2 (ja) * 2001-02-23 2010-07-14 ヤマハ株式会社 ハフマン符号の復号方法、復号装置、ハフマン符号復号用テーブルおよびその作成方法
US6580377B1 (en) * 2001-05-30 2003-06-17 Sony Corporation Huffman decoding using cascaded sub-table lookup method
US6563440B1 (en) * 2001-10-19 2003-05-13 Nokia Corporation Apparatus and method for decoding Huffman codes using leading one/zero string length detection

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180060725A (ko) * 2016-11-29 2018-06-07 에릭슨엘지엔터프라이즈 주식회사 전화번호 검색 방법 및 장치

Also Published As

Publication number Publication date
US6919827B2 (en) 2005-07-19
US20050122240A1 (en) 2005-06-09

Similar Documents

Publication Publication Date Title
US7616138B2 (en) Data compression using a stream selector with edit-in-place capability for compressed data
AU702207B2 (en) Method of and apparatus for compressing and decompressing data and data processing apparatus and network system using the same
CN101800556B (zh) 数据传输及编码数据字符串的方法
US5703581A (en) Method and apparatus for data compression and decompression
US6621429B2 (en) Huffman decoding method and decoder, huffman decoding table, method of preparing the table, and storage media
CN100417028C (zh) 执行霍夫曼解码的方法
US6611213B1 (en) Method and apparatus for data compression using fingerprinting
CN108768403A (zh) 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器
US7650040B2 (en) Method, apparatus and system for data block rearrangement for LZ data compression
JP2531508B2 (ja) デ―タ列圧縮の方法
KR20050053996A (ko) 허프만 코드를 효율적으로 복호화하는 방법 및 장치
Saravanan et al. Enhancing efficiency of huffman coding using Lempel Ziv coding for image compression
JPS59231683A (ja) データ圧縮方法
US6748520B1 (en) System and method for compressing and decompressing a binary code image
US6798362B2 (en) Polynomial-time, sequential, adaptive system and method for lossy data compression
US20200321079A1 (en) Encoding/decoding method, encoder/decoder, storage method and device
KR100636370B1 (ko) 결정 비트를 이용한 부호화 장치 및 그 방법과 그에 따른복호화 장치 및 그 방법
CN116471337A (zh) 一种基于bwt和lzw的报文压缩与解压缩方法及设备
US20060125660A1 (en) Digital data compression robust relative to transmission noise
CN107896136B (zh) 一种雷达航迹报文编码方法
US6794999B1 (en) Resilient parameterized prefix codes for adaptive coding
US7612692B2 (en) Bidirectional context model for adaptive compression
Klein et al. Searching in compressed dictionaries
CN118074726A (zh) 一种基于FPGA的Huffman并行解压存储装置
JP2005175926A (ja) 復号装置及び方法

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid