주요 콘텐츠

huffmandeco

허프만 디코딩으로 이진 코드 디코딩

설명

sig = huffmandeco(code,dict)는 입력 코드 사전 dict에 설명된 허프만 코드를 사용하여 숫자형 허프만 코드 벡터 code를 디코딩합니다. 입력값 dictN×2 셀형 배열로, 여기서 Ncode로 인코딩하는 데 사용된, 원본 신호 내의 고유한 심볼의 개수입니다. dict의 첫 번째 열은 고유한 심볼을 표현하고 두 번째 열은 대응되는 코드워드를 표현합니다. 각 코드워드는 숫자형 행 벡터로 표현되며, dict의 어떠한 코드워드도 dict 내 다른 코드워드의 접두사가 될 수 없습니다. dicthuffmandict 함수를 사용하여 생성할 수 있고 codehuffmanenco 함수를 사용하여 생성할 수 있습니다. dict의 모든 심볼이 숫자형인 경우 출력값 sig는 벡터입니다. dict에 영문자 심볼이 하나라도 있는 경우 sig는 1차원 셀형 배열입니다.

예제

예제

모두 축소

고유한 심볼을 만들고 심볼에 발생 확률을 할당합니다. 심볼의 이진 표현에 필요한 최소 비트 개수를 결정합니다.

symbols = 1:6;
p = [.5 .125 .125 .125 .0625 .0625];
bps = ceil(log2(max(symbols)));      % Bits per symbol

심볼과 해당 확률을 기반으로 허프만 사전을 만듭니다.

dict = huffmandict(symbols,p);

랜덤 심볼로 구성된 벡터를 생성합니다.

inputSig = randsrc(100,1,[symbols;p]);

랜덤 심볼을 인코딩합니다.

code = huffmanenco(inputSig,dict);

데이터를 디코딩합니다. 디코딩된 심볼이 원래 심볼과 일치하는지 확인합니다.

sig = huffmandeco(code,dict);
isequal(inputSig,sig)
ans = logical
   1

원래 신호를 이진 신호로 변환하고 이진 심볼의 길이를 확인합니다.

binarySig = int2bit(inputSig,bps);
seqLen = numel(binarySig)
seqLen = 
300

허프만 인코딩 심볼을 이진 심볼로 변환하고 인코딩된 이진 심볼의 길이를 확인합니다.

binaryComp = int2bit(code,bps);
encodedLen = numel(binaryComp)
encodedLen = 
672

셀형 배열 형식으로 영숫자 심볼을 정의합니다.

inputSig = {'a2',44,'a3',55,'a1'}
inputSig=1×5 cell array
    {'a2'}    {[44]}    {'a3'}    {[55]}    {'a1'}

허프만 사전을 정의합니다. 신호 문자 코드는 숫자형이어야 합니다.

dict = {'a1',0; 'a2',[1,0]; 'a3',[1,1,0]; 44,[1,1,1,0]; 55,[1,1,1,1]}
dict=5×2 cell array
    {'a1'}    {[      0]}
    {'a2'}    {[    1 0]}
    {'a3'}    {[  1 1 0]}
    {[44]}    {[1 1 1 0]}
    {[55]}    {[1 1 1 1]}

영숫자 심볼을 인코딩합니다.

enco = huffmanenco(inputSig,dict);

데이터를 디코딩합니다. 디코딩된 심볼이 원래 심볼과 일치하는지 확인합니다.

sig = huffmandeco(enco,dict)
sig=1×5 cell array
    {'a2'}    {[44]}    {'a3'}    {[55]}    {'a1'}

isequal(inputSig,sig)
ans = logical
   1

입력 인수

모두 축소

허프만 코드로, 숫자형 벡터로 지정됩니다. 이 값은 huffmandict 함수로 생성된 코드 사전을 사용하여 인코딩된 허프만 코드여야 합니다.

데이터형: double

허프만 코드 사전으로, N×2 셀형 배열로 지정됩니다. N은 함수가 인코딩할 수 있는 고유한 심볼 개수입니다. dict의 첫 번째 열은 고유한 심볼을 표현하고 두 번째 열은 대응되는 코드워드를 표현합니다. 각 코드워드는 숫자형 행 벡터로 표현되며, dict의 어떠한 코드워드도 dict 내 다른 코드워드의 접두사가 될 수 없습니다. dicthuffmandict 함수를 사용하여 생성할 수 있습니다.

데이터형: double | cell

출력 인수

모두 축소

디코딩된 신호로, 숫자형 벡터, 숫자형 셀형 배열 또는 영숫자 셀형 배열로 반환됩니다.

  • 입력 코드 사전 dict의 모든 심볼이 숫자형인 경우 sig는 벡터입니다.

  • 입력 코드 사전 dict에 영문자 심볼이 하나라도 있는 경우 sig는 1차원 셀형 배열입니다.

참고 문헌

[1] Sayood, Khalid. Introduction to Data Compression. 2nd ed. San Francisco: Morgan Kaufmann Publishers, 2000.

확장 기능

모두 확장

버전 내역

R2006a 이전에 개발됨

모두 확장

참고 항목

함수

도움말 항목