集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 3433|回复: 3

Verilog怎么实现Huffman编码?

[复制链接]
vvt 发表于 2010-5-6 22:13:16 | 显示全部楼层 |阅读模式
Verilog怎么实现Huffman编码啊,要求是哈夫曼编码方法的具体步骤如下:
(1)输入n个不同概率的信息符号
(2)将n个信源信息符号的n个概率,按照概率的大小进行排序
(3)将n个概率中,最后两个小概率相加,这是概率个数减为n-1个
(4)将n-1个概率按照大小重新排序
(5)重复第三步,将新排序后的最后两个小概率相加,相加之后与其余概率再排序
(6)重复n-2次后,结果只剩下两个概率序列
(7)以二进制码元0/1赋值,构成哈夫曼码值,编码结束
xinu2009 发表于 2010-5-7 14:55:26 | 显示全部楼层
这个东西很有意义啊  希望看到的FPGAer们做一做哈
I2C 发表于 2010-5-8 00:04:45 | 显示全部楼层
哈夫曼(Huffman)编码  历史版本
基本原理
Huffman编码是一种可变长编码方式,是由美国数学家David Huffman创立的,是二叉树的一种特殊转化形式。编码的原理是:将使用次数多的代码转换成长度较短的代码,而使用次数少的可以使用较长的编码,并且保持编码的唯一可解性。Huffman算法的最根本的原则是:累计的(字符的统计数字*字符的编码长度)为最小,也就是权值(字符的统计数字*字符的编码长度)的和最小。
1.Huffman树
Huffman树是二叉树的一种特殊转化形式。以下是构件Huffman树的例子:
比如有以下数据, ABFACGCAHGBBAACECDFGFAAEABBB 先进行统计A(8) B(6) C(4) D(1) E(2) F(3) G(3) H(1) 括号里面的是统计次数生成Huffman树:每次取最小的那两个节点(node)合并成一个节点(node),并且将累计数值相加作为新的接点的累计数值,最顶层的是根节点(root) 注:列表中最小节点的是指包括合并了的节点在内的所有节点,已经合并的节点不在列表中编码和解码
编码:将ABCDEFGH用Huffman树产生的编码对应着写到文件中,并且保留原始的Huffman树,主要是编码段的信息。一般要编码256个元素的话需要511个单位来储存Huffman树,每个Huffman树都必须有以下的结构: code,char,left,right,probability(出现次数),通常情况是利用一个数组结构。因为在解码的时候只需要用到code,所以只需要记录每个元素的编码就可以了。
解码:利用文件中保存的Huffman编码,一一对应,解读编码,把可变长编码转换为定长编码。
发展
由于Huffman编码需要扫描两次,第一次是统计数字,第二次是编码写文件,大大影响了速度,因此有人发明了enhanced Huffman aglorithm。这种算法只扫描一遍文件,动态产生Huffman树,即每读n个字节就重新编码一次Huffman树,以达到提高速度的目的。在解码的过程中使用动态还原技术。
Sunlife 发表于 2015-5-14 16:30:54 | 显示全部楼层
Huffman算法的最根本的原则是:累计的(字符的统计数字*字符的编码长度)为最小,也就是权值(字符的统计数字*字符的编码长度)的和最小
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-6 20:06 , Processed in 0.058062 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表