信息论综合性实验报告 Huffman编码及译码 代码

时间:2025-04-30

里面有完整的实验报告及代码

Xx大学yy学院 综合性设计性实验报告

专 业 班 级:

学 号 :

姓 名:实验所属课程:实验室(中心):

指 导 教 师 :

实验完成时间: 信息论与编码技术 信息科学与工程学院软件中心 2012 年 12 月 9 日

里面有完整的实验报告及代码

一、 设计题目:

Huffman编码及译码

二、 实验内容及要求:

<一>实验内容:对所给的字符串进行huffman的编译码;译码对应原始序列,在将编码

进行移位操作时,再进行译码输出,得出误码率。 <二>实验要求:自己设计一段信源序列,利用Huffman编码对其进行编码,然后利用相

应的译方法进行译码,同时考察译码错误对后续序列带来的影响。

三、 实验过程(详细设计):

<一> huffman编码原理:

Huffman编码是一种紧致编码,但编码序列的码并非是唯一的。它是根据源数据各信号发生的概率进行编码,在源数据中出现的概率越大的信号,分配的码字越短;出现概率越小的信号,其码字越长,从而达到用尽可能少的码字表示源数据的目的。 Huffman编码的步骤如下:设信源X有m个符号(消息),信源概率分布如下: X x1, x2 ,..., xm p1 2 ,..., pm

( )把信源 X 中的消息按概率从大到小的顺序排列;

(2)把最后两个出现概率最小的消息合并成一个消息,从而使信源的消息数减少,并同时再按信源符号(消息)出现的概率从大到小排列;

(3)重复上述 2 个步骤,直到信源最后为一个序列只有一个1; (4)将被整合的消息分别赋予 1 和 0,并对最后的两个消息也相应地赋予 1 和 0. (5)通过以上步骤即可完成编码操作。 <二> huffman译码原理:

通过在刚开始生成的随机编码序列,得到列出的0 1 序列与源字符串一一对应,就完成了译码。而对错位后的编码序列,我只是只错位了前两个进行译码,效果不是很明显。

<三>算法设计:

1、编码部分:

里面有完整的实验报告及代码

(1)主函数主要用于调用前面所编写的各个函数模块,按照主函数(主函数代码如下)所列出来的调用顺序,进行一一叙述。

function []=huffmanmain()

disp('请输入待编码序列');

s=input('','s');%调用概率统计函数,输出各码元的概率分布矩阵;

pro=getpro(s);%调用生成huffmantree函数,输出基本树,及完整huffmantree; [HuffmanTree,pro2]=huffmantree(pro);%调用编码函数,输出码表,编码序列平

均码长,信息熵,编码效率;

[Codenumber,huffmantable,Code2]=huffmanencode221(HuffmanTree,pro2,s); %调用译码函数,输出译码序列以及误码率;

decodenumber=huffmandecode221(Codenumber,huffmantable,Code2,pro2,

s); %调用函数,使编码序列中的0 1错位

Codenumber1=yiweicodenumber(Codenumber); %调用译码函数,对错位后的编码

序列进行译码

decodenumber=huffmandecode(Codenumber1,huffmantable,Code2,pro2,s);

(2)通过编写函数pro=getpro(s)函数来完成对字符串中的各字符的统计,并列出其概

率分布矩阵,返回pro矩阵,其主要代码如下: for i=1:b %进行概率计算; for j=1:a

if S(i)==s(j) c(i)=c(i)+1; else continue; end; end; end;

pro=c./a;

(3)由

Huffman 编码要求,得到的概率分布矩阵要按照从大到小得顺序来排列,

所以需要编写函数来得到顺序排列的概率分布矩阵。我们需要从 pro(1,:)中找到两个最小的概率值,所以需要编写找出两个最小值的函数[min1,min2]=getmin(tree),其中 tree 是在进行 Huffman 编码过程中产生的 Huffman 树(包含 pro 信息,具体下面介绍),并且在 min1 与 min2 中若两者值相等,则在 pro 中概率序号在前的概率值赋予min1,概率序号在后的概率值赋予 min2,详细说明见其下面的代码注释;此部分函数代码主要如下:

LL=length(pro1); %构建基础二叉树

[p1,p2]=sort(pro1,'descend'); pro2=zeros(2,LL); pro2(1,:)=p1; pro2(2,:)=p2; n0=size(pro2,2);

n1=ceil(log2(n0)); %二叉树的深度; n=LL;

tree=ones(6,2*n-1); %建立其6*2*n-1的单位1矩阵,用以存储二叉树中各个结

点,父节点,以及各个结点的编号;

tree(1,:)=1:(2*n-1); %用以编号并存储二叉树中的结点; tree(5,(n+1):end)=0; %用以存放其根结点;

里面有完整的实验报告及代码

tree(2,1:n)=pro2(1,:); %用以存放概率分布;

tree(6,1:n)=pro2(2,:); %用以存放每个概率对应的符号的下标; tree(6,n+1:end)=0;

disp('基本树形式:');

disp(tree); %显示构建其的基本树形式;

%对概率分布矩阵进行运算,每次进行最小两个值相加,其和赋予其中一个,另外一个置1,重复操作,

%将其每一次输出的结果存于s1矩阵中,至最后两个概率和为1结束; s1=ones(n-1,2*n-1); s1(1,:)=sort(tree(2,:)); for i=2:n

s1(i,:)=[s1(i-1,1)+s1(i-1,2),1,s1(i-1,3:2*n-1)]; s1(i,:)=sort(s1(i,:)); end;

%对基础二叉树进行操作,完整构造; m1 …… 此处隐藏:7794字,全部文档内容请下载后查看。喜欢就下载吧 ……

信息论综合性实验报告 Huffman编码及译码 代码.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219