自适应算术编码的FPGA实现
[11-20 16:15:11] 来源:http://www.88dzw.com FPGA 阅读:8956次
文章摘要:3.3 区间计算及确定 初始时符号所在的总区间为high=0xff,low=0(high和low分别表示已编码的符号序列所在子区间的上下界)。随着符号的不断输入,high和low的值也不断地减小,用以表示输入符号序列所对应的子区间。通过如下的公式可确定输入符号的区间: 计算时,最耗资源的是乘法器和除法器。本方案中乘法器采用参数化模块lpm中的lpm_mult生成。而除法器则自动编写。虽然占用的时钟周期较多,但与使用lpm相比,这样做可以大大地提高工作频率,从总体上提高性能。 3.4 并行编码 在区间计算过程中,high和low总是有限值,不可能无限制地划分下去。为了能够实现连续的编码,通过对h
自适应算术编码的FPGA实现,标签:fpga是什么,fpga教程,http://www.88dzw.com3.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 下溢处理前后对照表
c | 下溢处理前 | 下溢处理后 | 下溢个数 |
high | 10001000 | 11000111 | 3 |
low | 01110111 | 00111000 |
经过处理后,扩大了区间,使得后面的编码可以顺利地进行。
在考虑了下溢的编码输出中,下溢作为输出码流的一部分,使得解码时能对下溢进行同样的处理,达到编解码的一致。但是下溢产生后并不马上输出,只记下下溢的个数,下溢则是在下一个符号编码时进行输出的。在下一个符号编码时,如果high和low比较后高端有相同位则输出下溢,即在第一个输出后紧接着插入首位的反,插入首则反的个数为前面产生下溢的个数,然后输出相同的次高位及以后相同的各位。这样处理既保留了下溢的信息又使得输出码流不偏离编码符号所在的子区间,使得解码时很容易处理。但是如此high和low比较后没有相同输出则不输出下溢,而是把两次产生的下溢的个数进行累加,再输入下一个符号,直到high和low有相同首位才输出下溢。
《自适应算术编码的FPGA实现》相关文章
- › 自适应算术编码的FPGA实现
- 在百度中搜索相关文章:自适应算术编码的FPGA实现
- 在谷歌中搜索相关文章:自适应算术编码的FPGA实现
- 在soso中搜索相关文章:自适应算术编码的FPGA实现
- 在搜狗中搜索相关文章:自适应算术编码的FPGA实现