CN201966895U - 一种jpeg霍夫曼解码电路 - Google Patents
一种jpeg霍夫曼解码电路 Download PDFInfo
- Publication number
- CN201966895U CN201966895U CN201020693942XU CN201020693942U CN201966895U CN 201966895 U CN201966895 U CN 201966895U CN 201020693942X U CN201020693942X U CN 201020693942XU CN 201020693942 U CN201020693942 U CN 201020693942U CN 201966895 U CN201966895 U CN 201966895U
- Authority
- CN
- China
- Prior art keywords
- code word
- input
- huffman
- output
- links
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本实用新型公开一种JPEG霍夫曼解码电路,包括根据不同长度下的霍夫曼码字个数建立霍夫曼最小码字表的最小码字表模块;根据不同长度下的霍夫曼码字个数建立霍夫曼最小码字地址表的最小码字地址表模块;存储霍夫曼码字表的霍夫曼码字表模块;包含多个比较器的比较器阵列模块。本实用新型可以大量节省最小码字表寄存器资源和比较器资源,在高速解码的同时有效地降低了硬件资源的消耗。
Description
技术领域
本实用新型涉及一种JPEG霍夫曼解码电路。
背景技术
霍夫曼编码是一种常用的基于概率统计的无损压缩技术,它用较长的比特对出现概率较高的码字进行编码,用较短的比特对出现概率较低的码字进行编码,从而达到了非常接近理论极限的压缩比。
传统的霍夫曼解码通常是通过逐位比较来实现,该方法首先需要根据编码信息重构出用于解码的霍夫曼码表,该码表需要占用较大的存储空间,JPEG标准中示例的典型码表长度约为4Kbit。其次,采用逐位比较的方法通常需要多个时钟周期来解码一个码字,这种方法大大限制了解码速率。
与本实用新型最接近的现有技术为公开号CN101017574A的专利申请,该专利公开了一种适于JPEG码流的霍夫曼解码方法,该方法根据JPEG码流中的码字个数建立最小码字表和最小码字地址表,然后在霍夫曼解码阶段将输入码流与最小码字表进行并行比较,得到码字长度之后再根据最小码字地址表解码出当前霍夫曼码字的地址,最后得到对应的霍夫曼码字。
但是由于JPEG码流中霍夫曼码字长度最长为16位,上述方法中的最小码字表位宽为16位,另外输入码流与最小码字表进行比较时,需要用16个长度分别为1,2,3,...,15,16的比较器才能解码出当前码字长度,这就会造成解码速度降低,同时增加芯片的硬件成本。
在专用集成电路设计中,解码速度和芯片成本都是设计者必须考虑的重要因素,应该采用高速低成本的霍夫曼解码算法来降低硬件资源的消耗。
实用新型内容
由于现有技术存在上述问题,本实用新型提出一种JPEG霍夫曼解码电路,其可有效解决现有技术存在的问题。
为了实现上述目的,本实用新型公开了一种JPEG霍夫曼解码电路,包括根据不同长度下的霍夫曼码字个数建立霍夫曼最小码字表的最小码字表模块;根据不同长度下的霍夫曼码字个数建立霍夫曼最小码字地址表的最小码字地址表模块;存储霍夫曼码字表的霍夫曼码字表模块;包含多个比较器的比较器阵列模块;其中比较器阵列模块中各比较器的输入端与有效输入码流和当前最小码字值相连,输出端分别与第一加法器的输入端相连;移位寄存器的输入端分别与输入码流及第一加法器输出端相连,输出端与第二加法器的输入端相连;最小码字表模块的输入端与第一加法器的输出端相连,输出端与减法器的输入端相连;最小码字地址表模块的输入端与第一加法器的输出端相连,输出端与减法器的输入端相连;减法器的输出端与第二加法器的输入端相连;第二加法器的输出端与霍夫曼码字表模块相连。
进一步地,比较器阵列模块还包括8个与门,8个与门的输入端依次分别与第九至第十六比较器的输出端及当前有效输入码流是否可能为长度9至16的长码字相连,输出端与第一加法器的输入端相连,其中当前有效输入码流如果为1表示可能为长码字,如果为0表示不可能为长码字。
现有技术所提供的JPEG霍夫曼解码方法需要位宽分别为1位,2位,3位,4位,5位,6位,7位,8位,9位,10位,11位,12位,13位,14位,15位,16位的霍夫曼最小码字表和16个位宽分别为1位,2位,3位,4位,5位,6位,7位,8位,9位,10位,11位,12位,13位,14位,15位,16位的数据比较器才能对当前霍夫曼码字进行解码,而本实用新型所提供的JPEG霍夫曼解码电路只需要位宽分别为1位,2位,3位,4位,5位,6位,7位,8位,8位,8位,8位,8位,8位,8位,8位,8位的霍夫曼最小码字表和16个位宽分别为1位,2位,3位,4位,5位,6位,7位,8位,8位,8位,8位,8位,8位,8位,8位,8位的数据比较器就能对当前霍夫曼码字进行解码,这样可以大量节省最小码字表寄存器资源和比较器资源,在高速解码的同时有效地降低了硬件资源的消耗。
附图说明
图1是本实用新型JPEG霍夫曼解码的电路图;
图2是本实用新型最小码字表计算流程图;
图3是本实用新型最小码字地址表计算流程图;
图4是本实用新型码字长度计算示意图。
具体实施方式
为了使本实用新型的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本实用新型作进一步的详细说明。
如图1所示,本实用新型公开了一种JPEG霍夫曼解码电路。该电路包括根据不同长度下的霍夫曼码字个数建立霍夫曼最小码字表的最小码字表模块;根据不同长度下的霍夫曼码字个数建立霍夫曼最小码字地址表的最小码字地址表模块;存储霍夫曼码字表的霍夫曼码字表模块;包含多个比较器的比较器阵列模块。
其中,比较器阵列模块中各比较器的输入端与有效输入码流和当前最小码字值相连,输出端分别与第一加法器的输入端相连;移位寄存器的输入端分别与输入码流及第一加法器输出端相连,输出端与第二加法器的输入端相连;最小码字表模块的输入端与第一加法器的输出端相连,输出端与减法器的输入端相连;最小码字地址表模块的输入端与第一加法器的输出端相连,输出端与减法器的输入端相连;减法器的输出端与第二加法器的输入端相连;第二加法器的输出端与霍夫曼码字表模块相连。
此外,比较器阵列模块还包括8个与门,8个与门的输入端依次分别与第九至第十六比较器的输出端及当前有效输入码流是否可能为长度9至16的长码字(long_code_9至long_code_15)相连,输出端与第一加法器的输入端相连,其中当前有效输入码流如果为1表示可能为长码字,如果为0表示不可能为长码字。
如图1所示,码流输入数据中截取的有效输入数据分别同时输入到16个比较器的一端,与对应的最小码字进行比较,其中,第九个比较器到第十六个比较器的最终输出结果只有在当前有效输入数据可能为长码字时才有效,该部分功能通过将比较器结果和长码字标志相与来实现,十六个比较器的最终输出结果之和就是当前霍夫曼码字的长度,根据当前码字长度通过数据移位器截取当前输入码流数据中的对应长度下的霍夫曼码字,同时根据当前码字长度从最小码字表中查找出当前长度下的最小码字,将从当前输入码流数据中截取的对应长度下的霍夫曼码字与对应的最小码字相减并加上当前有效输入码流就可以得到霍夫曼码字表的索引地址,根据该地址值即可取出当前霍夫曼码字对应的游程编码值。
根据上述电路设计,本实用新型中最小码字表模块、最小码字地址表模块以及霍夫曼码字表模块等模块的实际工作流程如下:
首先,执行步骤1.在JPEG文件头霍夫曼标记解码阶段根据不同长度下的霍夫曼码字个数建立的霍夫曼最小码字表,该最小码字表中前8个码字的位宽分别为1位,2位,3位,4位,5位,6位,7位,8位,后8个码字的位宽全部为8位;
假设JPEG文件头霍夫曼标记段中长度为i的码字个数为Num(i),其中1≤i≤16。如图2所示,对应的霍夫曼最小码字表通过如下过程计算:
步骤1A,从长度为1的最小码字开始,如果当前长度下对应的码字个数为0,则该长度下的最小码字值MinCode(1)等于0,如果下一个长度下对应的码字个数为0则重复执行过程1A),如果下一个长度下对应的码字个数不为0,则执行1B);
步骤1B,通过以下公式计算出当前长度下对应的最小码字值
如果从下一个长度开始到长度为16所对应的码字个数全部为0,即Num(i)到Num(16)全为0则执行1C),否则重复执行过程1B)。其中,公式中MinCode(1)始终等于0是由JPEG霍夫曼编码性质决定的;
步骤1C,从当前长度开始到长度为16的最小码字即MinCode(i)至MinCode(16-i)全部等于255,即8位全1;
上述计算过程中得到的MinCode(1)~MinCode(16)的位宽分别为1位,2位,3位,4位,5位,6位,7位,8位,8位,8位,8位,8位,8位,8位,8位,8位。
需要说明的是,由于JPEG码流中霍夫曼编码的特性,可以证明当码字长度大于8时,高于该码字第8位的所有比特位全为1,所以在解码计算码字长度大于8的最小码字的时候只需要保存其低8位即可,下面简要介绍上述霍夫曼码字特性的证明过程:
码字长度为l的最小码字可以通过以下二进制小数公式来计算:
其中ni是码字长度为i的码字个数。
在该二进制小数最低有效位补零(如有需要)以使得该二进制小数的小数部分的位数等于码字长度,那么该二进制小数的小数部分就是与之对应的霍夫曼码字串。JPEG压缩标准中使用的霍夫曼码字的长度为1~16位,根据克拉夫特不等式,可以得到整个二进制霍夫曼码字树的总和等于1:
其中ni是码字长度为i的码字个数。
同时又因为
所以
即
对于JPEG压缩标准中任何一张霍夫曼码表来说:
所以
即
所以
结合公式一,从上式可以看出9位长度下最小码字的最高位肯定为1,对于长度更长的码字,可以通过相同的方法证明出高于该码字第8位的所有比特位全为1。
如图3所示,接着执行步骤2.在计算霍夫曼最小码字表的同时通过以下公式计算不同长度下的霍夫曼最小码字地址表;
下表给出了真实的JPEG码流中AC分量码字个数表,同时也给出了本具体实施例中步骤1和步骤2的计算结果;
码字长度 | 码字个数 | 最小码字(二进制) | 最小码字地址 |
1 | 0 | 0 | 0 |
2 | 2 | 00 | 0 |
3 | 1 | 100 | 2 |
4 | 3 | 1010 | 3 |
5 | 3 | 11010 | 6 |
6 | 2 | 111010 | 9 |
7 | 4 | 1111000 | 11 |
8 | 3 | 11111000 | 15 |
9 | 5 | 11110110 | 18 |
10 | 5 | 11110110 | 23 |
11 | 4 | 11110110 | 28 |
12 | 4 | 11110000 | 32 |
13 | 0 | 11110100 | 36 |
14 | 0 | 11100000 | 36 |
15 | 1 | 11000000 | 36 |
16 | 125 | 10000010 | 37 |
如图4所示,接着执行步骤3.在JPEG图像霍夫曼解码阶段根据16个并行的小于比较器的比较结果,计算出当前霍夫曼码字的长度,并根据最小码字地址表得到游程编码值(RUN/SIZE)。
假设霍夫曼解码过程中当前16位输入码流为16’b1111111000111001,则具体计算过程为:
假设16个比较器的比较结果为Comp(n),并且将小于比较器中与输入码流连接的输入端数据称为有效输入码流ValidData(n),其中1≤n≤16,
步骤3A,在前8个比较器中,ValidData(n)为输入码流前n位,将ValidData(n)与MinCode(n)进行比较,如果ValidData(n)小于MinCode(n),比较结果Comp(n)=0,否则输出Comp(n)=1,其中1≤n≤8;
步骤3B,在后8个比较器中,首先根据输入码流判断出该码字是否可能为长码字(码字长度是否大于8),如果输入码流的最高位为1,则该输入码流可能是长度为9的长码字,如果输入码流的最高2位全为1,则该输入码流可能是长度为10的长码字,以此类推,如果输入码流的最高8位全为1,则该输入码流可能是长度为16的长码字。
如果当前输入码字不是长码字,比较器输出结果直接为0;如果是长码字,舍弃输入码流高(n-8)位,ValidData(n)为输入码流中接下来的8位数据,将ValidData(n)与MinCode(n)进行比较,如果ValidData(n)小于MinCode(n),比较结果Comp(n)=0,否则输出Comp(n)=1,其中9≤n≤16,在本具体实施例中下表给出了计算结果:
步骤3C,通过以下公式将所有比较结果相加得到最终的码字长度CodeLen
从上表中可以看出,本实施例中CodeLen=10。
步骤3D,根据当前解码出的码字长度通过以下公式计算得到该长度下的最小码字地址min_adress:
min_adress=MinAddr(CodeLen)=MinAddr(10)=23;
根据当前解码出的码字长度通过以下公式计算得到该长度下的最小码字值min_code_value:
min_code_value=MinCode(CodeLen)=MinCode(10)=8′b11110110;
根据有效输入码流、最小码字值以及最小码字地址通过以下公式计算出当前码字在霍夫曼码表中的地址值symbol_adress:
symbol_adress=ValidData(CodeLen)+min_code_value-min_address
=8′b11111000-8′b11110110+23=25;
最后根据symbol_adress查找霍夫曼码字表就可以得到当前码字对应的游程编码值。
虽然上述优选的实施例详尽地说明了本实用新型的方法,但是需要说明的是,本实用新型不限于上文优选的实施例。本领域的技术人员应当意识到在不脱离本实用新型技术方案所给出的技术特征和范围的情况下,对技术特征所作的增加、以本领域一些同样内容的替换,均应属本实用新型的保护范围。
Claims (2)
1.一种JPEG霍夫曼解码电路,其特征在于:包括
根据不同长度下的霍夫曼码字个数建立霍夫曼最小码字表的最小码字表模块;
根据不同长度下的霍夫曼码字个数建立霍夫曼最小码字地址表的最小码字地址表模块;
存储霍夫曼码字表的霍夫曼码字表模块;
包含多个比较器的比较器阵列模块;其中
比较器阵列模块中各比较器的输入端与有效输入码流和当前最小码字值相连,输出端分别与第一加法器的输入端相连;
移位寄存器的输入端分别与输入码流及第一加法器输出端相连,输出端与第二加法器的输入端相连;
最小码字表模块的输入端与第一加法器的输出端相连,输出端与减法器的输入端相连;
最小码字地址表模块的输入端与第一加法器的输出端相连,输出端与减法器的输入端相连;
减法器的输出端与第二加法器的输入端相连;
第二加法器的输出端与霍夫曼码字表模块相连。
2.根据权利要求1所述的JPEG霍夫曼解码电路,其特征在于,比较器阵列模块还包括8个与门,8个与门的输入端依次分别与第九至第十六比较器的输出端及当前有效输入码流是否可能为长度9至16的长码字相连,输出端与第一加法器的输入端相连,其中当前有效输入码流如果为1表示可能为长码字,如果为0表示不可能为长码字。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201020693942XU CN201966895U (zh) | 2010-12-30 | 2010-12-30 | 一种jpeg霍夫曼解码电路 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201020693942XU CN201966895U (zh) | 2010-12-30 | 2010-12-30 | 一种jpeg霍夫曼解码电路 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN201966895U true CN201966895U (zh) | 2011-09-07 |
Family
ID=44529447
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201020693942XU Expired - Lifetime CN201966895U (zh) | 2010-12-30 | 2010-12-30 | 一种jpeg霍夫曼解码电路 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN201966895U (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102983866A (zh) * | 2012-11-14 | 2013-03-20 | 无锡芯响电子科技有限公司 | 一种动态Huffman编码硬件实现系统及其实现方法 |
-
2010
- 2010-12-30 CN CN201020693942XU patent/CN201966895U/zh not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102983866A (zh) * | 2012-11-14 | 2013-03-20 | 无锡芯响电子科技有限公司 | 一种动态Huffman编码硬件实现系统及其实现方法 |
CN102983866B (zh) * | 2012-11-14 | 2015-12-02 | 无锡芯响电子科技有限公司 | 一种动态Huffman编码硬件实现系统及其实现方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104168085B (zh) | 一种基于冗余熵变换的数据压缩方法 | |
US20190207624A1 (en) | Selection of data compression technique based on input characteristics | |
CN100525450C (zh) | 一种实现霍夫曼译码的方法和装置 | |
CN102546089B (zh) | 循环冗余校验crc码的实现方法及装置 | |
CN103546161A (zh) | 基于二进制位处理的无损压缩方法 | |
CN103368582A (zh) | 数据编码及译码方法与装置 | |
US20090267810A1 (en) | Efficient coding of small integer sets | |
CN106533452A (zh) | 一种多进制ldpc编码方法及编码器 | |
CN101595645A (zh) | 串行通信系统中发送/接收串行数据的方法和系统及其串行通信系统 | |
WO2021143634A1 (zh) | 算术编码器及实现算术编码的方法和图像编码方法 | |
CN201966895U (zh) | 一种jpeg霍夫曼解码电路 | |
CN102545910B (zh) | 一种jpeg霍夫曼解码电路及其解码方法 | |
CN103428502B (zh) | 一种解码方法及解码系统 | |
CN100581258C (zh) | 霍夫曼解码方法和霍夫曼解码装置 | |
CN107623524B (zh) | 一种基于硬件的Huffman编码方法及系统 | |
Abinesh et al. | Transition inversion based low power data coding scheme for synchronous serial communication | |
Chen et al. | Low power Huffman coding for high performance data transmission | |
CN111897513B (zh) | 一种基于反向极性技术的乘法器及其代码生成方法 | |
CN101707484B (zh) | 一种适合硬件实现的快速指数哥伦布码解码方法 | |
CN113157247A (zh) | 一种可重构整型-浮点型乘法器 | |
CN102064836B (zh) | 一种专用比较单元及ldpc码校验节点运算电路 | |
CN102215383A (zh) | 一种基于h.264的cavlc编码器的实现方法 | |
Chen et al. | Huffman coding method based on parallel implementation of FPGA | |
CN105049057A (zh) | 一种面向128位并行输入的crc-32校验电路 | |
CN111130558A (zh) | 一种基于统计概率的编码表压缩方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20110907 |