1

こんにちは、拡張ハフマン コーディングを使用して 1000 シンボル メッセージをエンコードする際に問題が発生しています。私はすでに辞書を持っています。メッセージをエンコードするだけです。ただし、これを行う方法がわかりません。何か案は?

私はMatlab bdwを使用しています。

4

1 に答える 1

2

使用したコードは次のとおりです。

%Extended Huffman 
prob=0.1;
m=4;

%Generating the probabilities

 for i = 1:2^m
   q(i) = 1;
    for j=0: m-1
      b=2^j;
      if bitand(i-1,b)
          q(i)= q(i)*prob;
      else 
          q(i)= q(i)*(1-prob);
     end
   end
end


disp ('Sum of probabilities');
disp (sum(q));

disp('Entropy per symbol');%should be equal to 1
E=sum(q.*log2(1./q));

disp(E/m); 


%huffman 

s=0:2^m-1; %There are 16 symbols from 0000 -> 1111
[dict,avglen] = huffmandict(s,q); %probabilities 

拡張ハフマンに対してこのアプローチを試してみましたが、メッセージサイズは減少しましたが、それほどではなく、それが正しいアプローチであるかどうかはわかりません。メッセージは最初に 4 ビットに分割され、得られた 10 進数の値が辞書と比較されました。次に、新しいエンコードされたメッセージが取得されました。

for j=(0:4:1000-1)
    newcode=message(j+1:j+4); %Dividing the message into 4 bits and saving the     
                              %corresponding decimal values
   array(:,a)=bi2de(newcode);
   a=a+1;
end

 for(f=1:250)
   for(i=1:15)
     if(array(f)==cell2mat((dict(i,1)))) %cell2mat will obtain the value of the cell
     encodedmsg= horzcat(encodedmsg, dict(i,2)); %horzcat will concatenate the array                    with its corresponding codeword
  end
 end
end
于 2012-04-29T10:41:59.433 に答える