Main Content

huffmanenco

허프만 인코딩으로 심볼 시퀀스 인코딩

설명

예제

code = huffmanenco(sig,dict)는 입력 코드 사전 dict에 설명된 허프만 코드를 사용하여 입력 신호 sig를 인코딩합니다. sig는 벡터, 셀형 배열 또는 영숫자 셀형 배열의 형식일 수 있습니다. sig가 셀형 배열인 경우 행이나 열이어야 합니다. dict는 N×2 셀형 배열입니다. 여기서 N은 인코딩할 수 있는 고유한 심볼 개수입니다. dict의 첫 번째 열은 고유한 심볼을 표현하고 두 번째 열은 대응되는 코드워드를 표현합니다. 각 코드워드는 행 벡터로 표현되며, dict의 코드워드는 dict 내 다른 코드워드의 접두사가 될 수 없습니다. dicthuffmandict 함수를 사용하여 생성할 수 있습니다.

예제

모두 축소

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

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

입력 인수

모두 축소

압축할 입력 신호로, 벡터, 셀형 배열 또는 영숫자 셀형 배열로 지정됩니다. sig는 벡터, 셀형 배열 또는 영숫자 셀형 배열의 형식일 수 있습니다. sig가 셀형 배열인 경우 1×S 또는 S×1 셀형 배열이어야 합니다. 여기서 S는 심볼 개수입니다.

데이터형: double | cell

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

데이터형: double | cell

출력 인수

모두 축소

입력 허프만 코드 사전 dict에 따라 인코딩된 신호로, 벡터로 반환됩니다.

참고 문헌

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

버전 내역

R2006a 이전에 개발됨

참고 항목

함수

도움말 항목