公告:
编码方法 您当前所在位置:时时彩计划群微信号 > 编码方法 > 正文

:传统的硬件实现哈夫曼编码的方法主要有:预先构造哈夫曼编码表

来源:未知作者:admin 更新时间:2018-04-19 17:00
:守旧的硬件实现哈夫曼编码的方法次要有:过后构造哈夫曼编码表,编码器经由过程查表的方法输出哈夫曼编码[1];编码器静态天生哈夫曼树,经由过程遍历节点编制获得哈夫曼编码[2-3]。第一种方法从均匀码长角度看,在很多情况下非最优;第二种方法必要天生完备

  :守旧的硬件实现哈夫曼编码的方法次要有:过后构造哈夫曼编码表,编码器经由过程查表的方法输出哈夫曼编码[1];编码器静态天生哈夫曼树,经由过程遍历节点编制获得哈夫曼编码[2-3]。第一种方法从均匀码长角度看,在很多情况下非最优;第二种方法必要天生完备的哈夫曼树,会产生大批的节点,且需遍历哈夫曼树获得哈夫曼编码,本钱占用多,实现较为费事。本文基于软件实现[4]时,应用哈夫曼树,会提出一种合用于硬件并行实现的新数据结构——字符池,经由过程对字符池的频数属性较量和排序来决议各个字符节点在字符池中的归属。设置设备陈设字符池的同时渐渐天生

  作者/ 贾先韬 张旭 刘泽曦 山东大学 物理学院(山东 济南 250100)

  择要:守旧的硬件实现哈夫曼编码的方法次要有:过后构造哈夫曼编码表,编码器经由过程查表的方法输出哈夫曼编码[1];编码器静态天生哈夫曼树,经由过程遍历节点编制获得哈夫曼编码[2-3]。第一种方法从均匀码长角度看,在很多情况下非最优;第二种方法必要天生完备的哈夫曼树,会产生大批的节点,且需遍历哈夫曼树获得哈夫曼编码,本钱占用多,实现较为费事。本文基于软件实现[4]时,应用哈夫曼树,会提出一种合用于硬件并行实现的新数据结构——字符池,经由过程对字符池的频数属性较量和排序来决议各个字符节点在字符池中的归属。设置设备陈设字符池的同时渐渐天生哈夫曼编码,可以或许进步硬件把持率,并且无需额定把持来提取哈夫曼编码。

  哈夫曼(Huffman)编码对出现频次较高的字符采纳较短的编码,对出现频次较低的字符采纳较长的编码,它可以或许担保均匀码长最短,具备较高的编码效力。是以哈夫曼编码被广泛使用于数据紧缩领域。已有的硬件实现方法搜罗过后构造哈夫曼编码表和模仿软件实时天生完备哈夫曼树两种。前一种方法在大多数情况下不是最优编码,后一种方法不但必要天生大批节点,并且必要额定硬件模块实现遍历节点把持。针对这些成绩,本文提出一种新的合用于硬件实现的数据结构——字符池来对输出数据实时天生哈夫曼编码。

  哈夫曼编码是一种不等长编码,依照每一个字符出现频次停止编码,每一个字符的编码不克不迭是别的字符编码的前缀,一切字符编码总长度比较原码而言将会低落。

  本文采纳自顶而下的假想编制。整体框架由一个顶层模块、接收模块、计算模块、输出模块和FIFO模块构成。顶层模块由别的4个模块连接而成,体系整体结构如图1所示。

  接收模块:接收数据源并分类统计各字符出现的频数,数据接收实现后,接收模块向计算模块发送开端计算旌旗灯号。计算模块停止计算,天生各字符对应的编码值,做成编码表,竣过后向输出模块发送输出旌旗灯号。最后输出模块经由过程查表编制输出各字符的编码值和哈夫曼编码成果。FIFO模块用于接收原始数据和向输出模块供应数据源。

  本文应用verilog语言在vivado平台长停止哈夫曼编码硬件模块的实现,选用器件为xc7a100tcsq324-1。

  本文的FIFO模块应用vivado的IP核天生,假想时抉择好相应参数设置设备陈设,天生verilog文件后便可直接调用。

  应用多个计数器对输出各字符频数和输出字符总量停止计数,频数被存放在存放器中,当字符输出竣事(比方输出字符总量达到了约定值)时,输出模块向计算模块输出计算开端旌旗灯号,同时频数存放器中的数据被并行输出至计算模块。

  本文基于哈夫曼树的思惟树立了新的数据结构——字符池用于硬件实现哈夫曼编码。依照n种字符树立n个字符池和n个字符节点。每一个字符池包括一个属性:包括的一切字符的频数之和。每一个字符节点包括以部属性:所属字符池序号、自己编码值和自己编码长度。因此,界说n个存放器记录字符节点对应的字符池序号、n个存放器记录编码值、n个存放器记录编码长度和n个存放器记录字符池的频数。

  停止哈夫曼编码计算时,计算模块经由过程实施循环把持实现各字符编码的天生和字符在字符池中的移动。以图2中的实例描写计算流程。

  图2中共有5种字符,各自频数为:“0”:5,“1”:10,“2”:20,“3”:30,“4”:35。

  图2(a)为初始化成果,此时每一个字符池包括一个字符,每一个字符池的频数恰为阿谁字符的频数;每一个字符的编码值和编码长度清零。图2(a)到图2(d)共颠末4次循环把持,终极可以或许从图2(d)中读掏出每一个字符的编码值和编码长度,“0”编码值为0011,“1”编码值为1011,“2”编码值为111,“3”编码值为01,“4”编码值为0。

  每次循环把持包括排序、遴选、最小值和次小值求和、频数更新、字符移动、编码值更新及编码长度更新8步。其中前4步按依次实现,而后同时实现后4步。总循环次数由字符品种数控制。

  排序把持功效是将每一个节点池的频数从小到猛停止排序,本文借鉴了参考文献[5]中的方法,硬件实现时经由过程树立较量器阵列将每两个数两两较量,再经由过程加法器对每一个字符频数的较量成果求和。对一个字符频数,若它小于另一个字符的频数,则相应成果为0,否则为1。那末经由过程指定字符频数与别的字符频数的较量成果之和可以或许得悉它的频数在一切频数中的地位。

  遴选把持是将排序把持中较量成果为0和1对应的字符频数选出,它们代表最小频数和次小频数,遴选把持同时遴选出这两个频数对应的字符池ID。硬件实现时树立多个较量器,将较量成果之和与0和1较量,再经由过程多路复用器从多个频数和字符池ID中准确遴选出所需的值。比方在图2(b)中,遴选出的两个频数为15和20,它们对应字符池ID为1和2。

  接下来的最小值和次小值求和把持就是将遴选把持遴选出的最小频数和次小频数求和,而后输出。此步骤硬件实现时必要一个多位加法器。比方在图2(b)中,求和值为15+20=35。

  频数更新把持指依照遴选把持遴选出的成果停止字符池频数的更新。依照本文约定方法,将最小频数对应字符池的频数更新成有效值,有效值应大于一切可能的频数,它的目的是防止此字符池的频数被接下来的循环遴选把持遴选出。本文将次小频数对应字符池的频数以求和把持的加法成果代替。比方图2(c)中1号字符池频数酿成100,2号字符池频数酿成35。

  字符移动把持指将特定字符从一个字符池移动到另一个字符池中。依照本文约定方法,将最小频数对应字符池的一切字符移动到次小频数对应字符池中。比方将图2(c)和图2(b)比较可发觉1号字符池的字符“0”和“1”被移动到了2号字符池中。

  编码值、编码长度更新把持中,按本文约定方法,将最小频数对应字符池的一切字符编码值左移1位并在最后一名补0,长度加1。将次小频数对应字符池的一切字符编码值左移1位并在最后一名补1,长度加1。将图2(c)和图2(b)比较可看出,字符“0”的编码值从0酿成00,“1”编码值从1酿成10,“2”编码值从无酿成1。

  输出模块担负从FIFO中读掏出原始数据、从编码表中获得编码值,再经由过程并串转换以一名数据口首先输出各字符编码值,再输出字符串编码成果。

  本文应用vivado对顶层模块停止阐发实现,经由过程实现后仿真验证 成果准确性。

  图3展示了模块输出时序。本文测试时以huf_in_start高电平脉冲标志数据输出开端,实际数据以4为并口输出,测试字符领域为“0”至“9”。

  图4展示了模块输出时序。经由过程huf_out_start高电平脉冲剖明输出开端。首先输出各字符编码序列,包括4bit编码长度和实际编码值,而后输出原始字符串的编码值。huf_out_end高电平脉冲剖明输出竣事。

  图5为vivado控制台输出,它展示了各字符编码值和原始字符和testbench停止的解码字符较量,声名模块一样平常运行。

  本文提出了一种新的在硬件上实现哈夫曼编码的方法,把持本文的字符池数据结构,对每次输出的数据实时天生哈夫曼编码表,从均匀码长角度担保了编码的最优,同时防止了天生完备的哈夫曼树,减少了本钱占用,并防止了遍历哈夫曼树所需的额定把持,实现方便疾速。

  [1]邓丽娟,田金文,柳健,等.哈夫曼编码器IP核的假想与实现[J].微电子学与计算机,2005(02):9-12.

  本文来源于《电子产物世界》2017年第12期第40页,招待您写论文时引用,并阐明来由。pk888彩票平台怎样众购彩票zg606App兼职 彩票筹划公式赢利

 

关于我们
联系我们
  • 杭州浩博建筑装饰工程有限公司
  • 联系地址:杭州市益乐路方家花苑43号2楼
  • 电 话:0571-85360638
  • 传 真:0571-85360638