编码器、解码器和编码解码方法_3

文档序号:9602781阅读:来源:国知局
br>[0088] 现在将介绍根据本发明的直接ODelta编码的实例。作为示例,比特的原始序列, 即37位,包括17个"1"和20个"0",在如下的等式1 (Eq. 1)中提供:
[0089] 0101011001000101000000000001111111111 Eq-1
[0090]
[0091] 熵E是从等式2 (Eq. 2)计算得到:
[0093]
[0094] -些比特数,即最小比特数(Min_bit),需要用来编码等式2 (Eq. 2)中的熵E,它可 以根据香农的信源编码定理计算得到,如上述D7和D8文件描述,如等式3 (Eq. 3)中提供 的:
[0097]当如上所述的直接ODelta算子被于比特的原始序列时,即方法1和方法3,生成一 个比特序列如下,包括37位,其中有13个"1"和24个"0"。
[0098] 0111110101100111100000000001000000000 Eq. 4
[0099]
[0100] 熵E是从等式5 (Eq. 5)计算得到:
[0102] 按照等式6(Eq. 6),表示为比特的最小数,即Min_bit:
[0104] 在等式4 (Eq. 4)中比特的序列被更进一步地编码来实现数据压缩,例如利用以下 至少一种:行程长度编码(RLE)、哈夫曼编码、算术编码、范围编码、熵编码或SRLE编码。
[0105]ODelta算子,当它与所用的熵编码方法一同使用时,减少了一些呈现始数据D1所 需要的比特数量,例如RLE或SRLE被用于等式4 (Eq4)中那样的操作过的数据,而不是如等 式1 (Eq. 1)中那样的原始数据;这个Ι-bit直接ODelta算子,S卩方法1和方法3,当在等式 l(Eq. 1)中比特的原始序列中有许多改变时生成"1",当在等式l(Eq. 1)中比特的原始序列 中有一长串互相类似的比特时产生"0"。
[0106] 对于ODelta算子的逆版本,即方法1和方法3的逆,当在编码数据流,即数据D2中 有" 1"时,将一个比特值从"0"改为" 1",或在适当的时候从" 1"改为"0",且当在编码数据流 D2中有"0"时不改变比特值。当ODelta运算被执行于ODelta运算过的(ODelta-operated) 数据比特流D2时,原始数据流数据D1被再生成为解码数据流D5。然而,如上所述,额外的 编码方式如VLC或哈夫曼编码也可以被使用,这也需要被考虑;这意味着通过使用熵编码 器的正向运算由数据D2生成数据D3,使用熵解码器的逆运算由数据D3生成数据D4。
[0107] 原始数据流D1在应用于编码之前被分为两个或更多部分。这种细分为原始数据 流D1的编码提供了更多的优化的机会。例如,这种细分的益处在于,在直接ODelta编码, 即利用方法1和方法3时,数据D1中的可变序列生成更多的" 1",反之,平坦的不可变序列, 即平坦(flat)序列,生成更多的"0",这是后续V的RL编码或哈夫曼编码所期望的,所以, 通过把数据D1分成可以如上所述被独立编码的多个部分,针对构成数据D1的整个比特流, 熵E可以被减小。
[0108] 下一步将描述根据本发明的直接ODelta编码的示例,它针对采用了被相互独立 编码的多个部分的情形。。包括原始单个比特序列的第一部分总共包括16比特,即7个"1" 和9个"0",如下面的等式7(Eq. 7)所示:
[0109]0101011001000101 Eq. 7
[0110]其中,Η⑴=4· 7621,B= 15. 82 ;"H"表示熵,"B"表示Min_bit。当直接ODelta 算子被用于等式7 (Eq. 7)的原始比特序列时,相应的转化比特序列如等式8 (Eq. 8)所示:
[0111]0111110101100111 Eq. 8
[0112] 其中H(X) = 4. 3158,B= 14. 34。
[0113] 包括原始单个比特序列的第二部分如下面等式9 (Eq. 9)所示:
[0114] 000000000001111111111 Eq. 9
[0115] 其中H(X) = 6. 313,B= 20. 97。当直接ODelta算子被用于等式9(Eq. 9)的原始 比特序列时,相应的转化比特序列如等式10 (Eq. 10)所示:
[0116] 000000000001000000000 Eq. 10
[0117] 其中H(X) = 1.7460,B= 5. 80。在这些例子中,如上所述,H(X)代表熵E,B代表 编码所需要的比特的最小数。
[0118] 在等式7(Eq.7)和等式10(Eq.10)的这个例子中,把直接ODelta算子分别用于两 个部分时,达到最好的压缩(即编码到14. 34比特+5. 80比特=总计20. 14比特);这需要 的比特比原来所需要的36. 82比特更少,直接ODelta运算过的比特需要34. 60比特,也少 于细分后所需的比特的原始数(=15. 82比特+20. 97比特=36. 79比特)。通过逐块地 (piece-by-piece)分析原始数据D1的熵E和修改后的-即,包括在数据D2中-数据的相 应的熵H,,可以自动地将数据D1中比特的原始流分成多个部分。
[0119] 数据压缩也可以以粗糙的方式实现,假如有一个足够大的数据空间,其中的比特 值沿着序列快速地变化,当在数据D1中有多个长行程(longrun)部分时,仅将数据D1的 部分细分成一个新的部分进行编码。可选地,数据D1的部分数据进行编码,无需使用直接 ODelta算子,例如,如果有长的相互类似的比特,其间有相对较少的个别不同的比特,在这 种情况下,直接ODelta算子并没有为数据压缩给予显著的好处。
[0120] 将数据D1细分成较小的部分有一个缺点,它产生额外的开销,使得编码数据D2的 数据更多。例如,这种开销包括与每个新的部分相关的数据比特或数据字节的数量的信息 指示。然而,传输至少一定量的额外开销数据值往往是必要的,从而当给定数据细分为两个 数据部分时只有一个额外开销数据值。
[0121] 为了实现以后可以解码的编码的比特流,在直接ODelta算子之后实施熵编码,例 如VLC,哈夫曼编码,算术编码,距离编码,RLE,SRLE,EM和其他类似的。执行基于计算熵E 和与实际数据编码相比最小的比特估计值的优化计算是更容易和更有效的。这样的顺序 的执行可以实现相当快的速度优化,并在编码数据D2中实现最佳的数据压缩。或者,以一 种方式执行熵优化是可行的,这种方式为原始比特、字母、数字、字节和字数据,即在数据D1 中,首先与其他一些方法编码来生成熵优化的比特流,并此后使用直接ODelta算子修正熵 优化的比特流来提供相应的已编码的数据,即数据D2。此外,所述ODelta操作数据仍然可 以用其他编码方法从数据D2编码生成数据D3。
[0122] 广义的直接ODelta算子使用一个参数,该参数描述了用于数据D1中的值的范围, 即表示这些值所需的一个值或比特数。此外,所述ODelta算子被用于允许使用正负偏移值 的方法,换句话说正负"pedestal"值(这里称主基础值)。例如,如果数据D1是七位数据, 即支持"〇"到" 127"的值,但它仅包含从"60"到" 115"范围内的值,然后,-60的偏移值被 用于数据D1时,由此生成从"0"到"55"范围的转换数据,"0"到"55"也可以表示为仅包 含6比特的值,即从而可以实现一定程序的数据压缩。因此,当数据值的全部范围存在数据 D1中,即以7比特表示通常以8位字节表示时,广义的直接ODelta算子改善了结果。
[0123] 根据本发明,直接的ODelta值,即方法1,可以使用由如下的示例软件代码的摘录 所描述的过程来计算,它是针对于仅具有正值的数据(lowValue=ΜΙΝ= 0和highValue =MAX= 127,wrapValue= 127-0+1 = 128):
[0125] 现在将提供一个例子来进一步澄清上述ODelta算子。
[0126] 值的原始序列如下面的等式11 (Eq. 11)所示:
[0127] 65,80,126,1,62,45,89,54,66 Eq. 11
[0128] 相应的德尔塔编码值如下面的等式12 (Eq. 12)所示:
[0129] 65,15,46, _125,61,_17,44,-35,12 Eq. 12
[0130] 相应的直接ODelta编码值如下面的等式13 (Eq. 13):
[0131] 1,15,46,3,61,111,44,93,12 Eq. 13
[0132] 其中使用了在参数wrapValue之内的回绕。
[0133] 逆ODelta算子,即方法1,可用于生成逆ODelta值,例如利用如下的软件代码示例 实现:
[0136] 当这个软件代码被执行并被应用于等式13 (Eq. 13)时,生成如等式14 (Eq. 14)提 供的值:
[0137] 65,80,126,1,62,45,89,54,66 Eq. 14
[0138] 这个例子使用wrapValue作为2的幂值。这不是强制性,wrapValue也可以是比 最大的数据值更大的任何值或比已使用的范围更大的值(如果负值也可用),或者范围可 以在数据给定序列中根据前偏移量修改。稍后会有说明此功能的另一个例子。
[0139] 参照图1总结上面所述,本发明涉及编码器10和解码器20。可选地,编码器10和 解码器20相结合作为由编号30指示的编解码器。编码器10是可以接收原始输入数据D1, D1被使用例如直接的ODelta方法来编码以生成相应的编码数据D2或D3。编码数据D2或 D3通过通信网络40传送或存储于数据存储介质50上,例如数据的载体,如光盘只读存储器 (ROM)或类似的。解码器20可以接收编码数据D2或D3,例如通过通信网络40或数据存储 介质50上提供,并使用逆方法,例如逆ODelta方法,来生成相应的解码数据D5,它基本上类 似于原始数据D1。编码器10和解码器20使用数字硬件实现,例如可以执行一个或多个软 件产品的计算机硬件,例如在此描述的作为示例实施例所提供的代码。可选地,编码器10 和/或解码器20使用专用数字硬件实现。
[0140] 如在编码器10中执行的ODelta方法,采用如图2所示的步骤。可选地,第一步 100,处理输入数据D1来找到它的数据元素的值的范围。在可选的第二步110中,从所述值 的范围,计算偏移量,即前偏移量,用于把数据元素转换为一个有利的形态从而生成对应的 一组转换元素(translatedelements)。在第三步120中,所述在第二步110中转换的元 素,受到直接ODelta编码来生成相应的ODelta编码值。在第四步130中,ODelta编码值 和可选的偏移值,最小值(lowValue),和/或最大值(highValue)分别被编码,例如行程 长度编码(RLE)、距离编码,或哈夫曼编码,来从数据D2生成数据D3。偏移值、最小值(low Value),和/或最大值(highValue)并不总是可压缩的,因此需要使用一定量的比特从编 码器10传递到解码器20。此外,偏移值、最小值(lowValue),和/或最大值(highValue) 是直接ODelta算子的可选功能;例如,偏移值,在某些情况下有"0"值,lowValue有MIN 值,highValue有MAX值,即没有进行转换,其全部范围被用。特别是,当直接ODelta算子 为1比特数据数实现时,即为一位一位编码,它根本不需要偏移值,此时步骤100和110通 常被忽略。当偏移值也用于步骤110时,其中的代表最高和最低值的范围值应更新。解码器 20应已知不同值的数量,即wrapValue,或者编码器10应当在压缩数据内把它传递至解码 器20。可选地,默认wrapValue( =highValue-lowValue+Ι)用于编码器和解码器。可 选地,至少编码器10和解码器20以递归方式操作,例如为了找到一种最佳的方式,将输入 数据D1再分成用于编码的部分以提供数据D1的优化压缩来生成编码数据D2。
[0141] 在解码器20中执行的逆ODelta方法采用如图3所示的步骤。在第一步200中, 数据D2/D3或D4被使用上述步骤130进行逆编码来生成解码ODelta数据,其中已解码的 ODelta数据有已ODelta编码的值并可选地有单独的偏移值。在第二步210中,ODelta编码 值被解码来产生数据元素序列。在第三步220中,数据元素的序列使用可选的预偏移值来 转换生成解码数据D5 ;在某些情况下,这种转换被设置为"0",即没有转换被有效地使用。 再者,无需使用偏移值来执行所述方法也是可以的,例如当执行1比特编码时,即一位一位 编码,步骤220被省略。更进一步地,解码器20也应当知道wrapValue,从而能够以适当的 方式解数被接收的数据元素。
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1