2012-04-26 3 views
1

Привет, У меня возникла проблема с кодировкой символьного сообщения 1000 с расширенным кодированием Хаффмана. У меня уже есть словарь. Мне просто нужно закодировать сообщение. Однако я не уверен, как это сделать. Есть идеи?Расширенное кодирование Хаффмана в Matlab

Я использую Matlab bdw.

+0

В каком формате у вас есть словарь и ваше сообщение? Эта информация была бы полезной для понимания вашей реализации кодирования Хаффмана. – nrz

+0

Вы можете проверить 'norm2huff' в коде здесь http://www.mathworks.com/matlabcentral/fileexchange/4900-huffman-code – petrichor

ответ

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 бита, а полученное десятичное значение сравнивалось со словарем. Затем было получено новое закодированное сообщение:

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