KR20160035553A - 가변 길이 코딩된 입력을 디코딩하는 방법 및 시스템, 그리고 코드북을 변경하는 방법 - Google Patents
가변 길이 코딩된 입력을 디코딩하는 방법 및 시스템, 그리고 코드북을 변경하는 방법 Download PDFInfo
- Publication number
- KR20160035553A KR20160035553A KR1020150132699A KR20150132699A KR20160035553A KR 20160035553 A KR20160035553 A KR 20160035553A KR 1020150132699 A KR1020150132699 A KR 1020150132699A KR 20150132699 A KR20150132699 A KR 20150132699A KR 20160035553 A KR20160035553 A KR 20160035553A
- Authority
- KR
- South Korea
- Prior art keywords
- branch
- length
- symbol
- processor
- code symbol
- Prior art date
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/37—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
- H03M13/39—Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes
- H03M13/3905—Maximum a posteriori probability [MAP] decoding or approximations thereof based on trellis or lattice decoding, e.g. forward-backward algorithm, log-MAP decoding, max-log-MAP decoding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/37—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
- H03M13/39—Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes
- H03M13/3994—Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes using state pinning or decision forcing, i.e. the decoded sequence is forced through a particular trellis state or a particular set of trellis states or a particular decoded symbol
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6005—Decoder aspects
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Probability & Statistics with Applications (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Mathematical Physics (AREA)
- Algebra (AREA)
- General Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
Abstract
복수의 이진 코드 심볼들을 포함하는 가변 길이 코딩된 입력을 출력 심볼로 디코딩하는 방법은: 프로세서 및 복수의 상태들을 포함하는 룩업 테이블을 저장하는 메모리를 포함하는 디코더가, 현재 상태를 초기 상태로 그리고 현재 브랜치 길이를 초기 브랜치 길이로 설정하는 단계; 및 룩업 테이블을 사용하는 디코더가, 현재 상태, 현재 브랜치 길이, 및 가변 길이 코딩된 입력의 다음 이진 코드 심볼에 기초하여 다음 상태 또는 출력 심볼들 중 일 심볼을 식별하는 단계를 포함한다.
Description
본 발명의 실시예들의 양태들은 가변 길이 코딩된 입력을 디코딩하는 방법 및 시스템, 그리고 코드북을 변경하는 방법에 관한 것이다.
가변 길이 코드북(또는 가변 길이 인코딩)은 심볼들과 가변 수의 비트들 사이의 매핑을 제공한다. 가변 길이 코드북들은 통상의 조건들하에서 더욱 빈번하게 나타나는 심볼들에 대해 더 적은 비트들을 사용하고, 트레이드오프로서, 덜 빈번하게 나타나는 심볼들에 대해 더 많은 비트들을 사용함으로써 편향된 분포들을 갖는 데이터의 압축을 허용한다. 예를 들어, 영어에서, 문자 "E"는 문자 "J" 보다 더욱 빈번하게 나타나고, 따라서, 영문 텍스트를 인코딩하는 가변 길이 코드는 문자 "J"를 인코딩하는데 있어서 보다 문자 "E"를 인코딩하는데 있어서 더 적은 비트들을 사용한다.
본 발명의 실시예들의 양태들은 단순화된 하드웨어를 사용하여 가변 길이 코드를 디코딩하는 시스템들 및 방법들을 제공하는 것이다.
본 발명의 일 실시예에 따르면, 복수의 이진 코드 심볼들을 포함하는 가변 길이 코딩된 입력을 출력 심볼로 디코딩하는 방법은: 프로세서 및 복수의 상태들을 포함하는 룩업 테이블을 저장하는 메모리를 포함하는 디코더가, 현재 상태를 초기 상태로 그리고 현재 브랜치 길이를 초기 브랜치 길이로 설정하는 단계; 및 룩업 테이블을 사용하는 디코더가, 현재 상태, 현재 브랜치 길이, 및 가변 길이 코딩된 입력의 다음 이진 코드 심볼에 기초하여 다음 상태 또는 출력 심볼들 중 일 심볼을 식별하는 단계를 포함한다.
방법은: 다음 상태가 식별될 때, 디코더가 현재 상태를 다음 상태로 업데이트하는 단계; 디코더가 현재 브랜치 길이를 업데이트하는 단계; 디코더가 가변 길이 코딩된 입력의 다음 이진 코드 심볼을 업데이트하는 단계; 및 디코더가 업데이트된 현재 상태, 업데이트된 현재 브랜치 길이, 및 가변 길이 코딩된 입력의 업데이트된 다음 이진 코드 심볼에 기초하여 다음 상태 또는 출력 심볼들 중 일 심볼을 식별하는 것을 반복하는 단계; 및 출력 심볼들 중 일 심볼이 식별될 때, 디코더로부터 출력 심볼들 중 일 심볼을 출력하는 단계를 더 포함할 수 있다.
다음 상태 또는 심볼을 식별하는 단계는: 코드북을 나타내는 룩업 테이블에서 매칭 엔트리를 식별하는 단계를 포함할 수 있고, 코드북은 이진 코드 심볼들의 복수의 시퀀스들을 복수의 출력 심볼들에 매핑하고, 이진 코드 심볼들은 제 1 코드 심볼 및 제 2 코드 심볼을 포함하고, 코드북은 복수의 브랜치들을 포함하는 이진 트리 표현을 갖고, 브랜치들은 복수의 내부 노드들, 복수의 리프 노드들, 및 노드들 사이의 복수의 에지들을 포함하고, 각 에지는 제 1 코드 심볼 및 제 2 코드 심볼 중 하나와 연관되고, 내부 노드들 각각은 제 1 코드 심볼과 연관되고 제 1 브랜치에 연결된 제 1 에지 및 제 2 코드 심볼과 연관되고 제 2 브랜치에 연결된 제 2 에지와 연관되며, 제 1 브랜치의 브랜치 길이는 제 2 브랜치의 브랜치 길이 보다 길다.
다음 상태 또는 심볼을 식별하는 단계는: 현재 상태에 대응하는 공식을 식별하는 단계; 및 현재 상태에 대응하는 공식, 현재 브랜치 길이, 및 다음 이진 코드 심볼에 기초하여 출력 심볼들 중 일 심볼을 식별하는 단계를 포함할 수 있다.
프로세서는 복수의 상태들 각각에 대해 사용된 공통 모듈을 구현할 수 있다.
가변 길이 코딩된 입력은 런-렝스(run-length) 인코딩된 데이터일 수 있고, 출력 심볼들은 제로 런들(zero runs) 및 크기(magnitude)의 쌍들일 수 있다.
방법은 직렬 링크로부터 가변 길이 코딩된 입력을 수신하는 단계를 더 포함할 수 있다.
룩업 테이블은 브랜치 길이 및 이진 코딩된 심볼을 다음 상태 또는 출력 심볼들 중 일 심볼에 매핑하는 복수의 룩업 테이블들을 포함할 수 있고, 룩업 테이블들 각각은 복수의 상태들의 상이한 상태에 대응한다.
본 발명의 일 실시예에 따르면, 하드웨어 디코더상의 구현을 위해 코드북을 변경하는 방법으로서, 코드북은 복수의 브랜치들을 포함하는 이진 트리 표현을 갖고, 브랜치들은 복수의 내부 노드들, 복수의 리프 노드들, 및 노드들 사이의 복수의 에지들을 포함하고, 각 에지는 제 1 코드 심볼 및 제 2 코드 심볼 중 하나와 연관되고, 각 브랜치는 적어도 하나의 리프 노드를 포함하며, 상기 방법은 이진 트리내의 각 내부 노드에 대해, 프로세서가, 복수의 에지들 중 제 1 에지에 의해 내부 노드에 연결된 제 1 브랜치 및 복수의 에지들 중 제 2 에지에 의해 내부 노드에 연결된 제 2 브랜치를 식별하는 단계 - 제 1 에지는 제 1 코드 심볼과 연관되고 제 2 에지는 제 2 코드 심볼과 연관됨 -; 프로세서가, 제 1 브랜치의 길이를 결정하는 단계; 프로세서가 제 2 브랜치의 길이를 결정하는 단계; 제 1 브랜치의 길이가 제 2 브랜치의 길이 보다 클 때, 프로세서가, 제 1 브랜치를 제 1 코드 심볼과 연관된 제 1 에지에 할당하고 제 2 브랜치를 제 2 코드 심볼과 연관된 제 2 에지에 할당하는 단계; 제 2 브랜치의 길이가 제 1 브랜치의 길이 보다 클 때, 프로세서가, 제 2 브랜치를 제 1 코드 심볼과 연관된 제 1 에지에 할당하고 제 1 브랜치를 제 2 코드 심볼과 연관된 제 2 에지에 할당하는 단계; 및 프로세서가, 변경된 코드북을 출력하는 단계를 포함한다.
제 1 브랜치의 길이를 결정하는 단계는, 프로세서가, 현재 노드와 제 1 브랜치의 리프 노드 사이의 내부 노드들의 최대 수를 결정하는 단계를 포함하고, 제 2 브랜치의 길이를 결정하는 단계는 프로세서가, 현재 노드와 제 2 브랜치의 리프 노드 사이의 내부 노드들의 최대 수를 결정하는 단계를 포함한다.
복수의 이진 코드 심볼들을 포함하는 가변 길이 코딩된 입력을 하나 이상의 출력 심볼들로 디코딩하는 시스템이 프로세서 및 메모리를 포함하고, 메모리는 상태, 가변 길이 코딩된 입력의 다음 이진 코드 심볼, 및 브랜치 길이를 다음 상태 또는 하나 이상의 출력 심볼들 중 일 출력 심볼로 매핑하는 룩업 테이블; 및 프로세서에 의해 실행될 때, 프로세서로 하여금: 현재 상태를 초기 상태로 그리고 현재 브랜치 길이를 초기 브랜치 길이로 설정하게 하고; 이진 코드 심볼들 중 일 이진 코드 심볼을 수신하게 하며; 현재 상태, 이진 코드 심볼, 및 현재 브랜치 길이에 기초하여 룩업 테이블을 사용하여 다음 상태 또는 출력 심볼을 식별하게 하는 명령들을 저장한다.
메모리는 프로세서에 의해 실행될 때, 프로세서로 하여금, 다음 상태가 식별될 때, 다음 상태에 기초하여 현재 상태를 업데이트하게 하고; 현재 브랜치 길이를 업데이트하게 하고, 다음 상태 또는 출력 심볼을 식별하는 것을 반복하게 하며, 출력 심볼이 식별될 때, 출력 심볼을 출력하게 하는 명령들을 더 저장할 수 있다.
메모리는 프로세서에 의해 실행될 때, 프로세서로 하여금, 코드북을 나타내는 룩업 테이블에서 매칭 엔트리를 식별하게 하는 명령들을 더 저장할 수 있고, 코드북은 이진 코드 심볼들의 복수의 시퀀스들을 복수의 출력 심볼들에 매핑하고, 이진 코드 심볼들은 제 1 코드 심볼 및 제 2 코드 심볼을 포함하고, 코드북은 복수의 브랜치들을 포함하는 이진 트리 표현을 갖고, 브랜치들은 복수의 내부 노드들, 복수의 리프 노드들, 및 노드들 사이의 복수의 에지들을 포함하고, 각 에지는 제 1 코드 심볼 및 제 2 코드 심볼 중 하나와 연관되고, 내부 노드들 각각은 제 1 코드 심볼과 연관되고 제 1 브랜치에 연결된 제 1 에지 및 제 2 코드 심볼과 연관되고 제 2 브랜치에 연결된 제 2 에지와 연관되며, 제 1 브랜치의 브랜치 길이는 제 2 브랜치의 브랜치 길이 보다 길다.
메모리는 프로세서에 의해 실행될 때, 프로세서로 하여금 현재 상태에 대응하는 공식을 식별하고, 현재 상태에 대응하는 공식, 현재 브랜치 길이, 및 다음 이진 코드 심볼에 기초하여 출력 심볼들 중 일 심볼을 식별함으로써 다음 상태 또는 심볼을 식별하게 하는 명령들을 더 저장할 수 있다.
메모리는 프로세서에 의해 실행될 때, 프로세서로 하여금 복수의 상태들 각각에 대해 사용되는 공통 모듈을 구현하게 하는 명령들을 더 저장할 수 있다.
가변 길이 코딩된 입력은 런-렝스 인코딩된 데이터일 수 있고, 출력 심볼들은 제로 런들 및 크기의 쌍들일 수 있다.
시스템은 직렬 링크를 더 포함할 수 있고, 프로세서는 직렬 링크로부터 가변 길이 코딩된 입력을 수신한다.
룩업 테이블은 브랜치 길이 및 이진 코딩된 심볼을 다음 상태 또는 출력 심볼들 중 일 심볼에 매핑하는 복수의 룩업 테이블들을 포함할 수 있고, 룩업 테이블들 각각은 복수의 상태들의 상이한 상태에 대응한다.
본 발명의 일 실시예에 따르면, 하드웨어 디코더상의 구현을 위해 코드북을 변경하는 시스템은 프로세서 및 메모리를 포함하고, 메모리는 코드북 - 코드북은 복수의 브랜치들을 포함하는 이진 트리 표현을 갖고, 브랜치들은 복수의 내부 노드들, 복수의 리프 노드들, 및 노드들 사이의 복수의 에지들을 포함하고, 각 에지는 제 1 코드 심볼 및 제 2 코드 심볼 중 하나와 연관되고, 각 브랜치는 적어도 하나의 리프 노드를 포함함 -; 및 프로세서에 의해 실행될 때, 프로세서로 하여금 복수의 에지들 중 제 1 에지에 의해 내부 노드에 연결된 제 1 브랜치 및 복수의 에지들 중 제 2 에지에 의해 내부 노드에 연결된 제 2 브랜치를 식별하게 하고 - 제 1 에지는 제 1 코드 심볼과 연관되고 제 2 에지는 제 2 코드 심볼과 연관됨 -; 제 1 브랜치의 길이를 결정하게 하고; 제 2 브랜치의 길이를 결정하게 하고; 제 1 브랜치의 길이가 제 2 브랜치의 길이 보다 클 때, 제 1 브랜치를 제 1 코드 심볼과 연관된 제 1 에지에 할당하고 제 2 브랜치를 제 2 코드 심볼과 연관된 제 2 에지에 할당하게 하고; 제 2 브랜치의 길이가 제 1 브랜치의 길이 보다 클 때, 제 2 브랜치를 제 1 코드 심볼과 연관된 제 1 에지에 할당하고 제 1 브랜치를 제 2 코드 심볼과 연관된 제 2 에지에 할당하게 하며; 변경된 코드북을 출력하게 하는 명령들을 저장한다.
메모리는 프로세서에 의해 실행될 때, 프로세서로 하여금, 제 1 브랜치의 길이를 결정할 때 현재 노드와 제 1 브랜치의 리프 노드 사이의 내부 노드들의 최대 수를 결정하게 하며, 제 2 브랜치의 길이를 결정할 때 현재 노드와 제 2 브랜치의 리프 노드 사이의 내부 노드들의 최대 수를 결정하게 하는 명령들을 더 저장할 수 있다.
본 발명의 실시예들의 양태들에 따르면 단순화된 하드웨어를 사용하여 가변 길이 코드를 디코딩하는 시스템들 및 방법들이 제공된다..
도 1은 가변 길이 코드를 디코딩하는 코드북을 나타내는 이진 트리의 예시이다.
도 2는 가변 길이 코딩된 입력을 디코딩하는 본 발명의 일 실시예에 따른 시스템을 예시하는 블록도이다.
도 3은 본 발명의 일 실시예에 따른 단순화된 상태 머신의 추상적 표현이다.
도 4는 본 발명의 일 실시예에 따른 코드북을 구현하는 상태 머신을 예시하는 도면이다.
도 5는 본 발명의 일 실시예에 따른 코드북을 최적화하는 방법을 예시하는 플로우차트이다.
도 6은 본 발명의 일 실시예에 따른 가변 길이 코딩된 입력을 디코딩하는 방법을 예시하는 플로우차트이다.
도 7은 본 발명의 일 실시예에 따른 가변 길이 코딩된 입력을 디코딩하는 방법을 예시하는 플로우차트이다.
도 2는 가변 길이 코딩된 입력을 디코딩하는 본 발명의 일 실시예에 따른 시스템을 예시하는 블록도이다.
도 3은 본 발명의 일 실시예에 따른 단순화된 상태 머신의 추상적 표현이다.
도 4는 본 발명의 일 실시예에 따른 코드북을 구현하는 상태 머신을 예시하는 도면이다.
도 5는 본 발명의 일 실시예에 따른 코드북을 최적화하는 방법을 예시하는 플로우차트이다.
도 6은 본 발명의 일 실시예에 따른 가변 길이 코딩된 입력을 디코딩하는 방법을 예시하는 플로우차트이다.
도 7은 본 발명의 일 실시예에 따른 가변 길이 코딩된 입력을 디코딩하는 방법을 예시하는 플로우차트이다.
아래의 상세한 설명에서, 본 발명의 특정한 예시적인 실시예들만이 예시로서 도시되고 설명된다. 통상의 기술자가 인식하는 바와 같이, 본 발명은 다수의 상이한 형태들로 실시될 수 있으며 여기에 설명한 실시예들에 제한되는 것으로 해석되지 않아야 한다. 동일한 참조 부호들이 명세서 전반에 걸쳐 동일한 요소들을 나타낸다.
가변 길이 인코딩의 일 예가 호프만 코딩이다. 심볼들과 이진 코드들 사이의 매핑들을 제공하는 표를 코드북(또는 호프만 표)이라 칭한다. 아래의 표 1은 문자들(A 내지 J)과 문자들을 나타내는 이진 코드들 사이의 코드북 매핑의 예이다:
Symbol | Code |
A | 11 |
B | 10110 |
C | 1010 |
D | 10111 |
E | 0 |
F | 10010 |
G | 10011 |
H | 10001 |
I | 100000 |
J | 100001 |
가변 길이 인코딩을 위한 코드북은, 코드북에서의 임의의 다른 코드의 프리픽스인 코드북에서의 코드가 없을 때 유효한 것으로 고려된다. 예를 들어, 코드들 "101" 및 "10100"을 포함하는 코드북은, 코드 "10100"이 "101"로 시작하기 때문에 유효하지 않다. 이것은 코드북이 이진 코드 트리(또는 상태 머신 또는 유한 오토머턴(finite automaton))으로서 또한 표현될 수 있다는 것을 제안한다.
도 1은 표 1의 예시적인 코드북을 나타내는 예시적인 이진 트리이고, 여기서, (넘버링된 원들로서 도시된) 트리의 내부 노드들은 코드의 디코딩에서 다양한 상태들을 나타내고, 에지들은 가변 길이 코딩된 입력의 다음 이진값에 기초한 다음 상태들로의 천이를 예시하고(이와 같이, 에지들 각각은 이진 코드 심볼들 중 하나, 예를 들어, "0" 또는 "1"과 연관됨), 트리의 (정사각형으로 도시된) 리프 노드들은 디코딩된 출력 심볼(예를 들어, 도 1에서, 디코딩된 심볼들(A 내지 J) 중 하나)에 대응하는 종단 상태를 나타낸다. 이진 트리들의 노드들은 브랜치들로 그룹화될 수 있고, 여기서, 각 내부 노드는 내부 노드로부터 대응하는 외향 에지들(도 1에서, 노드로부터 멀어지는 방향을 포인팅하는 화살표들을 갖는 에지들)을 통해 2개의 브랜치들에 연결된다. 초기 노드(예를 들어, 도 1에서 노드 0)로부터 이격된 각 내부 노드는 하나의 내향 에지(도 1에서, 노드를 향해 포인팅하는 화살표를 갖는 에지들)에 또한 연결된다.
아래의 표 2는 도 1에 도시된 이진 트리에 대응하는 코드북을 나타내는 룩업 테이블이고, 여기서, 룩업 테이블은 심볼(O)로 천이하기 위해 그리고 심볼(O)이 있다면 어떤 심볼(O)을 출력하기 위해 상태들 S 각각 및 이들 상태들에서의 각 가능한 입력 I ("0" 또는 "1")을 다음 상태 S에 매핑한다.
상태(S) | I | O | 다음상태 (S) | I | O | 다음상태 (S) |
0 | 0 | E | 0 | 1 | 1 | |
1 | 0 | 2 | 1 | A | 0 | |
2 | 0 | 3 | 1 | 4 | ||
3 | 0 | 5 | 1 | 6 | ||
4 | 0 | C | 0 | 1 | 7 | |
5 | 0 | 8 | 1 | H | 0 | |
6 | 0 | F | 0 | 1 | G | 0 |
7 | 0 | B | 0 | 1 | D | 0 |
8 | 0 | I | 0 | 1 | J | 0 |
가변 길이 코드들을 디코딩하는 디코더의 하드웨어 구현은 통상적으로, 심볼간의 미결정 코드 길이들의 가변성을 핸들링하기 위해 중간 상태들을 홀딩하기 위한 메모리 버퍼를 포함할 수 있다. 예를 들어, 상기 표 2는 도 1에 도시된 도면의 다양한 상태들 사이의 천이들을 나타내기 위해 룩업 테이블에서 9개의 상이한 행들이 사용된다는 것을 나타낸다.
이와 같이, 본 발명의 실시예들은 가변 길이 코드들을 디코딩하는 시스템들 및 방법들에 관한 것이고, 여기서, 디코딩 프로세스에 대한 계산적인 요건들(예를 들어, 메모리 및 하드웨어 컴포넌트들)이 감소된다. 특정한 특징들을 갖도록 코드 테이블을 설계함으로써, 본 발명의 실시예들의 양태들은 디코더가 감소된(또는 최소의) 게이트 카운트를 갖게 하면서, 매우 복잡하고 그리고/또는 큰 코드북들을 지원하고 동일하거나 실질적으로 동일한 레벨의 데이터 압축을 유지하게 한다. 이것은 기반 하드웨어의 복잡성을 감소시킴으로써 데이터를 디코딩하는 기존의 시스템들 이상의 개선을 허용하여, 하드웨어 비용을 감소시킨다.
이러한 가변 길이 인코딩은 예를 들어, 컴퓨팅 디바이스(예를 들어, 모바일 폰, 태블릿 컴퓨터, 랩탑 컴퓨터, 또는 데스크탑 컴퓨터)에서의 그래픽 프로세싱 유닛과 디스플레이 패널 사이의 데이터 링크에 걸쳐 사용될 수 있고, 여기서, 데이터 링크는 그래픽 프로세싱 유닛으로부터 디스플레이 패널로 그래픽 데이터(예를 들어, 비트매핑된 이미지들 또는 비디오)를 송신하기 위해 사용될 수 있다. 허프만 코딩과 같은 데이터 압축은 증가된 성능과 더 높은 해상도 이미지들이 디스플레이 패널들로 송신되게 하여, (예를 들어, 동일한 데이터를 송신하기 위한 감소된 심볼 송신 레이트로 인한) 이 패널들의 향상된 선명성, 증가된 프레임 레이트들, 및/또는 감소된 전력 소비를 허용한다. 본 발명의 실시예들에서와 같이, 최적화된 코드북을 사용하는 것은 디스플레이 패널로의 데이터의 송신에서 추가의 개선들을 허용한다.
도 2는 (예를 들어, 그래픽 프로세싱 유닛에 커플링된) 입력 포트(12)로부터 수신된 가변 길이 코딩된 입력(10)을 (예를 들어, 디스플레이 패널에 커플링된) 출력 포트(22)에 공급된 복수의 출력 심볼들(20)로 디코딩하는 본 발명의 일 실시예에 따른 시스템을 예시하는 블록도이다. 본 발명의 다양한 실시예들에 따르면, 본 발명의 실시예들에 따른 디코딩 시스템(또는 가변 길이 디코더 또는 허프만 디코더 상태 머신)(100)은 프로세싱 컴포넌트들(110) 및 메모리(120)(예를 들어, 룩업 테이블)를 포함하는 필드 프로그램가능한 게이트 어레이(FPGA); 프로세서(110) 및 메모리(120)를 포함하는 마이크로제어기; 응용 주문형 집적 회로(ASIC); 또는 이들의 조합들과 같은 하드웨어로 구현될 수 있다. 재프로그램가능한 메모리(120)를 포함하는 본 발명의 실시예들은 특정한 애플리케이션들에 기초하여 상이한 코드북들을 디코딩하도록 재구성될 수 있다.
본 발명의 실시예들의 양태들은 바이어싱된(또는 최적의) 코드북을 갖는 디코딩 시스템의 설계에 관한 것이다. 본 발명의 실시예들의 양태들에 따른 코드북에서, 이진 코드 심볼들(예를 들어, "0" 및 "1")이 바이어싱되어, 하나의 이진 코드 심볼(예를 들어, "0")은 코드북에서 더 짧은 코드들을 위해 일반적으로 사용되고, 다른 이진 코드 심볼(예를 들어, "1")은 코드북에서 더 긴 코드들을 위해 일반적으로 사용된다. (본 발명의 다른 실시예들에서, 이진 코드 심볼 "0"은 더 긴 코드들을 위해 사용될 수 있고 이진 코드 심볼 "1"은 더 짧은 코드들을 위해 사용될 수 있다.) 이러한 일관된 바이어스는 본 발명의 일부 실시예들에 따른 더욱 컴팩트한 하드웨어 설계(예를 들어, 단순화되고 그리고/또는 덜 계산적인 하드웨어)를 가능하게 한다.
본 발명의 일 실시예에 따르면, 코드북은, "1"을 "0"으로 스위치하는 "1"로 끝나는 일부 심볼의 임의의 코드에 대해, 새로운 코드가 이러한 코드북에서 다른 심볼에 대해 유효 코드이어야 하는 경우에, "최적화"된 것으로 고려된다. 예를 들어, "xxxx1"이 최적화된 코드북에서 일부 심볼에 대한 코드인 경우에, "xxxx0"가 코드북에서 일부 다른 심볼에 대한 적당한 코드이어야 한다. 여기에서 사용되는 바와 같이, 용어 "최적화된"은 위에서 논의한 바와 같이 바이어싱된 코드북의 조건을 지칭하도록 의도되고, 용어 "최적화된"은 코드북이 추가의 개선사항이 없다는 것을 의미하는 것으로 의도되지 않는다. 대신에, 본 발명의 실시예들은 일반적인 경우에서 또는 특정한 동작 조건들하에서 사용하기 위해 코드북을 더 개선시키는 다양한 방식들로 더 변경될 수 있다.
본 발명의 실시예들의 양태들은 또한, 본 발명의 일부 실시예들에 따른 하드웨어 디코더에서 사용하기 위해 코드북을 최적화시키기 위해 기존의 코드북을 변경하는 방법에 관한 것이다.
위에서 제안된 바와 같이 바이어싱된 코드북을 사용함으로써, 본 발명의 실시예들의 양태들은 긴 코드 브랜치들만을 유지하는 공통 서브모듈(또는 공통 모듈)을 사용하여 구현될 수 있어서, 상태 머신에서 사용된 상태들의 수를 감소시킨다. 다시 말해, 디코더는 공급된 코드의 모든 부분들에 대해 동작하는 공통 모듈을 사용하여 구현될 수 있고, 여기서, 공통 모듈은 최적화된 코드북에 기초하여 동작하는 단순화된 로직을 갖는다.
상술한 바와 같이 최적화된 가변 길이 코드북은 감소된 하드웨어 복잡성을 갖는 단순화된 상태 머신을 사용하여 구현될 수 있다. 도 3은 본 발명의 일 실시예에 따른 단순화된 상태 머신의 추상적 표현이다. 도 3에 예시된 상태 머신에서, "1"의 판독 입력 이진 코드 심볼에 기초한 천이들은 더 긴 코드들을 초래하는 반면에, "0"의 판독 입력 이진 코드 심볼에 기초한 천이들은 더 짧은 코드들을 초래한다(예를 들어, 도 3에 도시된 바와 같은 런(Run) [L], 런 [L-1], 및 런 [1], 여기서, "0" 에지 또는 천이에 대한 브랜치들 각각은 "1" 에지 또는 천이에 따른 브랜치 보다 짧다). 상태 머신은 메모리(120)에 저장된 룩업 테이블로부터 천이들을 식별하는 것에 기초하여 천이들 및 동작들을 식별하는 단순한 프로세싱 루프를 사용하여 구현될 수 있다.
표 3은 샘플 코드북이고 표 4는 표 3에 나타낸 코드북의 "최적화"되거나 "바이어싱"된 버전이고, 여기서, 표 4에서의 최적화된 버전은 더 짧은 코드들에 대해 "0" 및 더 긴 코드들에 대해 "1"을 향한 바이어스를 나타낸다.
심볼 | 코드 |
A | 11 |
B | 10110 |
C | 1010 |
D | 10111 |
E | 0 |
F | 10010 |
G | 10011 |
H | 10001 |
I | 100000 |
J | 100001 |
심볼 | 코드 |
A | 10 |
B | 11010 |
C | 1100 |
D | 11011 |
E | 0 |
F | 11100 |
G | 11101 |
H | 11110 |
I | 111110 |
J | 111111 |
도 4는 본 발명의 일 실시예에 따른 코드의 바이어싱된 버전을 구현하는 바이어싱된 상태 머신을 예시하는 도면이다. 도 4의 상태 머신은 위에서 표 4에 나타낸 코드북에 대응하고, 도 3에 도시된 상태 머신의 일반 구조를 갖는다. 도 4에서의 상태 머신은, 천이들 중 일부가 "바이어스"를 생성하기 위해 스왑되었다는 점에서 도 1과는 상이하고, 여기서, "0"은 더 짧은 코드들을 일반적으로 지칭하고(예를 들어, "0" 에지들을 따른 천이들은 더 짧은 브랜치들을 초래하고), "1"은 더 긴 코드들을 지칭한다(예를 들어, "1" 에지들을 따른 천이들은 더 긴 브랜치들을 초래한다). 코드들의 스왑핑은 위에서 표 3과 표 4를 비교함으로써 알 수 있는 바와 같이 최적화된 상태 머신이 "최적화되지 않거나" 또는 "바이어싱되지 않은" 상태 머신(예를 들어, 도 1에 도시된 머신)으로부터 상이한 코드들을 활용한다는 것을 또한 나타낸다.
도 5는 본 발명의 일 실시예에 따라 바이어싱된 상태 머신(또는 바이어싱된 코드북)을 생성하기 위해 상태 머신(그리고 그에 따라 대응하는 코드북)을 변경하는 방법(500)을 예시하는 플로우차트이다. 방법(500)은 메모리에 커플링된 프로세서를 포함하는 컴퓨팅 디바이스에 의해 수행될 수 있고, 여기서, 상태 머신이 메모리에 저장되고, 메모리는 프로세서에 의해 실행될 때, 프로세서로 하여금, 메모리에 저장된 상태 머신에 대한 방법(500)의 동작들을 수행하게 하는 명령들을 저장한다.
위에서 논의한 바와 같이, 바이어싱된 상태 머신에서, 이진 코딩 심볼들 중 제 1 이진 코딩 심볼(예를 들어, "1")은 더 긴 코드들에 대응하도록 선택되는 반면에, 다른 이진 코딩 심볼(예를 들어, "0")은 더 짧은 코드들에 대응하도록 선택된다. 도 5를 참조하면, 동작(510)에서, 방법은 상태 머신을 이진 트리로서 수신할 수 있다(상태 머신은 예를 들어, 표로서 표현될 수 있다). 방법(500)에 공급된 상태 머신 또는 코드북은 통상의 기술자에게 공지된 바와 같은, 허프만 코드를 생성하는 표준 기법을 사용하여 생성될 수 있다. 도 1은 본 발명의 일 실시예에 따른 방법(500)에 의해 변경될 수 있는 하나의 이러한 상태 머신의 그래픽 표현이다.
동작(530)에서, 트리에서의 다음 내부 노드가 분석되도록 선택된다. 방법은 부분적으로는, 트리의 일반 구조를 유지하는 기법이 (아래의 논의하는 바와 같이) 브랜치들의 길이들에 관하여 불변을 유지하기 때문에 실질적으로 임의의 순서로 노드들을 식별할 수 있다. 일부 실시예들에서, 프로세스는 루트(root) 노드(예를 들어, 초기 또는 "0" 상태)로 시작하고, 넓이 우선(breadth-first) 또는 깊이 우선(depth-first) 순서로 루트 노드에서 기인하는 나중 노드들을 식별한다. 본 발명의 다른 실시예들에서, 프로세스는 리프 로드들과만 연결된 내부 노드들로 시작하고, 루트 노드를 향해 트리를 워크 "업(up)"한다.
동작(550)에서, 방법은 현재 노드로부터 브랜치들의 길이들을 결정한다. 각 내부 노드는 다른 내부 노드 또는 리프 노드에 연결된 2개의 외향 에지들을 갖고, 이들 에지들은 이진 코드 심볼들(예를 들어, "0" 및 "1") 중 상이한 이진 코드 심볼들로 라벨링된다. 이들 외향 에지들에 연결된 서브트리들을 "브랜치들"이라 지칭할 수 있고, "브랜치 길이" L은 현재 노드와 리프 노드 사이의 브랜치를 따른 내부 노드들의 최대 수를 지칭한다. 예를 들어, 도 1에서, 상태 1은 상태 2에 연결된 제 1 브랜치("0" 브랜치) 및 리프 노드 "A"에 연결된 제 2 브랜치("1" 브랜치)를 포함한다. 제 2 브랜치의 브랜치 길이 L은, 상태 1과 리프 노드 "A" 사이에 내부 노드들이 존재하지 않기 때문에 제로이다. 제 1 브랜치는, 가장 먼 리프 노드 또는 노드들(여기서, 리프 노드들 "I" 및 "J")이 4개의 내부 노드들 떨어져 있기 때문에(노드 1과 리프 노드들 "I" 및 "J" 사이에 내부 노드들(2, 3, 5, 및 8)이 있음) 4의 브랜치 길이를 갖는다. "B", "F", 및 "G"와 같은 다른 리프 노드들이 이러한 브랜치에 또한 있지만, 이들 리프 노드들은 단지 3개의 노드들 떨어져 있어서, 이들이 가장 먼 노드들이 아니기 때문에 상태 1의 제 1 브랜치의 브랜치 길이를 계산하는데 고려되지 않는다.
본 발명의 일부 실시예에서, 동적 프로그래밍 또는 기억 기법이 브랜치들의 불필요한 계산을 회피하기 위해 이전에 계산된 브랜치 길이들을 저장하는데 사용될 수 있다. 이러한 실시예들에서, 브랜치들의 브랜치 길이들을 결정하는 것은 이전에 계산된 브랜치 길이들을 룩업하는 것을 또한 포함할 수 있다.
동작(570)에서, 2개의 브랜치들 중 더 긴 브랜치가 이진 심볼들의 제 1 이진 심볼(더 긴 코드들과 연관된 이진 심볼, 이러한 예에서, "1")과 연관된 에지에 할당되고, 2개의 브랜치들 중 더 짧은 브랜치가 다른 에지에 할당된다. 일부 경우들에서, 수신된 코드북은 이러한 특성을 이미 충족할 수 있다. 그렇지 않으면, 브랜치들은 예를 들어, 브랜치들과 연관된 이진 코드 심볼들을 교환함으로써(예를 들어, 하나의 에지에 대해 "0"으로부터 "1"로 그리고 다른 에지에 대해 "1"로부터 "0"으로) 스왑된다. 동일한 브랜치 길이들의 경우에, 브랜치들의 재할당(또는 스왑핑)은 필요하지 않다.
예를 들어, 도 1과 도 4를 비교하여, 상태 1에서, 상태 2에 대한 브랜치는 리프 상태 "A"에 대한 브랜치 보다 긴 브랜치 길이를 갖는다. 따라서, 도 1의 상태 머신이 공급될 때, 브랜치들 "0" 및 "1"은, 도 4에 도시된 바와 같이, "1" 에지가 내부 상태 2를 초래하고 "0" 에지가 상태 "A"를 초래하도록 스왑된다.
트리들의 브랜치들이 단지 스왑되기 때문에, 이들 브랜치들의 길이들은 스왑 이후에 동일하게 유지된다. 또한, 브랜치들 양자가 동일한 내부 노드에 연결되기 때문에, 현재 노드를 포함하는 서브트리의 브랜치 길이는 동일하게 유지된다. 따라서, 방법이 바이어싱된 코드북을 생성하기 위해 이진 트리를 변경함에 따라, 임의의 소정의 브랜치의 전체 브랜치 길이가 동일하게 유지된다. 이러한 특성으로 인해, 노드들은 임의의 순서로 프로세싱될 수 있다.
동작(590)에서, 디코더(100)는 분석할 더 많은 내부 노드들이 존재하는지를 결정한다. 그러한 경우에, 디코더(100)는 동작(530)으로 진행하고, 여기서, 다음 내부 노드가 선택된다. 분석할 추가의 노드들이 존재하지 않는 경우에, 코드북의 변경은 완료되고 방법(500)은 종료된다.
표 4에 나타낸 "최적화"된 코드북은 상태 머신이 감소된 룩업 테이블을 사용하여 인코딩되게 한다. 표 5는 본 발명의 일 실시예에 따른 최적화된 코드북(예를 들어, 표 4의 코드북)에서 상태 천이를 나타내는 룩업 테이블의 예이다.
상태(S) | I | L | O or 다음상태(S) | I | L | O or 다음상태 (S) |
0 | 0 | 5,4,3,2,1,0 | E, A, 4, 6, H, I | 1 | 0 | J |
4 | 0 | 1,0 | C, B | 1 | 0 | D |
6 | 0 | 0 | F | 1 | 0 | G |
본 발명의 실시예들에 따른 최적화된 코드북을 사용한 상태 천이들을 위한 룩업 테이블은 현재 상태 S, 다음 입력 이진 코드 심볼 I, 및 현재 브랜치 길이 L에 기초하여 출력 심볼(O) 또는 다음 상태(다음 S)를 식별한다. 본 발명의 일 실시예에 따르면, 최적화된 코드북은 최적화 이전에 비교가능한 코드북 보다 적은 상태들을 포함한다. 표 5에 나타낸 예에서, 표 2에 나타낸 원래 코드북의 9개의 상태들은 3개의 상태들(상태들 0, 4, 및 6)로 감소된다. 대응하는 도 4에서, 상태들 0, 4, 및 6은 실선, 파선, 및 점선 각각을 사용하여 박스처리된다. 3개의 상태들 0, 4, 및 6은 시스템의 서브-코드북들 또는 서브-표들로 또한 고려될 수 있고, 여기서, 서브-표들은 입력 이진 코드 심볼 I 및 브랜치 길이 L를 그들의 대응하는 상태 S에 대한 출력 심볼들 또는 상태들로 매핑한다. 이와 같이, 하나의 상태로부터 다른 상태로 천이하는 것은 상이한 코드북 또는 상이한 룩업 테이블로 스위칭하는 것으로 또한 고려될 수 있다.
도 6은 본 발명의 일 실시예에 따른 가변 길이 코딩된 입력(10)을 디코딩하는 방법(600)을 예시하는 플로우차트이다. 동작(610)에서, 가변 길이 디코딩 시스템(100)이 가변 길이 코딩된 입력(10)(예를 들어, 직렬 통신 디바이스를 통해 수신된 입력)을 수신한다. 동작(620)에서, 상태 머신은 상태를 초기 상태(예를 들어, 상태 0) 및 초기 브랜치 길이(예를 들어, 코드북에서 가장 긴 브랜치의 길이)로 설정함으로써 리셋된다. 동작(630)에서, 수신된 가변 길이 코딩된 입력(10)에서 다음 심볼이 식별된다(심볼들은 일반적으로 수신된 메시지로부터 한번에 하나의 심볼이 취해진다). 동작(640)에서, 다음 상태가 현재 브랜치 길이, 현재 상태, 및 가변 길이 코딩된 입력(10)의 식별된 심볼에 기초하여 식별된다. 현재 상태, 현재 브랜치 길이, 및 현재 입력 심볼에 매칭하는 룩업 테이블에서의 엔트리를 찾음으로써, 가변 길이 디코딩 시스템(100)은 동작(640)에서 다음 상태 및 다음 브랜치 길이를 식별한다.
예를 들어, 표 5(위) 및 도 4를 참조하면, 처음에, 현재 상태 S는 0으로 설정되고 현재 브랜치 길이 L은 5로 설정되고, 이것은 "1" 에지를 따른 브랜치의 길이이다. "0"이 입력 I으로서 판독되면, 표 5에서 상태 0에 대한 행을 참고하고 5의 브랜치 길이가 출력 심볼 "E"에 매핑된다. 대안으로는, "1"이 판독되면, 표에는 매칭하는 조건이 없으며, 따라서, 상태 천이가 필요하지 않고, 디코더(100)는 도 4의 "상태 1"로 이동하는 것을 나타내기 위해 L을 감소시키고 가변 길이 코딩된 입력(10)의 다음 입력 심볼을 식별하는 것으로 진행한다. 다른 예로서, S가 0이고 L이 3이면, 시스템은 도 4에 도시된 바와 같이 "상태 2"에 암시적으로 있다. 이러한 경우에, I가 "0"이면, 룩업 동작은 위의 표 5에서 알 수 있는 바와 같이, 다음 S를 4이도록 식별한다.
동작(650)에서, 디코더(100)는 룩업 동작(640)의 결과가 출력 심볼인지를 결정한다. 그렇지 않은 경우에, 브랜치 길이 및/또는 상태는 동작(660)에서 업데이트되고(예를 들어, L은 감소되거나 감분될 수 있고, S는 상술한 바와 같이 룩업 테이블에 따라 필요한 경우에 업데이트될 수 있음), 디코더는 가변 길이 코딩된 입력(10)에서 다음 심볼을 식별하기 위해 동작(630)으로 복귀한다.
룩업 동작의 결과가 출력 심볼인 경우에, 그 출력 심볼은 출력 심볼들(20)의 일부로서 동작(670)에서 디코더(100)로부터 출력된다. 동작(680)에서, 디코더(100)는 수신된 가변 길이 코딩된 입력(10)에서 프로세싱할 더 많은 심볼들이 존재하는지를 결정한다. 그러한 경우에, 디코더(100)는 디코더(100)를 그것의 초기 상태 S 및 초기 브랜치 길이 L로 리셋하고 가변 길이 코딩된 입력(10)을 디코딩하는 것을 진행하도록 동작(620)으로 복귀한다. 가변 길이 코딩된 입력(10)에 더 많은 심볼들이 존재하지 않으면, 디코더(100)는 디코딩 프로세스를 종료한다.
본 발명의 일부 실시예들에서, 출력 심볼들이 코드북에 의해 부분적으로 설명될 수 있으면 유사한 출력 상태들이 그룹화될 수 있다. 이러한 실시예들에서, 트리의 일부의 심볼들의 출력 그룹들은 출력 심볼들을 하나씩 열거하는 것 보다는 공식으로서 표현된다. 서술적 공식이 충분히 단순한 경우와 같이 일부 환경들에서, 서술적 공식이 상태들의 열거 보다 적은 프로세싱 하드웨어의 게이트들을 요구할 수 있어서, 하드웨어 비용이 더 감소될 수 있다.
예를 들어, 위의 표 5에 나타낸 실시예에서, 상태 4에서, 3개의 가능한 출력 심볼들: B, C 및 D가 존재한다. 이들 심볼들 중 하나가 결국 출력된다는 것이 다음 이진 코드 심볼 I 및 브랜치 길이(L) 또는 쌍(I, L)에 의해 결정된다. 상태 4로부터, 쌍(I, L)은 출력 심볼들 "B", "C", 및 "D" 각각에 대해 3개의 가능한 값들: (0,0), (0,1), 및 (1,0)을 취할 수 있다. 더욱 상세하게는, 상태 4에서, 브랜치 길이 L은 또 다른 넌-리프 상태(상태 7)가 현재 브랜치에 존재하기 때문에 1이고, I가 "0"일 때, 출력 노드 C로의 천이가 취해진다. 따라서, "C"는 쌍(I, L), 쌍(0, 1)에 의해 표현된다. 유사하게는, L이 0일 때, 브랜치에 더 많은 넌-리프 상태들이 존재하지 않기 때문에 상태 머신은 도 4의 상태 7에 암시적으로 있다. 상태 7로부터, I가 "0"이면, 출력 심볼은 "B"이고, I가 "1"이면, 출력 심볼은 "D"이다. 따라서, "B"는 (0,0)으로서 표현될 수 있고, "D"는 (1,0)으로서 표현될 수 있다.
따라서, 상태 4로부터의 출력 상태들은, 심볼들 C = B+1 및 D = B+2를 가정하여, 연관된 공식 B+L+(I*2)으로서 표현(또는 공식화)될 수 있다. 유사하게, 상태 6은 G = F+1을 가정하여 공식 F+1과 연관될 수 있다(또는 F+1로서 공식화될 수 있다).
상태들(또는 공식들)의 이들 공식화된 표현들은 디코더(100)에 의해 직접 인코딩될 수 있어서, 최적화되지 않은 코드북 보다 적은 표 엔트리들이 저장되기 때문에 디코딩을 구현하는데 더 적은 게이트들을 요구한다.
도 7은 [표 6] 내지 [표 9]에 나타낸 코드북과 연관된 본 발명의 일 실시예에 따른 고정된 블록 데이터 사이즈에 대한 가변 길이 코드를 디코딩하는 방법(700)을 예시하는 플로우차트이고, 여기서, 일 실시예에 따른 상태 천이들이 [표 10] 및 [표 11]에 나타나 있다.
Run(런) |
Mag
(크기) |
bits
(비트들) |
코드 |
0 | 1 | 2 | 00 |
0 | 2 | 2 | 01 |
0 | 0 | 3 | 110 |
0 | 3 | 3 | 100 |
0 | 4 | 3 | 101 |
0 | 5 | 4 | 1110 |
1 | 1 | 6 | 111100 |
1 | 0 | 7 | 1111010 |
1 | 2 | 7 | 1111011 |
0 | 6 | 7 | 1111100 |
0 | 7 | 7 | 1111101 |
EOB | 7 | 1111111 | |
1 | 3 | 9 | 111111000 |
1 | 4 | 10 | 1111110010 |
1 | 5+ | 10 | 1111110011 |
2 | 1 | 10 | 1111110100 |
2 | 0 | 11 | 11111101010 |
2 | 2 | 11 | 11111101011 |
0 | 8 | 11 | 11111101100 |
2 | 3 | 12 | 111111011010 |
2 | 4 | 12 | 111111011011 |
2 | 5+ | 12 | 111111011100 |
3 | 0+ | 12 | 111111011101 |
4 | 0+ | 12 | 111111011110 |
5+ | 0+ | 12 | 111111011111 |
허프만 표들의 예- 저 빈도 계수들 (1-14)
Extra(여분) | R5+ | |
run(런) 5+ | bits | |
5 | +2 | 10 |
6,7 | +3 | 11x |
8,...,15 | +4 | 0xxx |
Extra(여분) | M0+ | |
mag(크기) | bits | |
0 | +1 | 0 |
1 | +2 | 10 |
2 | +3 | 110 |
3 | +5 | 11100 |
4 | +5 | 11101 |
5+ | +4 | 1111 |
Extra(여분) | M5+ | |
mag(크기) 5+ | bits | |
5 | +2 | 00 |
6 | +2 | 01 |
7 | +2 | 10 |
8 | +2 | 11 |
허프만 표들의 예- 저 빈도 계수들 (1-14)
Run(런) | Mag(크기) |
new bits
(새로운 비트들) |
code(코드) |
0 | 0 | 1 | 0 |
0 | 1 | 2 | 10 |
1 | 0 | 3 | 110 |
2 | 0 | 5 | 11100 |
1 | 1 | 5 | 11101 |
3 | 0 | 6 | 111100 |
0 | 2 | 6 | 111101 |
2 | 1 | 6 | 111110 |
4 | 0 | 8 | 11111100 |
1 | 2 | 9 | 111111010 |
3 | 1 | 9 | 111111011 |
2 | 2 | 9 | 111111101 |
EOB | 9 | 111111111 | |
5+ | 0+ | 9 | 111111110 |
4 | 1 | 10 | 1111111000 |
0 | 3 | 11 | 11111110010 |
3 | 2 | 13 | 1111111001100 |
1 | 3+ | 13 | 1111111001101 |
0 | 4 | 14 | 11111110011100 |
0 | 5 | 15 | 111111100111010 |
0 | 6 | 15 | 111111100111011 |
4 | 2 | 15 | 111111100111100 |
2 | 3+ | 15 | 111111100111101 |
3 | 3+ | 15 | 111111100111110 |
4 | 3+ | 15 | 111111100111111 |
허프만 표들의 예- 고 빈도 계수들 (>14)
Extra(여분) | R5+ | |
run(런) 5+ | bits | |
5 | 2 | 00 |
6,7 | 3 | 01x |
8,...15 | 6 | 100xxx |
16,...31 | 7 | 101xxxx |
32,...63 | 8 | 110xxxxx |
64,...127 | 10 | 1110xxxxxx |
128,...255 | 11 | 1111xxxxxxx |
Extra(여분) | M0+ | |
mag(크기) | bits | |
0 | 1 | 0 |
1 | 2 | 10 |
2 | 3 | 110 |
3+ | 3 | 111 |
Extra(여분) | M3+ | |
mag(크기) 3+ | bits | |
3 | 1 | 0 |
4 | 2 | 10 |
5 | 3 | 110 |
6 | 3 | 111 |
허프만 표들의 예- 고 빈도 계수들 (>14)
입력 데이터 | 출력 데이터 | |||||||
S | I | R | L | V | S | O | C | |
+0 | 0 | 0 | - | L-1 | = |
1 if
L=0
0 else |
0
0 |
-
- |
+1 | 0 | 1 | = | L-1 | V+2 L | |||
+0 | 1 | 0 | = | - | = | 100 | 1 | 14 |
+1 | 1 | 1 | = | - | -V |
예시적인 상태 천이 표- 언팩 DC 계수
입력 데이터 | 출력 데이터 | ||||||||
S | I | R | L | V | S | O | C | ||
0 | 100 | 0 | - | - | - | 101 | 0 | = | |
1 | 100 | 1 | - | - | - | 102 | 0 | = | |
00 | 101 | 0 | 0 | 0-Q | 2 | 198/199 | 0 | C-1 | |
01 | 101 | 1 | 0 | 1-Q | 4 | 198/199 | 0 | C-1 | |
10 | 102 | 0 | - | - | - | 103 | 0 | = | |
11 | 102 | 1 | - | - | - | 104 | 0 | = | |
100 | 103 | 0 | 0 | 2-Q | 8 | 198/199 | 0 | C-1 | |
101 | 103 | 1 | 0 | 3-Q | 16 | 198/199 | 0 | C-1 | |
110 | 104 | 0 | 0 | - | 1 | 199 | 0 | C-1 | |
111 | 104 | 1 | - | - | - | 105 | 0 | = | |
1110 | 105 | 0 | 0 | 4-Q | 32 | 198 | 0 | C-1 | |
1111 | 105 | 1 | - | - | - | 106 | 0 | = | |
11110 | 106 | 0 | - | - | - | 107 | 0 | = | |
11111 | 106 | 1 | - | - | - | 109 | 0 | = | |
111100 | 107 | 0 | 1 | 0-Q | 2 | 198/199 | 0 | C-2 | |
111101 | 107 | 1 | - | - | - | 108 | 0 | = | |
1111010 | 108 | 0 | 1 | - | 1 | 199 | 0 | C-2 | |
1111011 | 108 | 1 | 1 | 1-Q | 4 | 198/199 | 0 | C-2 | |
111110 | 109 | 0 | - | - | - | 110 | 0 | = | |
111111 | 109 | 1 | - | - | - | 111 | 0 | = | |
1111100 | 110 | 0 | 0 | 5-Q | 64 | 198 | 0 | C-1 | |
1111101 | 110 | 1 | 0 | 6-Q | 128 | 198 | 0 | C-1 | |
1111110 | 111 | 0 | - | - | - | 112 | 0 | = | |
1111111 | 111 | 1 | 254 | 0 | - | 200 | 1 | 225 | |
11111100 | 112 | 0 | - | - | - | 113 | 0 | = | |
11111101 | 112 | 1 | - | - | - | 115 | 0 | = | |
111111000 | 113 | 0 | 1 | 2-Q | 8 | 198/199 | 0 | C-2 | |
111111001 | 113 | 1 | - | - | - | 114 | 0 | = | |
1111110010 | 114 | 0 | 1 | 3-Q | 16 | 198/199 | 0 | C-2 | |
1111110011 | 114 | 1 | 1 | - | - | 150 | 0 | C-2 | |
111111010 | 115 | 0 | - | - | - | 116 | 0 | = | |
111111011 | 115 | 1 | - | - | - | 118 | 0 | = | |
1111110100 | 116 | 0 | 2 | 0-Q | 2 | 198/199 | 0 | C-3 | |
1111110101 | 116 | 1 | - | - | - | 117 | 0 | = | |
11111101010 | 117 | 0 | 2 | - | 1 | 199 | 0 | C-3 | |
11111101011 | 117 | 1 | 2 | 1-Q | 4 | 198/199 | 0 | C-3 | |
1111110110 | 118 | 0 | - | - | - | 119 | 0 | = | |
1111110111 | 118 | 1 | - | - | - | 121 | 0 | = | |
11111101100 | 119 | 0 | 0 | 7-Q | 256 | 198 | 0 | C-1 | |
11111101101 | 119 | 1 | - | - | - | 120 | 0 | = | |
111111011010 | 120 | 0 | 2 | 2-Q | 8 | 198/199 | 0 | C-3 | |
111111011011 | 120 | 1 | 2 | 3-Q | 16 | 198/199 | 0 | C-3 | |
11111101110 | 121 | 0 | - | - | - | 122 | 0 | = | |
11111101111 | 121 | 1 | - | - | - | 123 | 0 | = | |
111111011100 | 122 | 0 | 2 | - | - | 150 | 0 | C-3 | |
111111011101 | 122 | 1 | 3 | - | - | 140 | 0 | C-4 | |
111111011110 | 123 | 0 | 4 | - | - | 140 | 0 | C-5 | |
111111011111 | 123 | 1 | - | - | - | 124 | 0 | = | |
1111110111110 | 124 | 0 | 8 | - | 2 | 130 | 0 | = | |
1111110111111 | 124 | 1 | - | - | - | 125 | 0 | = | |
11111101111100 | 125 | 0 | 5 | - | - | 140 | 0 | C-6 | |
11111101111101 | 125 | 1 | 6 | - | 0 | 130 | 0 | = | |
+0 | 130 | 0 | = | - | V-1 |
if V=
0: 140
else: 130 |
0
0 |
C-R-1
= |
|
+1 | 130 | 1 | R+2 V | - | V-1 | ||||
+0 | 140 | 0 | = | - | 1 | 199 | 0 | = | |
+1 | 140 | 1 | = | - | - | 141 | 0 | = | |
+10 | 141 | 0 | = | 0-Q | 2 | 198/199 | 0 | = | |
+11 | 141 | 1 | = | - | - | 142 | 0 | = | |
+110 | 142 | 0 | = | 1-Q | 4 | 198/199 | 0 | = | |
+111 | 142 | 1 | = | - | - | 143 | 0 | = | |
+1110 | 143 | 0 | = | - | - | 144 | 0 | = | |
+1111 | 143 | 1 | = | - | - | 150 | 0 | = | |
+11100 | 144 | 0 | = | 2-Q | 8 | 198/199 | 0 | = | |
+11101 | 144 | 1 | = | 3-Q | 16 | 198/199 | 0 | = | |
+0 | 150 | 0 | = | - | - | 151 | 0 | = | |
+1 | 150 | 1 | = | - | - | 152 | 0 | = | |
+00 | 151 | 0 | = | 4-Q | 32 | 198 | 0 | = | |
+01 | 151 | 1 | = | 5-Q | 64 | 198 | 0 | = | |
+10 | 152 | 0 | = | 6-Q | 128 | 198 | 0 | = | |
+11 | 152 | 1 | = | 7-Q | 256 | 198 | 0 | = | |
+0 | 198 | 0 | = | L-1 | - |
if L=
0: 199
else: 198 |
0
0 |
=
= |
|
+1 | 198 | 1 | = | L-1 | V+2 L+Q | ||||
+0 | 199 | 0 | = | - | = |
if C=
0: 200
else: 100 |
1
1 |
225
= |
|
+1 | 199 | 1 | = | - | -V | ||||
0 | 200 | 0 | 0 | - | 1 | 299 | 0 | C-1 | |
1 | 200 | 1 | - | - | - | 201 | 0 | = | |
10 | 201 | 0 | 0 | 0-Q | 2 | 298/299 | 0 | C-1 | |
11 | 201 | 1 | - | - | - | 202 | 0 | = | |
110 | 202 | 0 | 1 | - | 1 | 299 | 0 | C-2 | |
111 | 202 | 1 | - | - | - | 203 | 0 | = | |
1110 | 203 | 0 | - | - | - | 204 | 0 | = | |
1111 | 203 | 1 | - | - | - | 205 | 0 | = | |
11100 | 204 | 0 | 2 | - | 1 | 299 | 0 | C-3 | |
11101 | 204 | 1 | 1 | 0-Q | 2 | 298/299 | 0 | C-2 | |
11110 | 205 | 0 | - | - | - | 206 | 0 | = | |
11111 | 205 | 1 | - | - | - | 207 | 0 | = | |
111100 | 206 | 0 | 3 | - | 1 | 299 | 0 | C-4 | |
111101 | 206 | 1 | 0 | 1-Q | 4 | 298/299 | 0 | C-1 | |
111110 | 207 | 0 | 2 | 0-Q | 2 | 298/299 | 0 | C-3 | |
111111 | 207 | 1 | - | - | - | 208 | 0 | = | |
1111110 | 208 | 0 | - | - | - | 209 | 0 | = | |
1111111 | 208 | 1 | - | - | - | 211 | 0 | = | |
11111100 | 209 | 0 | 4 | - | 1 | 299 | 0 | C-5 | |
11111101 | 209 | 1 | - | - | - | 210 | 0 | = | |
111111010 | 210 | 0 | 1 | 1-Q | 4 | 298/299 | 0 | C-2 | |
111111011 | 210 | 1 | 3 | 0-Q | 2 | 298/299 | 1 | C-4 | |
11111110 | 211 | 0 | - | - | - | 212 | 0 | = | |
11111111 | 211 | 1 | - | - | - | 213 | 0 | = | |
111111100 | 212 | 0 | - | - | - | 214 | 0 | = | |
111111101 | 212 | 1 | 2 | 1-Q | 4 | 298/299 | 0 | C-3 | |
111111110 | 213 | 0 | - | - | - | 224 | 0 | = | |
111111111 | 213 | 1 | 255 | 8 | - | 0 | 1 | - | |
1111111000 | 214 | 0 | 4 | 0-Q | 2 | 298/299 | 0 | C-5 | |
1111111001 | 214 | 1 | - | - | - | 215 | 0 | = | |
11111110010 | 215 | 0 | 0 | 2-Q | 8 | 298/299 | 0 | C-1 | |
11111110011 | 215 | 1 | - | - | - | 216 | 0 | = | |
111111100110 | 216 | 0 | - | - | - | 217 | 0 | = | |
111111100111 | 216 | 1 | - | - | - | 218 | 0 | = | |
1111111001100 | 217 | 0 | 3 | 1-Q | 4 | 298/299 | 0 | C-4 | |
1111111001101 | 217 | 1 | 1 | - | - | 250 | 0 | = | |
1111111001110 | 218 | 0 | - | - | - | 219 | 0 | = | |
1111111001111 | 218 | 1 | - | - | - | 221 | 0 | = | |
11111110011100 | 219 | 0 | 0 | 3-Q | 16 | 298/299 | 0 | C-1 | |
11111110011101 | 219 | 1 | - | - | - | 220 | 0 | = | |
111111100111010 | 220 | 0 | 0 | 4-Q | 32 | 298/299 | 0 | C-1 | |
111111100111011 | 220 | 1 | 0 | 5-Q | 64 | 298/299 | 0 | C-1 | |
11111110011110 | 221 | 0 | - | - | - | 222 | 0 | = | |
11111110011111 | 221 | 1 | - | - | - | 223 | 0 | = | |
111111100111100 | 222 | 0 | 4 | 1-Q | 4 | 298/299 | 0 | C-5 | |
111111100111101 | 222 | 1 | 2 | - | - | 250 | 0 | C-3 | |
111111100111110 | 223 | 0 | 3 | - | - | 250 | 0 | C-4 | |
111111100111111 | 223 | 1 | 4 | - | - | 250 | 0 | C-5 | |
1111111100 | 224 | 0 | - | - | - | 225 | 0 | = | |
1111111101 | 224 | 1 | - | - | - | 226 | 0 | = | |
11111111000 | 225 | 0 | 5 | - | - | 240 | 0 | C-6 | |
11111111001 | 225 | 1 | 6 | - | 0 | 230 | 0 | = | |
11111111010 | 226 | 0 | - | - | - | 227 | 0 | = | |
11111111011 | 226 | 1 | - | - | - | 228 | 0 | = | |
111111110100 | 227 | 0 | 8 | - | 2 | 230 | 0 | = | |
111111110101 | 227 | 1 | 16 | - | 3 | 230 | 0 | = | |
111111110110 | 228 | 0 | 32 | - | 4 | 230 | 0 | = | |
111111110111 | 228 | 1 | - | - | - | 229 | 0 | = | |
1111111101110 | 229 | 0 | 64 | - | 5 | 230 | 0 | = | |
1111111101111 | 229 | 1 | 128 | - | 6 | 230 | 0 | = | |
+0 | 230 | 0 | = | - | V-1 |
if V=
0: 240
else: 230 |
0
0 |
C-R-1
= |
|
+1 | 230 | 1 | R+2 V | - | V-1 | ||||
+0 | 240 | 0 | = | 1 | 1 | 299 | 0 | = | |
+1 | 240 | 1 | = | - | - | 241 | 0 | = | |
+10 | 241 | 0 | = | 0-Q | 2 | 298/299 | 0 | = | |
+11 | 241 | 1 | = | - | - | 242 | 0 | = | |
+110 | 242 | 0 | = | 1-Q | 4 | 298/299 | 0 | = | |
+111 | 242 | 1 | = | - | - | 250 | 0 | = | |
+0 | 250 | 0 | = | 2-Q | 8 | 298/299 | 0 | = | |
+1 | 250 | 1 | = | - | - | 251 | 0 | = | |
+10 | 251 | 0 | = | 3-Q | 16 | 298/299 | 0 | = | |
+11 | 251 | 1 | = | - | - | 252 | 0 | = | |
+110 | 252 | 0 | = | 4-Q | 32 | 298/299 | 0 | = | |
+111 | 252 | 1 | = | 5-Q | 64 | 298/299 | 0 | = | |
+0 | 298 | 0 | = | L-1 | - |
if L=
0: 299
else: 298 |
0
0 |
=
= |
|
+1 | 298 | 1 | = | L-1 | V+2 L+Q | ||||
+0 | 299 | 0 | = | 8 | = |
if C=
0: 0
else: 200 |
1
1 |
=
= |
|
+1 | 299 | 1 | = | - | -V |
예시적인 상태 천이 표- 나머지 계수들에 대한 상태 천이들
(상태 198/199 또는 298/299에서, L≥0 이면 상태 198 또는 298이 선택된다.)
("-"는 임의의 값이 할당될 수 있다는 것을 나타내고, "="는 값이 변경없이 보존되어야 한다는 것을 나타낸다.)
(위 표에서 공식들로서 사용된 모든 값들은 이러한 상태내에서 변경되기 이전의 값들이어서, 순차적 상관이 가정되지 않는다.)
(변수들 중에서 일부 일반적인 관계들이 존재한다는 것에 유의한다:
o
V = 2M + 나머지들 = 2L+Q+1 + 나머지들.
o
C = C - R - 1.)
이러한 예시적인 코덱에서, 출력 심볼들은 제로-런들(현재 넌-제로 값 이전의 제로 계수들의 수)과 크기(넌-제로 계수들에 대한 비트들의 수)의 쌍들이다. 이것은 비트들의 고정된 사이즈 수(BSZ)로의 NUM 계수들의 압축을 허용한다.
디코더(100)는 초기 상태 S=0; 초기 상태 L=8; DC K=0에 대한 초기 설정; 초기 계수 인덱스 B=BSZ-1; 및 코딩된 블록 사이즈B를 설정함으로써 동작(702)에서 상태 머신을 초기화함으로써 시작하고, 여기서, K는 인덱스이고, BSZ는 블록 사이즈이며, B는 블록에 대한 나머지 비트들을 카운팅한 비트 카운터이다.
동작(704)에서, 다양한 트랙킹 변수들이 업데이트되고, 여기서, S는 상태, R은 제로 런들, V는 계수 값들, O는 출력 플래그, L은 log2(크기)이고, C는 계수 카운터이다. 동작(706)에서, 디코더(100)는 출력 플래그(O)가 설정되었는지를 결정한다. 그러한 경우에, 동작(708)에서, 디코더(100)는 제로 런들이 253을 초과하는지를 결정한다. 그러한 경우에, 동작(710)에서, K는 R이 254이면 15로 설정되고, K는 R이 255이면 NUM으로 설정된다. R이 253을 초과하지 않으면, 출력 심볼(K+R,V)은 동작 (712)에서 푸쉬 아웃되고, K는 K+R+1로 설정된다.
출력 플래그 O가 설정되지 않으면, 동작(714)에서, 디코더(100)는 B가 0인지(예를 들어, 블록에서의 모든 비트들이 판독되었는지를) 결정한다. 그러한 경우에, 디코더(100)는 동작(716)에서 블록의 종단(EOB) 포트에 대해 높은 펄스를 푸쉬하고, 여기서, 블록의 종단 신호가 현재 블록에 대해 디코딩이 행해졌다는 것을 나타내기 위해 사용된다. 그렇지 않은 경우에, 동작(718)에서, 디코더(100)는 B를 감분하고 동작(720)에서 다음 입력을 판독한다. 동작(722)에서, 디코더(100)는 K가 NUM 미만인지를 결정하고, 여기서, NUM은 계수들의 총 수이다. 그렇지 않은 경우에, 디코더(100)는 B가 0에 도달할 때까지 출력에 비트들을 패딩(pad)하기 위해 동작(716)으로 복귀한다. K가 NUM 미만이 아닌 경우에, 디코더는 상태 머신을 업데이트하기 위해 동작(704)으로 복귀하고 다른 사이클로 진행한다.
여기에 설명한 본 발명의 실시예들에 따른 디코더 및/또는 임의의 다른 관련 디바이스들 또는 컴포넌트들은 임의의 적합한 하드웨어, 펌웨어(예를 들어, 응용 주문형 집적 회로), 소프트웨어, 또는 소프트웨어, 펌웨어, 및 하드웨어의 적합한 조합을 활용하여 구현될 수 있다. 예를 들어, 디코더(100)의 다양한 컴포넌트들은 하나의 집적 회로(IC) 칩 또는 개별 IC 칩들상에 형성될 수 있다. 또한, 디코더(100)의 다양한 컴포넌트들은 플렉시블 인쇄 회로 필름, 테이프 캐리어 패키지(TCP), 인쇄 회로 보드(PCB)상에 구현될 수 있거나, 디코더(100)와 동일한 기판상에 형성될 수 있다. 또한, 디코더의 다양한 컴포넌트들은 하나 이상의 프로세서들상에 구동하고 하나 이상의 컴퓨팅 디바이스들에서 구동하고, 컴퓨터 프로그램 명령들을 실행하며, 여기에 설명하는 다양한 기능들을 수행하는 다른 시스템 컴포넌트들과 상호작용하는 프로세스 또는 쓰레드일 수 있다. 컴퓨터 프로그램 명령들은 예를 들어, 랜덤 액세스 메모리(RAM)와 같은 표준 메모리 디바이스를 사용하여 컴퓨팅 디바이스에서 구현될 수 있는 메모리에 저장된다. 컴퓨터 프로그램 명령들은 예를 들어, CD-ROM, 플래시 드라이브 등과 같은 다른 비일시적 컴퓨터 판독가능 매체에 또한 저장될 수 있다. 또한, 통상의 기술자는 본 발명의 예시적인 실시예들의 범위를 벗어나지 않고, 다양한 컴퓨팅 디바이스들의 기능이 단일 컴퓨팅 디바이스로 조합되거나 집적될 수 있거나, 특정한 컴퓨팅 디바이스의 기능이 하나 이상의 다른 컴퓨팅 디바이스들에 걸쳐 분산될 수 있다는 것을 인식해야 한다.
본 발명을 특정한 예시적인 실시예들과 관련하여 설명하였지만, 본 발명이 개시된 실시예들에 한정되는 것이 아니라, 반대로, 첨부된 청구항들, 및 그것의 등가물들의 사상 및 범위내에 포함되는 다양한 변경물들 및 등가 장치들을 커버하도록 의도된다는 것을 이해해야 한다.
Claims (20)
- 복수의 이진 코드 심볼들을 포함하는 가변 길이 코딩된 입력을 출력 심볼로 디코딩하는 방법으로서,
프로세서 및 복수의 상태들을 포함하는 룩업 테이블을 저장하는 메모리를 포함하는 디코더가, 현재 상태를 초기 상태로 설정하고 현재 브랜치 길이를 초기 브랜치 길이로 설정하는 단계; 및
상기 룩업 테이블을 이용하여 상기 디코더가, 현재 상태, 현재 브랜치 길이, 및 상기 가변 길이 코딩된 입력의 다음 이진 코드 심볼에 기초하여 다음 상태 또는 상기 출력 심볼들 중 일 심볼을 식별하는 단계를 포함하는, 가변 길이 코딩된 입력을 디코딩하는 방법. - 제1항에 있어서,
상기 다음 상태가 식별될 때,
상기 디코더가 상기 현재 상태를 상기 다음 상태로 업데이트하는 단계;
상기 디코더가 상기 현재 브랜치 길이를 업데이트하는 단계;
상기 디코더가 상기 가변 길이 코딩된 입력의 상기 다음 이진 코드 심볼을 업데이트하는 단계; 및
상기 디코더가 상기 업데이트된 현재 상태, 상기 업데이트된 현재 브랜치 길이, 및 상기 가변 길이 코딩된 입력의 상기 업데이트된 다음 이진 코드 심볼에 기초하여 상기 다음 상태 또는 상기 출력 심볼들 중 상기 심볼을 식별하는 것을 반복하는 단계; 및
상기 출력 심볼들 중 상기 심볼이 식별될 때,
상기 디코더로부터 상기 출력 심볼들 중 상기 심볼을 출력하는 단계를 더 포함하는, 가변 길이 코딩된 입력을 디코딩하는 방법. - 제1항에 있어서,
상기 다음 상태 또는 심볼을 식별하는 단계는,
코드북을 나타내는 룩업 테이블에서 매칭 엔트리를 식별하는 단계를 포함하고, 상기 코드북은 이진 코드 심볼들의 복수의 시퀀스들을 복수의 출력 심볼들에 매핑하고, 상기 이진 코드 심볼들은 제 1 코드 심볼 및 제 2 코드 심볼을 포함하고,
상기 코드북은 복수의 브랜치들을 포함하는 이진 트리 표현을 갖고, 상기 브랜치들은 복수의 내부 노드들, 복수의 리프 노드들, 및 상기 노드들 사이의 복수의 에지들을 포함하고, 각 에지는 상기 제 1 코드 심볼 및 상기 제 2 코드 심볼 중 하나와 연관되고,
상기 내부 노드들 각각은 상기 제 1 코드 심볼과 연관되고 제 1 브랜치에 연결된 제 1 에지 및 상기 제 2 코드 심볼과 연관되고 제 2 브랜치에 연결된 제 2 에지와 연관되며,
상기 제 1 브랜치의 브랜치 길이는 상기 제 2 브랜치의 브랜치 길이보다 긴, 가변 길이 코딩된 입력을 디코딩하는 방법. - 제1항에 있어서,
상기 다음 상태 또는 심볼을 식별하는 단계는,
상기 현재 상태에 대응하는 공식을 식별하는 단계; 및
상기 현재 상태에 대응하는 상기 공식, 상기 현재 브랜치 길이, 및 상기 다음 이진 코드 심볼에 기초하여 상기 출력 심볼들 중 상기 심볼을 식별하는 단계를 포함하는, 가변 길이 코딩된 입력을 디코딩하는 방법. - 제1항에 있어서,
상기 프로세서는 상기 복수의 상태들 각각에 대해 사용된 공통 모듈을 구현하는, 가변 길이 코딩된 입력을 디코딩하는 방법. - 제1항에 있어서,
상기 가변 길이 코딩된 입력은 런-렝스(run-length) 인코딩된 데이터이고, 상기 출력 심볼들은 제로 런들(zero runs) 및 크기(magnitude)의 쌍들인, 가변 길이 코딩된 입력을 디코딩하는 방법. - 제1항에 있어서,
직렬 링크로부터 상기 가변 길이 코딩된 입력을 수신하는 단계를 더 포함하는, 가변 길이 코딩된 입력을 디코딩하는 방법. - 제1항에 있어서,
상기 룩업 테이블은 브랜치 길이 및 이진 코딩된 심볼을 상기 다음 상태 또는 상기 출력 심볼들 중 상기 심볼에 매핑하는 복수의 룩업 테이블들을 포함하고, 상기 룩업 테이블들 각각은 상기 복수의 상태들의 상이한 상태에 대응하는, 가변 길이 코딩된 입력을 디코딩하는 방법. - 하드웨어 디코더상에 구현을 위해 코드북을 변경하는 방법으로서,
상기 코드북은 복수의 브랜치들을 포함하는 이진 트리 표현을 갖고, 상기 브랜치들은 복수의 내부 노드들, 복수의 리프 노드들, 및 상기 노드들 사이의 복수의 에지들을 포함하고, 각 에지는 제 1 코드 심볼 및 제 2 코드 심볼 중 하나와 연관되고, 각 브랜치는 적어도 하나의 리프 노드를 포함하고,
상기 방법은 상기 이진 트리에서의 각 내부 노드에 대해:
프로세서가, 상기 복수의 에지들 중 제 1 에지에 의해 상기 내부 노드에 연결된 제 1 브랜치 및 상기 복수의 에지들 중 제 2 에지에 의해 상기 내부 노드에 연결된 제 2 브랜치를 식별하는 단계 - 상기 제 1 에지는 상기 제 1 코드 심볼과 연관되고 상기 제 2 에지는 상기 제 2 코드 심볼과 연관됨 -;
상기 프로세서가 상기 제 1 브랜치의 길이를 결정하는 단계;
상기 프로세서가 상기 제 2 브랜치의 길이를 결정하는 단계;
상기 제 1 브랜치의 상기 길이가 상기 제 2 브랜치의 상기 길이 보다 클 때, 상기 프로세서가 상기 제 1 브랜치를 상기 제 1 코드 심볼과 연관된 상기 제 1 에지에 할당하고 상기 제 2 브랜치를 상기 제 2 코드 심볼과 연관된 상기 제 2 에지에 할당하는 단계;
상기 제 2 브랜치의 상기 길이가 상기 제 1 브랜치의 상기 길이 보다 클 때, 상기 프로세서가 상기 제 2 브랜치를 상기 제 1 코드 심볼과 연관된 상기 제 1 에지에 할당하고 상기 제 1 브랜치를 상기 제 2 코드 심볼과 연관된 상기 제 2 에지에 할당하는 단계; 및
상기 프로세서가 변경된 코드북을 출력하는 단계를 포함하는, 코드북을 변경하는 방법. - 제9항에 있어서,
상기 제 1 브랜치의 상기 길이를 결정하는 단계는 상기 프로세서가 상기 제 1 브랜치의 현재 노드와 리프 노드 사이의 내부 노드들의 최대 수를 결정하는 단계를 포함하며,
상기 제 2 브랜치의 상기 길이를 결정하는 단계는 상기 프로세서가 상기 제 2 브랜치의 현재 노드와 리프 노드 사이의 내부 노드들의 최대 수를 결정하는 단계를 포함하는, 코드북을 변경하는 방법. - 복수의 이진 코드 심볼들을 포함하는 가변 길이 코딩된 입력을 하나 이상의 출력 심볼들로 디코딩하는 시스템으로서,
프로세서 및 메모리를 포함하며,
상기 메모리는:
상태, 상기 가변 길이 코딩된 입력의 다음 이진 코드 심볼, 및 브랜치 길이를 다음 상태 또는 상기 하나 이상의 출력 심볼들 중 일 출력 심볼로 매핑하는 룩업 테이블; 및
상기 프로세서에 의해 실행될 때, 상기 프로세서로 하여금:
현재 상태를 초기 상태로 설정하게 하고 현재 브랜치 길이를 초기 브랜치 길이로 설정하게 하고;
상기 이진 코드 심볼들 중 일 이진 코드 심볼을 수신하게 하며;
현재 상태, 상기 이진 코드 심볼, 및 현재 브랜치 길이에 기초하여 상기 룩업 테이블을 사용하여 다음 상태 또는 출력 심볼을 식별하게 하는 명령들을 저장하는, 가변 길이 코딩된 입력을 디코딩하는 시스템. - 제11항에 있어서,
상기 메모리는 상기 프로세서에 의해 실행될 때, 상기 프로세서로 하여금:
상기 다음 상태가 식별될 때,
상기 다음 상태에 기초하여 상기 현재 상태를 업데이트하게 하고;
상기 현재 브랜치 길이를 업데이트하게 하며;
상기 다음 상태 또는 상기 출력 심볼을 식별하는 것을 반복하게 하며;
상기 출력 심볼이 식별될 때,
상기 출력 심볼을 출력하게 하는 명령들을 더 저장하는, 가변 길이 코딩된 입력을 디코딩하는 시스템. - 제11항에 있어서,
상기 메모리는 상기 프로세서에 의해 실행될 때, 상기 프로세서로 하여금:
코드북을 나타내는 룩업 테이블에서 매칭 엔트리를 식별하게 하는 명령들을 더 저장하고, 상기 코드북은 이진 코드 심볼들의 복수의 시퀀스들을 복수의 출력 심볼들에 매핑하고, 상기 이진 코드 심볼들은 제 1 코드 심볼 및 제 2 코드 심볼을 포함하고,
상기 코드북은 복수의 브랜치들을 포함하는 이진 트리 표현을 갖고, 상기 브랜치들은 복수의 내부 노드들, 복수의 리프 노드들, 및 상기 노드들 사이의 복수의 에지들을 포함하고, 각 에지는 상기 제 1 코드 심볼 및 상기 제 2 코드 심볼 중 하나와 연관되고,
상기 내부 노드들 각각은 상기 제 1 코드 심볼과 연관되고 제 1 브랜치에 연결된 제 1 에지 및 상기 제 2 코드 심볼과 연관되고 제 2 브랜치에 연결된 제 2 에지와 연관되며,
상기 제 1 브랜치의 브랜치 길이는 상기 제 2 브랜치의 브랜치 길이보다 긴, 가변 길이 코딩된 입력을 디코딩하는 시스템. - 제 11 항에 있어서,
상기 메모리는 상기 프로세서에 의해 실행될 때, 상기 프로세서로 하여금:
상기 현재 상태에 대응하는 공식을 식별하고;
상기 현재 상태에 대응하는 상기 공식, 상기 현재 브랜치 길이, 및 상기 다음 이진 코드 심볼에 기초하여 상기 출력 심볼들 중 상기 심볼을 식별함으로써 상기 다음 상태 또는 상기 심볼을 식별하게 하는 명령들을 더 저장하는, 가변 길이 코딩된 입력을 디코딩하는 시스템. - 제11항에 있어서,
상기 메모리는 상기 프로세서에 의해 실행될 때, 상기 프로세서로 하여금 복수의 상태들 각각에 대해 사용되는 공통 모듈을 구현하게 하는 명령들을 더 저장하는, 가변 길이 코딩된 입력을 디코딩하는 시스템. - 제11항에 있어서,
상기 가변 길이 코딩된 입력은 런-렝스(run-length) 인코딩된 데이터이고, 상기 출력 심볼들은 제로 런들(zero runs) 및 크기(magnitude)의 쌍들인, 가변 길이 코딩된 입력을 디코딩하는 시스템. - 제11항에 있어서,
직렬 링크를 더 포함하고, 상기 프로세서는 상기 직렬 링크로부터 상기 가변 길이 코딩된 입력을 수신하는, 가변 길이 코딩된 입력을 디코딩하는 시스템. - 제11항에 있어서,
상기 룩업 테이블은 브랜치 길이 및 이진 코딩된 심볼을 상기 다음 상태 또는 상기 출력 심볼들 중 상기 심볼에 매핑하는 복수의 룩업 테이블들을 포함하고, 상기 룩업 테이블들 각각은 복수의 상태들의 상이한 상태에 대응하는, 가변 길이 코딩된 입력을 디코딩하는 시스템. - 하드웨어 디코더상의 구현을 위해 코드북을 변경하는 시스템으로서,
프로세서 및 메모리를 포함하며,
상기 메모리는:
상기 코드북 - 상기 코드북은 복수의 브랜치들을 포함하는 이진 트리 표현을 갖고, 상기 브랜치들은 복수의 내부 노드들, 복수의 리프 노드들, 및 상기 노드들 사이의 복수의 에지들을 포함하고, 각 에지는 제 1 코드 심볼 및 제 2 코드 심볼 중 하나와 연관되고, 각 브랜치는 적어도 하나의 리프 노드를 포함함 -; 및
상기 프로세서에 의해 실행될 때, 상기 프로세서로 하여금:
상기 복수의 에지들 중 제 1 에지에 의해 상기 내부 노드에 연결된 제 1 브랜치 및 상기 복수의 에지들 중 제 2 에지에 의해 상기 내부 노드에 연결된 제 2 브랜치를 식별하게 하고 - 상기 제 1 에지는 상기 제 1 코드 심볼과 연관되고 상기 제 2 에지는 상기 제 2 코드 심볼과 연관됨 -;
상기 제 1 브랜치의 길이를 결정하게 하고;
상기 제 2 브랜치의 길이를 결정하게 하고;
상기 제 1 브랜치의 상기 길이가 상기 제 2 브랜치의 상기 길이 보다 클 때, 상기 제 1 브랜치를 상기 제 1 코드 심볼과 연관된 상기 제 1 에지에 할당하게 하고 상기 제 2 브랜치를 상기 제 2 코드 심볼과 연관된 상기 제 2 에지에 할당하게 하고;
상기 제 2 브랜치의 상기 길이가 상기 제 1 브랜치의 상기 길이 보다 클 때, 상기 제 2 브랜치를 상기 제 1 코드 심볼과 연관된 상기 제 1 에지에 할당하게 하고 상기 제 1 브랜치를 상기 제 2 코드 심볼과 연관된 상기 제 2 에지에 할당하게 하며;
변경된 코드북을 출력하게 하는 명령들을 저장하는, 코드북을 변경하는 시스템. - 제19항에 있어서,
상기 메모리는 상기 프로세서에 의해 실행될 때, 상기 프로세서로 하여금:
상기 제 1 브랜치의 상기 길이를 결정할 때, 상기 제 1 브랜치의 현재 노드와 리프 노드 사이의 내부 노드들의 최대 수를 결정하게 하며;
상기 제 2 브랜치의 상기 길이를 결정할 때, 상기 제 2 브랜치의 현재 노드와 리프 노드 사이의 내부 노드들의 최대 수를 결정하게 하는 명령들을 더 저장하는, 코드북을 변경하는 시스템.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462053708P | 2014-09-22 | 2014-09-22 | |
US62/053,708 | 2014-09-22 | ||
US14/836,900 US10090864B2 (en) | 2014-09-22 | 2015-08-26 | System and method for decoding variable length codes |
US14/836,900 | 2015-08-26 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160035553A true KR20160035553A (ko) | 2016-03-31 |
KR102381999B1 KR102381999B1 (ko) | 2022-04-01 |
Family
ID=55526741
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020150132699A KR102381999B1 (ko) | 2014-09-22 | 2015-09-18 | 가변 길이 코딩된 입력을 디코딩하는 방법 및 시스템, 그리고 코드북을 변경하는 방법 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10090864B2 (ko) |
KR (1) | KR102381999B1 (ko) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10727951B2 (en) | 2016-07-20 | 2020-07-28 | Nokia Of America Corporation | Low-complexity constellation shaping |
CN107527621A (zh) * | 2017-08-29 | 2017-12-29 | 中国民航大学 | 动态码本基于完全二叉树分组的语音信息隐藏算法 |
US11113176B2 (en) | 2019-01-14 | 2021-09-07 | Microsoft Technology Licensing, Llc | Generating a debugging network for a synchronous digital circuit during compilation of program source code |
US11144286B2 (en) | 2019-01-14 | 2021-10-12 | Microsoft Technology Licensing, Llc | Generating synchronous digital circuits from source code constructs that map to circuit implementations |
US11106437B2 (en) * | 2019-01-14 | 2021-08-31 | Microsoft Technology Licensing, Llc | Lookup table optimization for programming languages that target synchronous digital circuits |
US11093682B2 (en) | 2019-01-14 | 2021-08-17 | Microsoft Technology Licensing, Llc | Language and compiler that generate synchronous digital circuits that maintain thread execution order |
US11275568B2 (en) | 2019-01-14 | 2022-03-15 | Microsoft Technology Licensing, Llc | Generating a synchronous digital circuit from a source code construct defining a function call |
US11196594B2 (en) | 2019-02-28 | 2021-12-07 | Nokia Solutions And Networks Oy | Probabilistic signal shaping using multiple codebooks |
CN114222980A (zh) * | 2019-10-21 | 2022-03-22 | 深圳市欢太科技有限公司 | 耗电日志处理方法、装置、电子设备以及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR19980702675A (ko) * | 1995-12-28 | 1998-08-05 | 요트.게.아. 롤페즈 | 가변 길이 디코더 |
KR20040045842A (ko) * | 2001-10-17 | 2004-06-02 | 코닌클리케 필립스 일렉트로닉스 엔.브이. | 개선된 가변 길이 디코더 |
KR20040098631A (ko) * | 2002-01-22 | 2004-11-20 | 제너럴 인스트루먼트 코포레이션 | 디지털 비디오 컨텐트를 위한 적응적 범용 가변 길이코드워드 코딩 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5594742A (en) * | 1990-12-20 | 1997-01-14 | Communications Satellite Corporation | Bidirectional trellis coding |
US6877132B1 (en) * | 1999-06-11 | 2005-04-05 | Nortel Network Limited | Method and apparatus for channel decoding of tail-biting convolutional codes |
US7492726B2 (en) * | 2005-12-20 | 2009-02-17 | Palo Alto Research Center Incorporated | Method and apparatus for optimizing convergecast operations in a wireless sensor network |
US20070290899A1 (en) | 2006-06-19 | 2007-12-20 | Donald Martin Monro | Data coding |
KR100968373B1 (ko) | 2008-10-07 | 2010-07-09 | 주식회사 코아로직 | 가변장 부호 테이블 분할 방법 및 이를 이용한 멀티 코덱의메모리 공유 방법 및 장치 |
US8004431B2 (en) | 2008-12-09 | 2011-08-23 | Qualcomm Incorporated | Fast parsing of variable-to-fixed-length codes |
-
2015
- 2015-08-26 US US14/836,900 patent/US10090864B2/en active Active
- 2015-09-18 KR KR1020150132699A patent/KR102381999B1/ko active IP Right Grant
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR19980702675A (ko) * | 1995-12-28 | 1998-08-05 | 요트.게.아. 롤페즈 | 가변 길이 디코더 |
KR20040045842A (ko) * | 2001-10-17 | 2004-06-02 | 코닌클리케 필립스 일렉트로닉스 엔.브이. | 개선된 가변 길이 디코더 |
KR20040098631A (ko) * | 2002-01-22 | 2004-11-20 | 제너럴 인스트루먼트 코포레이션 | 디지털 비디오 컨텐트를 위한 적응적 범용 가변 길이코드워드 코딩 |
Also Published As
Publication number | Publication date |
---|---|
US10090864B2 (en) | 2018-10-02 |
US20160087651A1 (en) | 2016-03-24 |
KR102381999B1 (ko) | 2022-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102381999B1 (ko) | 가변 길이 코딩된 입력을 디코딩하는 방법 및 시스템, 그리고 코드북을 변경하는 방법 | |
US6844833B2 (en) | Methods and apparatus for constant-weight encoding and decoding | |
US11483009B2 (en) | Self-checking compression | |
US8094048B2 (en) | Method of decoding syntax element in context-based adaptive binary arithmetic coding decoder and decoding device therefor | |
US9998145B2 (en) | Data processing method and device | |
KR20090042775A (ko) | 데이터 코딩 | |
US20070115154A1 (en) | Method of decoding bin values using pipeline architecture and decoding device therefor | |
US9698819B1 (en) | Huffman code generation | |
US7292161B2 (en) | NB/MB coding apparatus and method using both disparity independent and disparity dependent encoded vectors | |
US20150208075A1 (en) | Memory management of motion vectors in high efficiency video coding motion vector prediction | |
CN107801044B (zh) | 后向适应装置与相关方法 | |
US7148821B2 (en) | System and method for partition and pattern-match decoding of variable length codes | |
KR20190019798A (ko) | 채널 편파 코드의 연속 제거 리스트 디코딩을 위한 효율적인 생존 메모리 아키텍처 | |
US10103747B1 (en) | Lossless binary compression in a memory constrained environment | |
US7924179B2 (en) | Variable-length code determining device and variable-length code decoding method | |
US9673836B1 (en) | System level testing of entropy encoding | |
KR20160116980A (ko) | Ldpc 복호기의 vss 알고리즘을 위한 h 행렬의 스케줄링 장치 및 그 방법 | |
EP0079442B1 (en) | Data translation apparatus translating between raw and compression encoded data forms | |
US9406364B2 (en) | Codec to reduce simultaneously switching outputs | |
US9787323B1 (en) | Huffman tree decompression | |
US20020036937A1 (en) | Semiconductor memory apparatus | |
US6778107B2 (en) | Method and apparatus for huffman decoding technique | |
US6580377B1 (en) | Huffman decoding using cascaded sub-table lookup method | |
Yokoo | On the stationary distribution of asymmetric numeral systems | |
TW201440046A (zh) | 解壓縮電路與相關的壓縮方法與解壓縮方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |