您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

自适应算术编码的FPGA实现

时间:2007-1-20栏目:电子通信论文

个寄存器中的值进行比较,时刻保持数值是递值的。这样,处理前后的概率十分接近,对压缩比影响不大。
  
  修改码表模块在输出h_count、l_count和scale之后,后面的计算子区间的模块即可进行计算;而修改码表模块在输出h_count、l_count和scale之后,亦可进行码表的修改。因此,这两个操作可以采用并行处理的方法实现,极大地节省了所用的时钟周期,相应地提高了速度,达到了优化的目的。表3给出了输入符号为3(对应于寄存器2与寄存器3之间的区间)时码表的修改过程。
  
  表3码表修改前后对照表
  
  寄存器0123456修改前04345677112233修改后04345778113234修改前023545657234255修改后011272829117127
  3.3区间计算及确定
  
  初始时符号所在的总区间为high=0xff,low=0(high和low分别表示已编码的符号序列所在子区间的上下界)。随着符号的不断输入,high和low的值也不断地减小,用以表示输入符号序列所对应的子区间。通过如下的公式可确定输入符号的区间:
  
  
  
  计算时,最耗资源的是乘法器和除法器。本方案中乘法器采用参数化模块lpm中的lpm_mult生成。而除法器则自动编写。虽然占用的时钟周期较多,但与使用lpm相比,这样做可以大大地提高工作频率,从总体上提高性能。
  
  3.4并行编码
  
  在区间计算过程中,high和low总是有限值,不可能无限制地划分下去。为了能够实现连续的编码,通过对high和low的处理,可以实现利用有限长的寄存器表示无限精度的区间,即在不断修改high和low的过程中输出high和low中相同的高端位,形成输出码流。详细过程如下:
  
  在区间确定之后,将low和high按位比较,若首位相同,则输出首位二进制码,产生输出码流,同时把low和high左移,low末位补0,high末位补1。循环比较输出,直到首位不同为止。如:
  
  high=00110110
  
  low=00100111
  
  输出码流为001,而high和low的结果为:
  
  high=10110111
  
  low=00111000
  
  通过这种连续地处理便可生成符号序列的自适应算术编码结束。但随着待编码符号序列的不断输入,可能会出现high和low十分接近,并且high和low的首位没有相同位的情况,如:
  
  high=10000000
  
  low=01111111
  
  称这种现象为产生了下溢。产生下溢后,后面的编码都失去了意义,此时需要特殊处理。
  
  对于下溢的处理方法为:保留首位,同时删除紧接在首位后的high中连续的0和low中连续的1,并且保证对high和low删除的位数相同,若连续0和连续1的位数不同,则取其较小者;然后high和low左移相同的位数,同时high的低位补1,low的低位补0。表4给出了下溢处理前后high和low值。
  
  表4下

上一页  [1] [2] [3] [4] [5] 下一页

下页更精彩:1 2 3 4 下一页