霍夫曼码编码方式matlab,【Matlab编程】哈夫曼编码的Matlab实现

本文介绍了如何在Matlab中实现哈夫曼编码,通过给出的代码详细展示了利用Matlab进行哈夫曼编码的过程,适用于通信仿真的便捷编码需求。函数`Huffman_code`接受概率分布作为输入,并返回编码和平均码长。哈夫曼编码是基于概率的可变长度前缀编码,用于数据压缩。
摘要由CSDN通过智能技术生成

在前年暑假的时候,用C实现了哈夫曼编译码的功能,见文章《哈夫曼树及编译码》。不过在通信仿真中,经常要使用到Matlab编程,所以为了方便起见,这里用Matlab实现的哈夫曼编码的功能。至于哈夫曼编译码的基本原理,我们可以参考之前的文章《哈夫曼树及编译码》,里面有详细的说明及图解过程。下面直接给出具体的Matlab实现的哈夫曼编码函数,由于程序中注释还算比较详细,在此就不予与说明:

function [ h,e ] = Huffman_code( p )

%p为概率分布,此函数功能是进行哈夫曼编码

% 此处显示详细说明

% h为各个元素的麻子

% e为输出的平均码长

if length(find(p<0))~=0

error('概率不应该小于0!')

end

if abs(sum(p)-1)>10e-10

error('概率之和大于1,请检查输入!')

end

n=length(p);

p=sort(p)

q=p;

m=zeros(n-1,n);

for i=1:n-1

[q,e]=sort(q);

m(i,:)=[e(1:n-i+1),zeros(1,i-1)]; %由数组l 构建一个矩阵,该矩阵表明概率合并时的顺序,用于后面的编码

q=[q(1)+q(2),q(3:n),1];

end

for i=1:n-1

c(i,1:n*n)=b

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
 哈夫曼编码(Huffman Coding)是一种编码方式哈夫曼编码是可变字长编(VLC)的一种。 Huffman于1952年提出一种编方法,该方法完全依据字符出现概率来构造异字头的平均长 度最短的字,有时称之为最佳编,一般就叫作Huffman编。 以哈夫曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。 在计算机信息处理中,“哈夫曼编码”是一种一致性编法(又称"熵编法"),用于数据的无损耗压缩。这一术语是指使用一张特殊的编表将源字符(例如某文件中的一个符号)进行编。这张编表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编,反之出现概率低的则使用较长的编,这便使编之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。这种方法是由David.A.Huffman发展起来的。 例如,在英文中,e的出现概率很高,而z的出现概率则最低。当利用哈夫曼编码对一篇英文进行压缩时,e极有可能用一个位(bit)来表示,而z则可能花去25个位(不是26)。用普通的表示方法时,每个英文字母均占用一个字节(byte),即8个位。二者相比,e使用了一般编的1/8的长度,z则使用了3倍多。倘若我们能实现对于英文中各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值