信息论实验报告一、实验要求掷骰子游戏,每次同时抛掷两枚骰子,将两枚骰子点数的和作为游戏结果,重复抛掷1000次(视为1000次信源符号输出)。要求:(1)对1000次游戏结果进行逐符号二进制定长编码和译码。(2)对1000次游戏结果进行逐符号二进制变长编码和译码(Huffman编码)。(3)比较上述两种编码的效率二、实验结果(1)对1000次游戏结果进行逐符号二进制定长编码和译码。1、随机游戏模拟的信源的熵2、产生的随机序列3、定长码编码译码结果:由于篇幅限制,仅截取部分编码结果:观察出译码正确。4、定长码编码效率:(2)对1000次游戏结果进行逐符号二进制变长编码和译码(Huffman编码)。1、随机游戏模拟的信源的熵:H(X)=3.2744bit/符号2、Huffman编码的码字结果:3、平均码长:l=3.3056bit4、部分序列编码、译码结果:信源序列:编码结果:译码结果:5、编码效率:(3)两者编码效率的比较:答:由MATLAB仿真实验的结果可以看出,定长码的编码效率是0.8186,而Huffman编码的效率是0.9906,明显看出Huffman编码的效率要高。三、实验代码(1)定长码的编码与译码:(2)Huffman编码译码部分:symbols=[2:12];p=[1/36,1/18,1/12,1/9,5/36,1/6,5/36,1/9,1/12,1/18,1/36];entropy=-p*log2(p.')source_len=1000;seq=randsrc(1,source_len,[2,3,4,5,6,7,8,9,10,11,12;1/36,1/18,1/12,1/9,5/36,1/6,5/36,1/9,1/12,1/18,1/36])b=dec2bin(seq)%定长编码,用4位二进制a=bin2dec(b)%定长译码,将二进制换成十进制数dcode_len=4;%定长码码长efficiency1=entropy/decode_lensymbols=[2:12];p=[1/36,1/18,1/12,1/9,5/36,1/6,5/36,1/9,1/12,1/18,1/36];entropy=-p*log2(p.')source_len=1000;seq=randsrc(1,source_len,[2,3,4,5,6,7,8,9,10,11,12;1/36,1/18,1/12,1/9,5/36,1/6,5/36,1/9,1/12,1/18,1/36])[dict,avg_len]=huffmandict(symbols,p)temp=dict;fori=1:length(temp)temp{i,2}=num2str(temp{i,2});endtempefficiency2=entropy/(avg_len)source_len=1000;seq=randsrc(1,source_len,[2,3,4,5,6,7,8,9,10,11,12;1/36,1/18,1/12,1/9,5/36,1/6,5/36,1/9,1/12,1/18,1/36])comp=huffmanenco(seq,dict);comp[s,codeseq_len]=size(comp)actual_avg_len=codeseq_len/source_lenactual_eta=entropy/(actual_avg_len)dcomp=huffmandeco(comp,dict);dcomp四、实验总结本实验通过MATLAB模拟掷骰子游戏,每次同时抛掷两枚骰子,将两枚骰子点数的和作为游戏结果,重复抛掷1000次(视为1000次信源符号输出)。然后通过定长编码译码和Huffman编码译码对信源进行处理,最后得到正确的编码译码结果,同时可以看出Huffman编码的效率比定长码高。由此可以看出在信源各符号出现的概率差别很大时,采用Huffman编码使平均码长最短,编码效率达到最佳。