KR101030726B1 - 확률적 테이블에 의해 생성된 심볼을 기반으로 호프만 테이블을 적용한 메모리 효율이 개선된 멀티미디어용 호프만 디코딩 방법 및 장치 - Google Patents
확률적 테이블에 의해 생성된 심볼을 기반으로 호프만 테이블을 적용한 메모리 효율이 개선된 멀티미디어용 호프만 디코딩 방법 및 장치 Download PDFInfo
- Publication number
- KR101030726B1 KR101030726B1 KR1020090115011A KR20090115011A KR101030726B1 KR 101030726 B1 KR101030726 B1 KR 101030726B1 KR 1020090115011 A KR1020090115011 A KR 1020090115011A KR 20090115011 A KR20090115011 A KR 20090115011A KR 101030726 B1 KR101030726 B1 KR 101030726B1
- Authority
- KR
- South Korea
- Prior art keywords
- field
- value
- entry
- hoffman
- delimiter
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
본 발명은 메모리가 효율적으로 사용되도록 호프만 디코딩 트리의 확률적 테이블에 의해 생성된 심볼들에 대한 새로운 테이블 표현을 이용해 확률적 테이블에 의해 생성된 심볼들에 대응되는 호프만 코드를 테이블 룩업(table look-up) 방식으로 디코딩하는 멀티미디어용 호프만 디코딩 방법과 장치에 관한 것이다. 본 발명의 일면에 따른 호프만 디코딩 방법은, 미리 정의된 호프만 테이블을 메모리에 저장하는 단계, 및 상기 호프만 테이블을 이용하여 입력 비트 스트림을 디코딩하는 단계를 포함하고, 상기 호프만 테이블은, 호프만 코드워드의 심볼을 루트 노드로부터 중간 노드를 거쳐 리프 노드로 대응시키는 바이너리 트리 구조 상에서, 루트 노드 및 각 중간 노드가 코드 값의 0 과 1에 대응하여 2개로 분기되는 각 엔트리에 대하여 구분자 필드와 값 필드를 저장하며, 상기 구분자 필드는 자식 노드가 중간 노드인지 또는 리프 노드인지 여부를 나타내는 0 또는 1의 값을 가지고, 상기 값 필드는 상기 구분자 필드가 0이면 자식 노드 인덱스이며 상기 구분자 필드가 1이면 심볼 값인 것을 특징으로 한다.
호프만 디코딩, 적은 메모리, 중간 노드, 리프 노드, 고속 디코딩
Description
본 발명은 호프만 디코딩 방법에 관한 것으로서, 메모리가 효율적으로 사용되도록 호프만 디코딩 트리의 확률적 테이블에 의해 생성된 심볼들에 대한 새로운 테이블 표현을 이용해 확률적 테이블에 의해 생성된 심볼들에 대응되는 호프만 코드를 테이블 룩업(table look-up) 방식으로 디코딩하는 멀티미디어용 호프만 디코딩 방법과 장치에 관한 것이다.
호프만 코딩은 호프만에 의하여 제안된 엔트로피(entropy) 코딩 방식으로서, MP3, JPEG, H.264 등과 같은 많은 멀티미디어 응용에 널리 사용되고 있다. 호프만 디코더의 효율은 전반적인 응용들의 동작에 영향을 끼친다. 호프만 디코더를 평가하는 두가지 주요 요인으로서는 디코딩 속도와 메모리 효율을 들 수 있다.
많은 실제 응용들에 있어서, 호프만 디코딩 과정은, 인코딩된 데이터 스트림을 미리 정의된 테이블을 이용해 디코딩하는 과정으로 이루어진다. 여기서 미리 정 의된 테이블을 효율적으로 메모리에 저장하는 것이 중요하다.
메모리 효율을 높인 많은 알고리즘들이 고속 호프만 디코딩의 수행을 위하여 제안되고 있다. 예를 들어, 도 1과 같은 호프만 테이블을 이용해 바이너리(binary) 트리 서치 방식으로 디코딩하는 방법을 소개한다. 도 2는 도 1의 테이블에 대응되는 디코딩 트리이다. 0에서 7까지의 심볼(symbol)이 하나씩 각각의 코드워드(codeword)에 대응되어 있다.
도 2에서 정사각형은 리프 노드(leaf node)를 의미하고 원형은 중간 노드(intermediate node)를 의미한다. 루트(root) 노드로부터 리프 노드까지의 경로가 리프 노드에 대응되는 코드워드를 나타낸다. 예를 들어, 루트 노드로부터 리프 노드(5)까지의 경로는 00이고, 이는 도 1의 테이블에서 심볼 (5)의 코드워드에 해당한다.
이와 같은 디코딩 트리를 이용하여 호프만 인코딩된 데이터를 디코딩하기 위하여 루트 노드로부터 시작하여 탐색해 나간다. 인코딩된 비트 스트림이 순차적으로 한 비트씩 페치(fetch)될 때, 그 값이 0 또는 1에 따라 좌측 또는 우측 자식 노드로 탐색된다. 이와 같은 과정으로 자식 노드가 리프 노드에 이르게 되면, 하나의 심볼이 디코딩되고, 그 뒤의 인코딩된 비트 스트림의 각 비트에 대하여 루트 노드로부터 탐색 과정이 재 시작되어 모든 인코딩된 데이터가 디코딩될 때까지 반복된다.
그러나, 이와 같은 기존의 트리 서치 방식은 루트 노드로부터 리프 노드까지 탐색하는 시간이 길므로 디코딩 속도가 매우 느리다는 문제점이 있다.
본 발명은 상술한 문제점을 해결하기 위한 것으로서, 본 발명의 목적은, 메모리가 효율적으로 사용되도록 호프만 디코딩 트리의 확률적 테이블에 의해 생성된 심볼들에 대한 새로운 테이블 표현을 정의하고, 이러한 확률적 테이블에 의해 생성된 심볼들에 대응되는 호프만 코드를 고속으로 탐색하여 디코딩할 수 있는 호프만 디코딩 방법과 장치를 제공하는 데 있다.
먼저, 본 발명의 특징을 요약하면, 상기의 목적을 달성하기 위한 본 발명의 일면에 따른 호프만 디코딩 방법은, 미리 정의된 호프만 테이블을 메모리에 저장하는 단계; 및 상기 호프만 테이블을 이용하여 입력 비트 스트림을 디코딩하는 단계를 포함하고, 상기 호프만 테이블은, 호프만 코드워드의 심볼을 루트 노드로부터 중간 노드를 거쳐 리프 노드로 대응시키는 바이너리 트리 구조 상에서, 루트 노드 및 각 중간 노드가 코드 값의 0 과 1에 대응하여 2개로 분기되는 각 엔트리에 대하여 구분자 필드와 값 필드를 저장하며, 상기 구분자 필드는 자식 노드가 중간 노드인지 또는 리프 노드인지 여부를 나타내는 0 또는 1의 값을 가지고, 상기 값 필드는 상기 구분자 필드가 0이면 자식 노드 인덱스이며 상기 구분자 필드가 1이면 심볼 값인 것을 특징으로 한다.
상기 디코딩하는 단계는, 상기 호프만 테이블로부터 인덱스(index)와 입력 비트를 더한 값에 대응된 엔트리의 구분자 필드와 값 필드를 추출하는 제1단계; 상 기 추출된 엔트리의 구분자 필드가 0인지 또는 1인지 여부를 판단하는 2단계; 상기 추출된 엔트리의 구분자 필드가 1이면 해당 값 필드를 심볼값으로 출력하고, 상기 인덱스를 0으로 설정한 후 상기 제1단계를 수행하는 제3단계; 및 상기 추출된 엔트리의 구분자 필드가 0이면 해당 값 필드에 2를 곱한 값을 상기 인덱스로 설정한 후 제1단계를 수행하는 제4단계를 포함한다.
상기 심볼의 길이가 8비트 보다 작은 경우에, 상기 각 엔트리에 대한 구분자 필드와 값 필드를 하나의 바이트에 저장하는 것을 특징으로 한다.
상기 각 엔트리에 대한 구분자 필드와 값 필드를 수학식 content = 2*value + IsSymol로 코드화하여 코드화된 content 값을 저장하고, 여기서, IsSymol은 구분자 필드, value는 값 필드, 및 content는 코드화되어 저장되는 값인 것을 특징으로 한다.
상기 심볼의 길이가 8비트인 경우에, 상기 각 엔트리에 대한 구분자 필드와 값 필드를 두 개로 구분된 메모리의 저장소에 각각 저장할 수 있다. 이때, 제1 저장소의 하나의 바이트 마다 각 엔트리에 대한 값 필드를 저장하고, 모든 엔트리에 대한 구분자 필드들을 바이트 단위로 분할하여 분할된 바이트 단위의 구분자 필드들을 제2저장소의 하나의 바이트 마다 각각 저장할 수 있다.
그리고, 본 발명의 다른 일면에 따른 호프만 디코더는, 미리 정의된 호프만 테이블을 저장하는 메모리; 및 상기 호프만 테이블을 이용하여 입력 비트 스트림을 디코딩하는 디코딩 수단을 포함하고, 상기 호프만 테이블은, 호프만 코드워드의 심볼을 루트 노드로부터 중간 노드를 거쳐 리프 노드로 대응시키는 바이너리 트리 구 조 상에서, 루트 노드 및 각 중간 노드가 코드 값의 0 과 1에 대응하여 2개로 분기되는 각 엔트리에 대하여 구분자 필드와 값 필드를 저장하며, 상기 구분자 필드는 자식 노드가 중간 노드인지 또는 리프 노드인지 여부를 나타내는 0 또는 1을 저장하고, 상기 값 필드는 상기 구분자 필드가 0이면 자식 노드 인덱스를 나타내고 상기 구분자 필드가 1이면 심볼 값을 나타내는 것을 특징으로 한다.
상기 입력 비트 스트림은 인코딩 수단에서 멀티미디어 데이터를 인코딩한 데이터이며, 상기 인코딩 수단은 상기 멀티미디어 데이터의 인코딩 시에 상기 호프만 테이블을 생성하여 상기 메모리에 저장할 수 있다.
상기 디코딩 수단은, 복수의 레지스터를 이용하여 상기 구분자 필드와 상기 값 필드에 대응되는 데이터를 상기 메모리에 요청하여 수신하도록 제어하는 콘트롤러를 포함하고, 상기 콘트롤러는, 상기 호프만 테이블로부터 인덱스(index)와 입력 비트를 더한 값에 대응된 엔트리의 구분자 필드와 값 필드를 추출하는 제1과정; 상기 추출된 엔트리의 구분자 필드가 0인지 또는 1인지 여부를 판단하는 제2과정; 상기 추출된 엔트리의 구분자 필드가 1이면 해당 값 필드를 심볼값으로 출력하고, 상기 인덱스를 0으로 설정한 후 상기 제1과정을 수행하는 제3과정; 및 상기 추출된 엔트리의 구분자 필드가 0이면 해당 값 필드에 2를 곱한 값을 상기 인덱스로 설정한 후 상기 제1과정을 수행하는 제4과정을 이용하여 상기 디코딩을 제어할 수 있다.
본 발명에 따른 호프만 디코딩 방법에 따르면, 새로이 정의된 호프만 디코딩 트리의 테이블 표현을 메모리에 효율적으로 저장하고 이를 이용해 호프만 코드를 고속으로 탐색하여 디코딩할 수 있다.
본 발명과 본 발명의 동작상의 이점 및 본 발명의 실시에 의하여 달성되는 목적을 충분히 이해하기 위해서는 본 발명의 바람직한 실시 예를 예시하는 첨부 도면 및 첨부 도면에 기재된 내용을 참조하여야만 한다.
이하, 첨부한 도면을 참조하여 본 발명의 바람직한 실시예를 설명함으로써, 본 발명을 상세히 설명한다.
도 3은 본 발명의 일실시예에 따른 호프만 디코딩 트리를 설명하기 위한 도면이다.
본 발명에서는, 예를 들어, 0에서 7까지의 심볼(symbol)이 하나씩 각각의 코드워드(codeword)에 대응되어 있는 도 2와 같은 디코딩 트리를 도 3과 같이 루프 노드(원형0)로부터 중간 노드들(원형 1~6)을 거쳐 리프 노드들(정방형 0~7)로 대응시키는 바이너리 트리 구조로 변경한다. 여기서, 루트 노드 및 각 중간 노드가 코드 값의 0 과 1에 대응하여 좌측과 우측 2개로 분기되고, 각 노드에 대한 2개의 각 엔트리에 대하여 구분자(IsSymbol) 필드와 값 필드(Value)가 포함된다.
이를 정리하면, 본 발명의 일실시예에 따른 호프만 테이블은 도 4와 같이, 7개의 노드에 대하여 각각의 2개의 엔트리(총 14개의 엔트리)가 각각 구분자(IsSymbol) 필드와 값 필드(Value)로 이루어지도록 정의된다. 구분자(IsSymbol) 필드는 자식(child) 노드가 중간 노드인지 또는 리프 노드인지 여부를 나타내는 0 또는 1의 값을 가진다. 또한, 값 필드(Value)는 구분자 필드(IsSymbol)가 0이면 자식 노드 인덱스이며 구분자 필드(IsSymbol)가 1이면 심볼 값을 나타낸다. 예를 들어, 도 3에서, 노드 (2)에서 코드 값의 0 과 1에 대응하여 좌측과 우측으로 분기되는 2개의 엔트리를 나타내기 위하여, (1,7) 및 (0,3)으로 할 수 있다. 여기서, (1,7)은 구분자 필드(IsSymbol)=1및 값 필드(Value)=7이고, 이에 따라 7은 리프 노드에 있는 심볼 값을 나타낸다. 또한, (0,3)은 구분자 필드(IsSymbol)=0및 값 필드(Value)=3이고, 이에 따라 3은 중간 노드에 있는 자식 노드 인덱스(노드 2에 대한 해당 자식 노드가 중간 노드이며 인덱스 3을 가짐을 의미함)를 나타낸다.
이와 같은 새로운 디코딩 트리의 정의에 따른 호프만 테이블을 메모리에 저장하고, 소정 디코딩 수단에서 이를 이용하여 입력 비트 스트림(예를 들어, 호프만 인코딩된 데이터)을 디코딩할 수 있다. 이때 메모리 용량은 2(n-1)*(d+1) 비트가 요구됨을 알 수 있다. 여기서, n은 심볼의 수, 즉, 리프 노드의 수에 해당하고, d는 값 필드(Value)의 비트수에 해당한다.
도 5는 도 4의 호프만 테이블을 이용한 디코딩 방법을 설명하기 위한 흐름도이다.
먼저, 디코딩 수단에서 소정의 인덱스(index)를 0으로 설정할 수 있다(S10).
다음에, 디코딩 수단에서, 인덱스와 입력 비트를 더한 값에 대응된 엔트리의 구분자 필드(IsSymbol)와 값 필드(Value)를 도 4와 같은 호프만 테이블로부터 추출할 수 있다(S20). 예를 들어, 입력 비트 스트림 '0010'일 때, 현재의 인덱스=0, 입력 비트=0에 따라 엔트리 [0+0=0]에 해당하는 구분자 필드(IsSymbol)와 값 필 드(Value), 즉, (0, 1)를 추출할 수 있다.
다음에, 디코딩 수단은 위와 같이 추출된 엔트리의 구분자 필드(IsSymbol)가 0인지 또는 1인지 여부를 판단한다(S30).
이때의 판단 결과에 따라, 디코딩 수단은 위와 같이 추출된 엔트리의 구분자 필드(IsSymbol)가 1이면 해당 값 필드(Value)를 심볼값으로 출력하고, 인덱스를 다시 0으로 설정한 후 S20 단계를 계속하여 수행하도록 한다(S40). S30 단계의 판단 결과에 따라, 디코딩 수단은 위와 같이 추출된 엔트리의 구분자 필드(IsSymbol)가 0이면 해당 값 필드(Value)에 2를 곱한 값을 인덱스로 설정한 후 S20 단계를 계속하여 수행하도록 한다(S50).
예를 들어, 위의 예에서 추출된 엔트리 값(0,1)의 구분자 필드(IsSymbol)가 0이므로, S50 단계에서 해당 값 필드(Value) 1에 2를 곱한 값 2를 인덱스로하고(index=2), S20 단계를 계속하여 수행한다. 이후, S20 단계로 돌아가면, 현재의 인덱스=2, 입력 비트=0에 따라 엔트리 [2+0=2]에 해당하는 구분자 필드(IsSymbol)와 값 필드(Value), 즉, (1, 5)를 추출할 수 있다. 이와 같이 추출된 엔트리 값(1,5)의 구분자 필드(IsSymbol)가 1이므로, S40 단계에서 해당 값 필드(Value)를 심볼값으로 출력하고, 인덱스를 다시 0으로 설정한 후 S20 단계를 계속하여 수행하도록 한다.
이와 같은 본 발명의 일시예에 따른 도 4와 같은 호프만 테이블을 메모리에 효율적으로 저장하여 사용되어야 한다. 일반적으로 호프만 코드의 심볼 길이는 8비트 보다 작거나 같으므로, 이하 이에 대한 프로세서 기반의 플랫폼에서의 메모리에 호프만 테이블을 저장하여 디코딩에 이용하는 방법을 설명한다. 다만, 이에 한정되는 것은 아니며, 심볼 길이가 8비트 보다 큰 경우에 있어서도 유사하게 확장하여 적용 가능하다.
도 6은 심볼 길이가 8 비트 보다 작은 경우에 도 4의 호프만 테이블을 8비트로 구현하기 위한 메모리 구조를 설명하기 위한 도면이다.
도 6과 같이, 심볼의 길이가 8비트 보다 작은 경우에, 각 엔트리에 대한 구분자 필드(IsSymbol)와 값 필드(Value)를 하나의 바이트에 저장할 수 있다. 예를 들어, 한 바이트(8비트)에서 구분자 필드(IsSymbol)를 1비트 할당하고, 값 필드(Value)를 d비트 할당하며, 나머지 비트, 즉, 8-(d+1) 비트는 적절히 임의의 패딩(padding) 비트를 붙여서 각 엔트리를 저장할 수 있다. 여기서, d는 8 비트 보다 작은 심볼 길이 또는 값 필드(Value)의 길이에 해당한다. 예를 들어, 도 4와 같은 호프만 테이블은 도 5와 같은 구조로 0~(2n-3)(n=8) 바이트, 즉, 14 개 바이트에 저장될 수 있다.
도 7은 도 4의 호프만 테이블에 대응되는 간략화된 호프만 테이블을 설명하기 위한 도면이다.
심볼의 길이가 8비트 보다 작은 경우에, 도 4의 호프만 테이블을 도 7과 같이 간략히 코드화하여 저장할 수도 있다. 도 4에서, 각 엔트리에 대한 구분자 필드(IsSymbol)와 값 필드(Value)가 (0,1), (0,2), (1,5), (1,3),..,(1,0)인 경우에, 예를 들어, content = 2*value + IsSymol로 코드화하여 코드화된 도 7과 같은 content 값을 메모리에 저장하여 디코딩에 이용할 수도 있다. 예를 들어, 엔트리에 대한 구분자 필드(IsSymbol)와 값 필드(Value) (0,1)에 대하여, content = 2*1+0=2로 코드화된다. 또한, 엔트리 (0,2)에 대하여 content=2*2+0=4로 코드화된다. 마찬가지로, 다른 엔트리에 대하여도 위와 같은 방식으로 코드화될 수 있다.
한편, 심볼 길이가 8 비트일 때에는, 하나의 엔트리 값이 8비트 이외에 IsSymol을 위한 1비트가 요구되므로 16 비트에 하나의 엔트리를 저장할 수도 있으나, 이는 7비트가 낭비되어, 7/16=44%의 오버헤드 요인이 되므로 다음과 같이 두개의 테이블을 사용한다. 즉, 각 엔트리의 값 필드(Value)를 저장하는 테이블과 구분자 필드(IsSymbol)를 저장하는 테이블이 사용된다.
도 8은 심볼 길이가 8 비트일 때, 도 4의 호프만 테이블의 값 필드(Value)를 저장하는 메모리 구조를 설명하기 위한 도면이다.
도 8과 같이, 심볼의 길이가 8비트인 경우에, 도 4의 호프만 테이블의 각 엔트리의 값 필드(Value)를 제1 저장소의 하나의 바이트 마다에 저장할 수 있다. 예를 들어, 엔트리의 값 필드(Value)들 모두는, 0~(2n-3)(n=8) 바이트, 즉, 14 개 바이트에 저장될 수 있다.
도 9는 심볼 길이가 8 비트일 때, 도 4의 호프만 테이블의 구분자 필드(IsSymbol)를 저장하는 메모리 구조를 설명하기 위한 도면이다.
도 9와 같이, 심볼의 길이가 8비트인 경우에, 모든 엔트리에 대한 구분자 필드들을 바이트 단위로 분할하여 분할된 바이트 단위의 구분자 필드들을 제2저장소의 하나의 바이트 마다 각각 저장할 수 있다. 예를 들어, 도 4에서, 구분자 필드들을 순차로 선택하여 8 비트로 분할하면, 00011100과 (00)110111 로 분할되고, 이는 10진수로 각각 28, 55에 해당한다.
이에 따라, 도 10과 같이, 도 8에 따라 메모리에 저장된 값 필드(Value) 테이블(A)과 도 9에 따라 메모리에 저장된 구분자 필드(IsSymbol) 테이블(B)이 두 개로 구분된 메모리, 즉, 제1 저장소와 제2 저장소에 각각 저장되어 디코딩에 이용될 수 있다.
도 11은 본 발명의 일실시예에 따른 호프만 디코딩의 실험 절차를 설명하기 위한 도면이다.
도 11은 위에서 기술한 바와 같은 본 발명의 일실시예에 따른 호프만 테이블을 이용하여 디코딩 시의 메모리 효율과 디코딩 속도를 추정하기 위한 실험 절차이다. 실험은 667MHz로 동작하는 ARM11 프로세서를 이용하여 수행되었다. 도 11과 같이, 인코딩 수단을 이용하여 이미지 파일, 오디오 파일, 텍스트 파일 등 멀티미디어 데이터에 대한 인코딩을 수행하고 이에 따라 인코딩된 데이터와 함께 도 4 또는 도 10과 같은 호프만 테이블을 생성할 수 있으며, 이와 같이 생성된 호프만 테이블에 기초하여 인코딩된 데이터를 다시 디코딩하여 본래의 테스트 파일로 복원할 수 있다.
도 12는 도 11의 실험 모델에 사용된 테스트 파일의 크기를 설명하기 위한 도면이다.
실험 모델에 사용된 테스트 파일은, 3개의 그룹, 즉, 이미지 파일, 오디오 파일, 텍스트 파일 각각에 대하여, 2MB, 4MB, 8MB 정도의 파일 사이즈를 갖는 9개의 파일들이 사용되었다. 이들에 대한 인코딩된 데이터의 압축된 파일 사이즈가 도 12에 정리되어 있다.
도 13은 도 11의 실험 모델에 따른 테스트 결과를 설명하기 위한 도면이다.
도 13과 같이, 디코딩 시간은 테스트 파일 사이즈에 따라 거의 선형적으로 증가함이 예측되었다. 또한, 같은 파일 사이즈에 대하여 텍스트 파일의 디코딩 시간은 가장 빠르고, 반면, 이미지 파일에 대한 디코딩 시간은 가장 느리다. 다만, 전체적으로, 본 발명의 디코딩 방법(proposed method)이 기존의 바이너리 트리 서치 방법(tree search method) 보다 빠르게 성능 개선이 이루어질 수 있음이 예측된다.
도 14는 도 11의 실험 모델에 따른 테스트 결과의 개선 정도를 설명하기 위한 도면이다.
본 발명에서는 개선 정도(improvement factor), IF = (tBNT - tPM)/tBNT로 정의하여 도 13과 같이 정리하였다. 여기서, tBNT 는 바이너리 트리 서치 방법에 의한 디코딩 시간이며, tPM 는 본 발명의 디코딩 방법에 의한 디코딩 시간이다. 도 13에서 알 수 있듯이, 본 발명의 디코딩 방법에서 30% 정도의 디코딩 시간의 개선이 이루어질 수 있음을 예측할 수 있다.
도 15는 본 발명의 일실시예에 따른 호프만 디코더를 설명하기 위한 장치의 도면이다.
위에서도 기술한 바와 같이, 소정 인코딩 수단은 이미지 파일, 오디오 파일, 텍스트 파일 등의 멀티미디어 데이터에 대한 입력 비트 스트림을 인코딩하여, 인코 딩된 데이터와 함께 도 4 또는 도 10과 같은 호프만 테이블을 생성하여 메모리에 저장할 수 있으며, 본 발명의 일실시예에 따른 호프만 디코더는, 이와 같이 생성된 도 4와 같은 호프만 테이블에 기초하여 상기 인코딩된 데이터를 다시 디코딩하여 본래의 비트 스트림으로 복원할 수 있다.
본 발명의 일실시예에 따른 호프만 디코더는, 전반적인 디코딩 과정을 제어하는 콘트롤러를 포함하고, 이러한 콘트롤러를 통해 발생되는 데이터 입력 신호(inData), 클럭 신호(CLK), 디코딩 제어 신호(nRst) 등에 동기되어 동작하는 레지스터들(11~14)을 포함한다. 본 발명의 일실시예에 따른 호프만 디코더는, 인에블 신호(EN)가 로직 하이(logical high)일 때 동작하며, 인에블 신호(EN)가 로직 로우(logical low)일 때 동작을 멈출 수 있다.
예를 들어, 인에블 신호(EN)가 로직 하이일 때, 디코딩 제어 신호(nRst)가 로직 하이가 되어 제2 레지스터(12)에 저장되면, 본 발명의 일실시예에 따른 호프만 디코더는 디코딩을 시작할 수 있으며, 수십 MHz의 주파수를 갖는 클럭 신호(CLK)에 동기되어, 데이터 입력 신호(inData)가 로직 하이가 되면, 도 5의 S20 단계와 같이, 인덱스와 입력 비트를 더한 값에 대응된 엔트리의 구분자 필드(IsSymbol)와 값 필드(Value)를 추출하기 위한 해당 어드레스(romAddr)(예를 들어 9비트)를 발생시켜 메모리에 해당값을 요청할 수 있다. 이때의 어드레스(romAddr)는 도 4 또는 도 10과 같은 호프만 테이블에 기초하여 미리 정하여진 어드레스로서 콘트롤러에서 위와 같은 인덱스와 입력 비트를 더한 값에 대응된 해당 어드레스(romAddr)를 발생시켜 제1 레지스터(11)로 주는 경우에, 제1 레지스 터(11)는 메모리로 해당 어드레스(romAddr)의 값을 메모리로 요청할 수 있다. 이에 따라, 제3 레지스터(13)와 제4 레지스터(14)는 메모리로부터 해당 데이터, 즉, 해당 엔트리의 구분자 필드(IsSymbol)와 값 필드(Value)가 포함된 데이터(예를 들어, 9비트)를 수신한다. 값 필드(Value)는 제3 레지스터(13)로 전달되고, 구분자 필드(IsSymbol)는 제4 레지스터(14)로 전달된다.
이후, 콘트롤러에서 위와 같이 추출된 엔트리의 구분자 필드(IsSymbol), 즉, 제4 레지스터(14)의 값이 0인지 또는 1인지 여부를 판단하고(도 5의 S30 참조), 판단 결과에 따라 제4 레지스터(14)의 값(hasData)이 로직 하이이면, 제3 레지스터(13)는 해당 값 필드(Value)(outData)를 심볼값으로 출력한다(도 5의 S40 참조). 이때, 콘트롤러는 인덱스를 다시 0으로 설정한 후 위와 같은 S20 단계를 계속하여 수행하도록 제어할 수 있다. 경우에 따라, 제1 레지스터(11) 및 제3 레지스터(13)의 값은 로딩 신호(load)에 따라 수신 데이터를 저장할 수 있고, 클리어 신호(clear)에 따라 '0'으로 리셋될 수 있다.
또한, 콘트롤러의 위와 같은 제4 레지스터(14)의 값(hasData)에 대한 판단결과, 제4 레지스터(14)의 값이 로직 로우이면, 콘트롤러는 해당 값 필드(Value), 즉, 제3 레지스터(13)의 값에 2를 곱한 값을 인덱스로 설정한 후 위와 같은 S20 단계를 계속하여 수행하도록 제어할 수 있다.
도 16에서는 'Hello'와 같은 문자가 포함된 인코딩된 데이터가 위와 같은 디코딩에 따라, 해당 문자로 잘 디코딩 되고 있음을 보여주고 있다. 여기서, 클럭 신호(CLK)는 Altera FPGA StartixII 콘트롤러를 이용한 경우에 93.5MHz를 사용하였 고, Altera FPGA Cyclone-III 콘트롤러를 이용한 경우에 73MHz를 사용하였다. 이와 같은 디코더를 사용하여 도 17과 같이 여러가지 데이터 사이즈, 예를 들어, 2, 3, 4, 6, 7, 8Mbyte의 T-DMB 데이터에 대하여 디코딩할 때의 디코딩 시간은 입력 데이터 사이즈에 따라 선형적으로 증가하되, 바이너리 트리 서치 방식에 비교하여 대략 20% 이상의 처리속도의 성능 개선이 이루어짐을 확인하였다.
이상에서와 같이 도면과 명세서에서 최적 실시예가 개시되었다. 여기서 특정한 용어들이 사용되었으나, 이는 단지 본 발명을 설명하기 위한 목적에서 사용된 것이지 의미한정이나 특허청구범위에 기재된 본 발명의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술 분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.
도 1은 일반적인 호프만 테이블을 설명하기 위한 도면이다.
도 2는 일반적인 호프만 디코딩 트리를 설명하기 위한 도면이다.
도 3은 본 발명의 일실시예에 따른 호프만 디코딩 트리를 설명하기 위한 도면이다.
도 4는 본 발명의 일실시예에 따른 호프만 테이블을 설명하기 위한 도면이다.
도 5는 도 4의 호프만 테이블을 이용한 디코딩 방법을 설명하기 위한 흐름도이다.
도 6은 심볼 길이가 8 비트 보다 작은 경우에 도 4의 호프만 테이블을 8비트로 구현하기 위한 메모리 구조를 설명하기 위한 도면이다.
도 7은 도 4의 호프만 테이블에 대응되는 간략화된 호프만 테이블을 설명하기 위한 도면이다.
도 8은 심볼 길이가 8 비트일 때, 도 4의 호프만 테이블의 값 필드(Value)를 저장하는 메모리 구조를 설명하기 위한 도면이다.
도 9는 심볼 길이가 8 비트일 때, 도 4의 호프만 테이블의 구분자 필드(IsSymbol)를 저장하는 메모리 구조를 설명하기 위한 도면이다.
도 10은 도 8에 따라 메모리에 저장된 값 필드(Value) 테이블(A)과 도 9에 따라 메모리에 저장된 구분자 필드(IsSymbol) 테이블(B)을 설명하기 위한 도면이다.
도 11은 본 발명의 일실시예에 따른 호프만 디코딩의 실험 절차를 설명하기 위한 도면이다.
도 12는 도 11의 실험 모델에 사용된 테스트 파일의 크기를 설명하기 위한 도면이다.
도 13은 도 11의 실험 모델에 따른 테스트 결과를 설명하기 위한 도면이다.
도 14는 도 11의 실험 모델에 따른 테스트 결과의 개선 정도를 설명하기 위한 도면이다.
도 15는 본 발명의 일실시예에 따른 호프만 디코더를 설명하기 위한 도면이다.
도 16은 도 15의 호프만 디코더의 동작 설명을 위한 타이밍도이다.
도 17은 도 15의 디코더를 이용한 처리 속도 성능을 설명하기 위한 도면이다.
Claims (9)
- 미리 정의된 호프만 테이블을 메모리에 저장하는 단계; 및상기 호프만 테이블을 이용하여 입력 비트 스트림을 디코딩하는 단계를 포함하고,상기 호프만 테이블은, 호프만 코드워드의 심볼을 루트 노드로부터 중간 노드를 거쳐 리프 노드로 대응시키는 바이너리 트리 구조 상에서, 루트 노드 및 각 중간 노드가 코드 값의 0 과 1에 대응하여 2개로 분기되는 각 엔트리에 대하여 구분자 필드와 값 필드를 저장하며,상기 구분자 필드는 자식 노드가 중간 노드인지 또는 리프 노드인지 여부를 나타내는 0 또는 1의 값을 가지고, 상기 값 필드는 상기 구분자 필드가 0이면 자식 노드 인덱스이며 상기 구분자 필드가 1이면 심볼 값인 것을 특징으로 하는 호프만 디코딩 방법.
- 제1항에 있어서, 상기 디코딩하는 단계는,상기 호프만 테이블로부터 인덱스(index)와 입력 비트를 더한 값에 대응된 엔트리의 구분자 필드와 값 필드를 추출하는 제1단계;상기 추출된 엔트리의 구분자 필드가 0인지 또는 1인지 여부를 판단하는 제2단계;상기 추출된 엔트리의 구분자 필드가 1이면 해당 값 필드를 심볼값으로 출력 하고, 상기 인덱스를 0으로 설정한 후 상기 제1단계를 수행하는 제3단계; 및상기 추출된 엔트리의 구분자 필드가 0이면 해당 값 필드에 2를 곱한 값을 상기 인덱스로 설정한 후 상기 제1단계를 수행하는 제4단계를 포함하는 것을 특징으로 하는 호프만 디코딩 방법.
- 제1항에 있어서, 상기 심볼의 길이가 8비트 보다 작은 경우에,상기 각 엔트리에 대한 구분자 필드와 값 필드를 하나의 바이트에 저장하는 것을 특징으로 하는 호프만 디코딩 방법.
- 제3항에 있어서, 상기 각 엔트리에 대한 구분자 필드와 값 필드를 수학식 content = 2*value + IsSymol로 코드화하여 코드화된 content 값을 저장하고, 여기서, IsSymol은 구분자 필드, value는 값 필드, 및 content는 코드화되어 저장되는 값인 것을 특징으로 하는 호프만 디코딩 방법.
- 제1항에 있어서, 상기 심볼의 길이가 8비트인 경우에,상기 각 엔트리에 대한 구분자 필드와 값 필드를 두 개로 구분된 메모리의 저장소에 각각 저장하는 것을 특징으로 하는 호프만 디코딩 방법.
- 제5항에 있어서,제1 저장소의 하나의 바이트 마다 각 엔트리에 대한 값 필드를 저장하고,모든 엔트리에 대한 구분자 필드들을 바이트 단위로 분할하여 분할된 바이트 단위의 구분자 필드들을 제2저장소의 하나의 바이트 마다 각각 저장하는 것을 특징으로 하는 호프만 디코딩 방법.
- 미리 정의된 호프만 테이블을 저장하는 메모리; 및상기 호프만 테이블을 이용하여 입력 비트 스트림을 디코딩하는 디코딩 수단을 포함하고,상기 호프만 테이블은, 호프만 코드워드의 심볼을 루트 노드로부터 중간 노드를 거쳐 리프 노드로 대응시키는 바이너리 트리 구조 상에서, 루트 노드 및 각 중간 노드가 코드 값의 0 과 1에 대응하여 2개로 분기되는 각 엔트리에 대하여 구분자 필드와 값 필드를 저장하며,상기 구분자 필드는 자식 노드가 중간 노드인지 또는 리프 노드인지 여부를 나타내는 0 또는 1을 저장하고, 상기 값 필드는 상기 구분자 필드가 0이면 자식 노드 인덱스를 나타내고 상기 구분자 필드가 1이면 심볼 값을 나타내는 것을 특징으로 하는 호프만 디코더.
- 제7항에 있어서,상기 입력 비트 스트림은 인코딩 수단에서 멀티미디어 데이터를 인코딩한 데이터이며, 상기 인코딩 수단은 상기 멀티미디어 데이터의 인코딩 시에 상기 호프만 테이블을 생성하여 상기 메모리에 저장하는 것을 특징으로 하는 호프만 디코더.
- 제7항에 있어서,상기 디코딩 수단은, 복수의 레지스터를 이용하여 상기 구분자 필드와 상기 값 필드에 대응되는 데이터를 상기 메모리에 요청하여 수신하도록 제어하는 콘트롤러를 포함하고,상기 콘트롤러는,상기 호프만 테이블로부터 인덱스(index)와 입력 비트를 더한 값에 대응된 엔트리의 구분자 필드와 값 필드를 추출하는 제1과정;상기 추출된 엔트리의 구분자 필드가 0인지 또는 1인지 여부를 판단하는 제2과정;상기 추출된 엔트리의 구분자 필드가 1이면 해당 값 필드를 심볼값으로 출력하고, 상기 인덱스를 0으로 설정한 후 상기 제1과정을 수행하는 제3과정; 및상기 추출된 엔트리의 구분자 필드가 0이면 해당 값 필드에 2를 곱한 값을 상기 인덱스로 설정한 후 상기 제1과정을 수행하는 제4과정을 이용하여 상기 디코딩을 제어하는 것을 특징으로 하는 호프만 디코더.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020090115011A KR101030726B1 (ko) | 2009-11-26 | 2009-11-26 | 확률적 테이블에 의해 생성된 심볼을 기반으로 호프만 테이블을 적용한 메모리 효율이 개선된 멀티미디어용 호프만 디코딩 방법 및 장치 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020090115011A KR101030726B1 (ko) | 2009-11-26 | 2009-11-26 | 확률적 테이블에 의해 생성된 심볼을 기반으로 호프만 테이블을 적용한 메모리 효율이 개선된 멀티미디어용 호프만 디코딩 방법 및 장치 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR101030726B1 true KR101030726B1 (ko) | 2011-04-26 |
Family
ID=44050469
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020090115011A KR101030726B1 (ko) | 2009-11-26 | 2009-11-26 | 확률적 테이블에 의해 생성된 심볼을 기반으로 호프만 테이블을 적용한 메모리 효율이 개선된 멀티미디어용 호프만 디코딩 방법 및 장치 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101030726B1 (ko) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101270633B1 (ko) | 2011-04-18 | 2013-06-03 | 명지대학교 산학협력단 | 복수 호프만 테이블을 적용하여 고속 처리가 가능한 멀티미디어용 호프만 디코딩 방법 및 장치 |
US8674857B2 (en) | 2012-03-05 | 2014-03-18 | Samsung Electronics Co., Ltd. | Apparatus and method for decoding |
CN111325026A (zh) * | 2020-02-18 | 2020-06-23 | 北京声智科技有限公司 | 一种词向量模型的训练方法及系统 |
CN112799672A (zh) * | 2020-12-31 | 2021-05-14 | 杭州广立微电子股份有限公司 | 一种基于关键词的测试数据处理方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR19980036005A (ko) * | 1996-11-15 | 1998-08-05 | 김광호 | 개선된 호프만 디코딩방법, 디코딩 타임 테이블 및 그 테이블 작성방법 |
US5973626A (en) | 1998-03-17 | 1999-10-26 | Cornell Research Foundation, Inc. | Byte-based prefix encoding |
KR20040027536A (ko) * | 2004-02-10 | 2004-04-01 | 원태영 | 전산 통계 물리 전산 모사기를 위한 효율적 자료 검색 방법 |
-
2009
- 2009-11-26 KR KR1020090115011A patent/KR101030726B1/ko not_active IP Right Cessation
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR19980036005A (ko) * | 1996-11-15 | 1998-08-05 | 김광호 | 개선된 호프만 디코딩방법, 디코딩 타임 테이블 및 그 테이블 작성방법 |
US5973626A (en) | 1998-03-17 | 1999-10-26 | Cornell Research Foundation, Inc. | Byte-based prefix encoding |
KR20040027536A (ko) * | 2004-02-10 | 2004-04-01 | 원태영 | 전산 통계 물리 전산 모사기를 위한 효율적 자료 검색 방법 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101270633B1 (ko) | 2011-04-18 | 2013-06-03 | 명지대학교 산학협력단 | 복수 호프만 테이블을 적용하여 고속 처리가 가능한 멀티미디어용 호프만 디코딩 방법 및 장치 |
US8674857B2 (en) | 2012-03-05 | 2014-03-18 | Samsung Electronics Co., Ltd. | Apparatus and method for decoding |
CN111325026A (zh) * | 2020-02-18 | 2020-06-23 | 北京声智科技有限公司 | 一种词向量模型的训练方法及系统 |
CN111325026B (zh) * | 2020-02-18 | 2023-10-10 | 北京声智科技有限公司 | 一种词向量模型的训练方法及系统 |
CN112799672A (zh) * | 2020-12-31 | 2021-05-14 | 杭州广立微电子股份有限公司 | 一种基于关键词的测试数据处理方法 |
CN112799672B (zh) * | 2020-12-31 | 2024-07-26 | 杭州广立微电子股份有限公司 | 一种基于关键词的测试数据处理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101118089B1 (ko) | 가변장 복호화 장치 및 방법 | |
US9223765B1 (en) | Encoding and decoding data using context model grouping | |
CN102244518A (zh) | 并行解压缩的硬件实现的系统及方法 | |
US8106799B1 (en) | Data compression and decompression using parallel processing | |
JP2002252563A (ja) | ハフマン符号の復号方法、復号装置、ハフマン符号復号用テーブルおよびその作成方法 | |
JP2012533921A (ja) | データの圧縮方法 | |
JP2003218703A (ja) | データ符号化装置及びデータ復号装置 | |
US20130019029A1 (en) | Lossless compression of a predictive data stream having mixed data types | |
KR101030726B1 (ko) | 확률적 테이블에 의해 생성된 심볼을 기반으로 호프만 테이블을 적용한 메모리 효율이 개선된 멀티미디어용 호프만 디코딩 방법 및 장치 | |
US10230392B2 (en) | Techniques for parallel data decompression | |
CN114301468A (zh) | 一种fse编码方法、装置、设备及存储介质 | |
US10496703B2 (en) | Techniques for random operations on compressed data | |
CN102255617A (zh) | 哈夫曼树的存储方法及利用数组进行数据解码的方法 | |
US7205915B2 (en) | Method of decoding variable length prefix codes | |
JP2016052046A (ja) | 圧縮装置、伸長装置およびストレージ装置 | |
US20110125987A1 (en) | Dedicated Arithmetic Decoding Instruction | |
WO2005013493A1 (en) | A method for efficient variable length decoding | |
JPH08223055A (ja) | 可変長コードデコーダ | |
US8243816B2 (en) | Entropy decoding method | |
US10931303B1 (en) | Data processing system | |
JP6695813B2 (ja) | 専用算術符号化命令 | |
CN101707484B (zh) | 一种适合硬件实现的快速指数哥伦布码解码方法 | |
KR101270633B1 (ko) | 복수 호프만 테이블을 적용하여 고속 처리가 가능한 멀티미디어용 호프만 디코딩 방법 및 장치 | |
CN101626242B (zh) | 改进的霍夫曼解码方法及装置 | |
Vasanthi et al. | Implementation of Robust Compression Technique Using LZ77 Algorithm on Tensilica's Xtensa Processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
FPAY | Annual fee payment | ||
GRNT | Written decision to grant | ||
LAPS | Lapse due to unpaid annual fee |