利用缓存来加快量化数据取得的编码和解码方法

文档序号:7510295阅读:723来源:国知局
专利名称:利用缓存来加快量化数据取得的编码和解码方法
技术领域
本发明涉及一种编码技术领域的方法,具体是一种利用缓存来加快量化数据取得的编码和解码方法。
背景技术
3G技术的兴起对数字音频编码技术提出了更高的要求。由于多媒体业务的扩展,不但需要更高的编码效率和实时性,音频的编码带宽也需要进一步扩展。目前,能够满足低码率,高质量音频编码的技术主要包括High-EfficiencyAdvance Audio Coding(HEAAC),Enhanced Advance Audio Coding plus(EAAC+)和Adaptive MultiRate WideBand plus(AMR-WB+),其中HEAAC和EAAC+是从高码率的音频编码器扩展而来,而AMR-WB+是通过对低码率的语音编码扩展而形成的一种混合编码方式。
在通常的音频编码中,为了更好的结合人类听觉系统的一些特性,一般先对采样值做时频变换,然后根据听觉特性对频谱系数进行取舍加权并量化,量化后的频谱系数再通过熵值编码传输。编码中的主要失真产生于对各种参数的量化。因此,为了适应不同的需求,编码器需根据指定码率对量化的质量进行调整在高码率(>24kbps)的编码方案中,好的编码器均会达到透明音质,即人耳无法察觉到编码量化过程中引入的噪声;而低码率编码方案中,由于比特数的不足,不可能完全达到音质透明的效果,从而只能追求尽量小的主观失真。
目前,人们经常使用的量化技术是格型矢量量化技术,格型矢量量化技术的基本思想是首先将若干标量数据构成一个多维矢量,然后在格型的矢量空间内进行整体量化,从而达到了压缩数据而不损失多少信息的目的。因此,在低码率的情况下用得相当普及。
经对现有技术的文献检索发现,NASSER M.NASRABADI和YUSHU FENG等人在1990年12月的IEEE Trans.Commun.,vol.38.(IEEE学报电信专栏38卷)上发表的“Image Compression Using Address-Vector Quantization,”(用地址矢量量化方法来压缩图像)一文中已提出用缓存方法加快图像解码量化的一些应用,但尚未发现此类似方法在音频中的运用。
此外,在AMR-WB+的3GPP TS 26.290标准中提出的基于RE8的格型矢量量化方法,通过对格型矢量空间的整体量化,达到了较好的压缩数据的成效。但依然存在缺陷当两组数相同时,编码端和解码端均需重新计算相应码本数值,这些重复的工作耗费了大量时间,并且重复传这些相同的数据,让原本就十分有限的比特数得不到充分的利用。

发明内容
本发明旨在针对现有技术的不足,提出一种利用缓存来加快量化数据取得的编码和解码方法,使其利用缓存技术快速得到量化数值,能够保证在原有量化条件下,在原有音频质量不变的基础上,减少比特数的使用量并降低解码端的运算量从而提高解码时间。
本发明是通过以下技术方案实现的本发明提出一种利用缓存来加快量化数据取得的编码方法,具体步骤如下1)选取缓存类型数据;2)选择合适的缓存空间;3)判断是否符合缓存类型数据;4)判断数据是否击中缓存数据;5)调整缓存序列;6)缓存数据标识位的添加;7)打包输出。
以下对各个步骤进行进一步说明1)选取缓存类型数据;将码本中出现几率最高的特征码字(Leader)选出来,遇到这类数据时便对其进行与缓存相关的操作,这些数据本发明称之为缓存类型数据。
2)选择合适的缓存空间根据缓存类型数据重复的概率,在缓存空间能保存的数据多少和缓存地址所需比特数之间取折中选择最佳缓存空间,使该方法能节省的比特数最多。缓存空间越大,在编码中能从缓存中查找到的数据就越多,但缓存地址所需比特数的开销也越大。比如选择缓存空间为16,则需要4比特数据来表示缓存地址,而选择32缓存空间,需要5比特数据表示缓存地址。
3)判断是否符合缓存类型数据;编码时,对待编码的数据进行检测,若其为缓存类型数据,则在缓存中查找是否有与其相同的数据。如果待编数据不是缓存类型数据,则直接计算其码本索引,输出并打包传给解码端。
4)判断数据是否击中缓存数据当判断得知待编码数据为缓存类型后,在缓存中查找是否有与其相同的数据,如果有,称之为“击中”,没有则称之为“未击中”。对于击中了的数据,输出其相应的缓存序列号,对于未击中的数据则将其放入缓存中,此时如果缓存已占满,则需要有一个数据被替换出来。
5)调整缓存序列每编码一个缓存类型数据后,都要调整缓存序列,缓存数据调整原则及编号变换方法如下a)如果数据刚入缓存,给予一个特定的编号;b)如果缓存中的数据被击中,则赋予其另一个特定的编号;c)编号为1的数据,最先被替换,每次数据被击中或者刚进来,编号都会有所改变。
6)缓存数据标识位的添加在实际应用中,由于解码端得到的是一连串的二进制数,所以必须添加标识位来标识不同的码本。同样,使用了缓存的数据也需要添加标识位。结合实际编码中分别属于各种码本的码字出现的概率和缓存类型数据出现的概率,选择最佳标识位,使得从整体上说编码花费的比特数最少。同时要注意,缓存类型数据的标识位不宜过长,否则编码缓存类型数据所需比特数比不使用缓存还多,则入不敷出。
7)打包输出对缓存类型数据的编码输出,如果击中了,则输出其在缓存中的地址;若未击中,则直接计算其码本索引作为输出。
不使用缓存时,量化参数输出打包格式如下[i0i1i2......nE2nE1nE0]其中nEk标识不同的码本,ik为leader在码本中的索引,写数据时依次写入[nE0i0]、[nE1i1]、[nE2i2]...[nEK-1iK-1]。
加入缓存后,本发明用nCk标识缓存数据,用iCk表示被击中数据在缓存中的地址,这样数据包就变成了如下的形式[i0iC1i2......nE2nC1nE0]。
本发明提出一种基于上述编码方法的利用缓存来加快量化数据取得的解码方法,解码为编码的逆过程,本发明中由于添加了缓存,使得解码时对许多重复的数据可以不用通过码本索引去码本中查找数据,而是直接从缓存中读取,这加快了解码端码本搜索的速度。具体步骤如下1)解包,判断是否利用缓存;解读编码端传过来的数据包,根据标识位判断数据在编码时是否利用了缓存。
2)解读数据,调整缓存序列对于利用缓存的数据,直接从缓存中读取,而不用去码本中搜索;而对于没有利用缓存的缓存类型数据,则直接解读其码本索引,从码本中查找数据。
每解码一个缓存类型数据后,都要调整缓存序列,缓存数据调整原则及编号变换方法如下a)如果数据刚入缓存,给予一个特定的编号;b)如果缓存中的数据被击中,则赋予其另一个特定的编号;c)编号为1的数据,最先被替换,每次数据被击中或者刚进来,编号都会有所改变。
由上可知,对于被击中的缓存数据,无需在庞大的码本中搜索,而是利用其与前面所出现数据的重复性,直接根据四位缓存地址在缓存中取数,在软件上特别是在硬件实现上,解码搜索速度增加2%。
本发明利用音频的帧内和帧间的相关性,在量化数据时,使用缓存保存曾经计算过的码本数值,运用于之后具有相同数据的数组,从而减少重复的运算量,有效地提升编码与解码的计算速度。能够保证在原有量化条件下,在原有音频质量不变的基础上,减少比特数的使用量并降低解码端的运算量从而节省解码时间。


图1为本发明编码端示意2为本发明解码端示意3为缓存中的数据替换过程,(a)某状态下缓存数据存放情况;(b)leader 3被击中后数据更新情况;(c)在(b)状态下新的数据进来后未被击中时缓存数据替换情况。
图4为实际编码中缓存数据替换过程,(a)某状态下缓存数据存放情况;(b)leader 3被击中后数据更新情况;(c)在(b)状态下新的数据进来后未被击中时缓存数据替换情况。
具体实施例方式
下面结合附图对本发明的实施例作详细说明本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和过程,但本发明的保护范围不限于下述的实施例。
如图1所示为基于缓存的快速码本搜索方法编码端示意图,编码过程详述如下1)选取缓存类型数据将预整形后的频谱数据分组,每八个数为一组,根据就近原则将这八个数量化为RE8集合上的点。该部分可以采用现有技术实现。
其中RE8=2D8∪{2D8+(1,Λ,1)},D8={(x1,x2,L,x8)∈Z8|x1+L+x8is even},故RE8集合中所有数据之和是4的倍数。
整个量化方法即先在2D8集合中找到离原始数据最近的点,再在2D8+(1,1,1,L,1)集合中寻找距离最近的点,最后在前后找出的两个点中间比较得出最终结果。其具体步骤如下a)zk=0.5*B’kb)对zk进行四舍五入运算,得到离zk最近的整数点zkc)y1k=2zkd)计算y1k所有项的和Se)如果S不是是4的倍数,就进行如下操作
-找出当abs(zk(i)-y1k(i))值为最大的i值点-如果zk(I)-y1k(I)<0,y1k(I)=y1k(I)-2-如果zk(I)-y1k(I)>0,y1k(I)=y1k(I)+2f)zk=0.5*(B’k-1.0)g)对zk进行四舍五入运算,得到离zk最近的整数点zkh)y2k=2zki)计算y2k所有项的和Sj)如果S不是是4的倍数,就进行如下操作-找出当abs(zk(i)-y2k(i))值为最大的i值点-如果zk(I)-y2k(I)<0,y2k(I)=y2k(I)-2-如果zk(I)-y2k(I)>0,y2k(I)=y2k(I)+2k)y2k=y2k+1.0l)分别计算e1k=(B’k-y1k)2和e2k=(B’k-y2k)2m)如果e1k>e2k,则选取y1k为最后的量化结果,否则输出y2k。
以上B’k是输入的频谱数据,属于浮点数据, 是输出的量化数据,属于整数数据。这样就得到了RE8集合上的点。
得到了RE8集合上的点后,将码本中出现几率最高的Leader选出来,在这里选取AMR-WB+的标准码本数据中特征码字为{1,1,1,1,1,1,1,1}和{2,2,0,0,0,0,0,0}的数据作为缓存类型数据。
2)选择合适的缓存空间对于缓存空间的选择,在这里选取了16个空间作为缓存空间,即如果用二进制表示的话,需要四个比特。
3)判断RE8数据是否符合缓存类型数据前面已经选定AMR-WB+的标准码本数据中特征码字为{1,1,1,1,1,1,1,1}和{2,2,0,0,0,0,0,0}的数据作为缓存类型数据。
编码时遇到这类数据,即在缓存中查找是否有与其相同的数据。如果待编数据不是缓存类型数据,则直接计算其码本索引,输出并打包传给解码端。
4)判断缓存类型数据是否击中当判断得知待编码数据为缓存类型后,在缓存中查找是否有与其相同的数据。对于击中了的数据,输出其相应的缓存序列号,对于未击中的数据则将其放入缓存中,此时如果缓存已占满,则需要有一个数据被替换出来。
5)调整缓存序列每编码一个缓存类型数据,都要对缓存空间进行调整,这里采用的调整原则是a)如果数据刚入缓存,则编号为4;b)如果缓存中的数据被击中,则沉入最底部,编号为16;c)编号为1的数据,最先被替换,每次数据被击中或者刚进来,编号都会有所改变。
下面结合图3、图4说明这一原则图3(a)为某状态下缓存中的数据存储情况,图中所示为16个缓存空间均已填满的情况,第一列为缓存空间编号,第二列为所存的码本数据。此时,若下一个数据与缓存中的某个数据相同,即击中该特征码字,比如击中第三个特征码字,则进行被击中数据沉入底部的操作,如图3(b)所示,Leader3沉入第十六个缓存空间,而leader3之后的数据均往上浮一个位置,如图中所示,leader4上浮到了第三个空间,leader16上浮到了第15个空间。
上面所述为击中的情况,而对于未击中的情况,则如图3(c)所示,由图3(b)到图3(c)表示新进来一个缓存数据后未被击中时缓存内数据的更新过程。新数据进入第四个缓存空间,原来的第四个空间里的数据上浮到第三个空间,第三个空间里的数据上浮到第二个空间,第二个空间里的数据上浮到第一个空间,而原来第一个空间里的数据则被替换出来了,不再存放在缓存内。第五个空间到第十六个空间里的数据则不作变动。
而在实际的编解码过程中,并不是每更新一次数据就改变一次数据在缓存中的位置,这样会引起大量不必要的数据交换。实际操作中,只是改变缓存空间的编号,并不变换数据在缓存中的存放位置。具体过程如图4所示。
图4与图3表示的是同样的过程,图4(a)为某状态下缓存里的数据存放情况,图4(b)表示击中leader 3后缓存中的数据处理过程,图4(c)表示未击中情况下新存入一个数据的过程。与图3不同的是,这里并不改变数据在缓存中的存放位置,而只改变空间的编号。具体过程是这样的击中编号为3的leader时,与它相应的缓存编号变为16,而原来编号从4-16的leader的编号都相应减1;未击中时,将新leader存入原来编号为1的leader的位置,而原来编号为1的leader则被替换掉了,不再存放在缓存中,原来编号为2、3、4的leader的编号都减1,其余leader对应的编号不变。这样既达到了数据更新的目的,又避免了大量的数据位置移动。
6)标识位的添加在AMR-WB+中,对于不同的码本都采用了添加标识位的方法,每一个码本的索引nk是这样表示的nk=0 基础码本为Q0nk=10 基础码本为Q2nk=110基础码本为Q3nk=1110 基础码本为Q4在实际解码中,由于需要识别是否添加缓存,需要缓存识别位。首先如果是没有击中的q2数据,本发明仍对其用10表示,但如果是击中的q2数据,则用1101表示,而如果是q3数据,则用1100表示,之所以这样做的原因是因为q2数据占的太多,如果对于q2数据采用上述方法,则得不偿失。这样的话,对于击中的数据,只需要八比特来表示,若不采用此方法而直接编码则需要十个比特。加入缓存后,每一个码本的索引及缓存的标识位nk是这样表示的nk=0基础码本为Q0nk=10 基础码本为Q2nk=1100 基础码本为Q3nk=1101 数据为击中了的缓存数据nk=1110 基础码本为Q4
也就是说对于击中了的数据,在传输中都可以节省两比特。当然,由于给q3的标识位增加了一位,导致q3数据编码比特数的增多,但由于低码率时q3数据较少,总的来说,减少的比特多于增加的比特,从编码总体效果上看,比特数是下降的。
7)编码打包输出对缓存类型数据的编码输出,如果击中了,则输出其在缓存中的地址,如图3(a)-(b),击中了leader 3,则输出为leader 3在缓存中的地址编号“3”。若新leader未击中,则计算其码本索引作为输出,与AMR-WB+中的操作相同。
在AMR-WB+中,量化参数输出打包格式如下[i0i1i2......nE2nE1nE0]其中nEk标识不同的码本,ik为leader在码本中的索引,写数据时依次写入[nE0i0]、[nE1i1]、[nE2i2]...[nEK-1iK-1]。
加入缓存后,本发明用nCk标识缓存数据,用iCk表示被击中数据在缓存中的地址,这样数据包就变成了如下的形式[i0iC1i2......nE2nC1nE0]nCk为4比特,iCk也为4比特,这样一个缓存数据总共需要8比特,比AMR-WB+中的10比特少了两个比特。
如图2所示为基于缓存的快速码本搜索方法编码端示意图,解码过程详述步骤如下1)解包,读取某一组数据的标识位,若标识位为1101,则说明这是一组缓存数据;标识位为1100,则为q3数据;其它标识位的含义与AMR-WB+中相同。
2)对于标识位为1101的数据,解读数据对应的缓存地址,然后直接去缓存取出该序列号对应的数据,即为RE8数据。在缓存中取数后,调整缓存序列,调整过程与编码端相同被击中的数据编号变为16,它之后的数据编号则相应都减1。
对于标识位为1101以外的数据,直接解读基础码本,码本索引和扩展码本,得到RE8数据,然后判断它是否为缓存类型数据,若不是,则不作其它处理,若是,则它为未击中的缓存类型数据,对应于图4(c)中的New Leader。将这个New Leader放入缓存中,调整缓存序列,调整方法与图4(b)-(c)的过程相同。
由上可知,对于被击中的缓存数据,无需在庞大的码本中搜索,而是利用其与前面所出现数据的重复性,直接根据四位缓存地址在缓存中取数,在软件上特别是在硬件实现上,大大加速了解码搜索速度。
权利要求
1.一种利用缓存来加快量化数据取得的编码方法,其特征在于,具体步骤如下1)选取缓存类型数据;2)选择缓存空间;3)判断是否符合缓存类型数据;4)判断数据是否击中缓存数据;5)调整缓存序列;6)缓存数据标识位的添加;7)打包输出。
2.根据权利要求1所述的利用缓存来加快量化数据取得的编码方法,其特征是,在步骤1)中,选取码本中出现几率最高的特征码字作为缓存类型数据。
3.根据权利要求1所述的利用缓存来加快量化数据取得的编码方法,其特征是,在步骤2)中,根据缓存类型数据重复的概率,在缓存空间能保存的数据多少和缓存地址所需比特数之间取折中选择最佳缓存空间,使能节省的比特数最多。
4.根据权利要求1所述的利用缓存来加快量化数据取得的编码方法,其特征是,在步骤3)中,对待编码的数据进行检测,若其为缓存类型数据,则在缓存中查找是否有与其相同的数据,如果待编数据不是缓存类型数据,则直接计算其码本索引,输出并打包传给解码端。
5.根据权利要求1所述的利用缓存来加快量化数据取得的编码方法,其特征是,在步骤4)中,当判断得知待编码数据为缓存类型后,在缓存中查找是否有与其相同的数据,对于击中了的数据,输出其相应的缓存序列号,对于未击中的数据则将其放入缓存中,此时如果缓存已占满,则需要有一个数据被替换出来。
6.根据权利要求1所述的利用缓存来加快量化数据取得的编码方法,其特征是,在步骤5)中,调整缓存序列具体为a)如果数据刚入缓存,给予一个特定的编号;b)如果缓存中的数据被击中,则赋予其另一个特定的编号;c)编号为1的数据,最先被替换,每次数据被击中或者刚进来,编号都会有所改变。
7.根据权利要求1所述的利用缓存来加快量化数据取得的编码方法,其特征是,在步骤6)中,缓存数据标识位的添加方法如下结合实际编码中分别属于各种码本的码字出现的概率和缓存类型数据出现的概率,选择最佳标识位,使得从整体上编码花费的比特数最少。
8.根据权利要求1所述的利用缓存来加快量化数据取得的编码方法,其特征是,在步骤7)中,打包输出采用如下格式[i0iC1i2......nE2nC1nE0]其中nEk标识不同的码本,ik为leader在码本中的索引,nCk标识缓存数据,用iCk表示被击中数据在缓存中的地址,写数据时依次写入[nE0i0]、[nC1iC1]、[nE2i2]...[nEK-1iK-1]。
9.一种基于权利要求1所述的利用缓存来加快量化数据取得的解码方法,其特征在于,具体步骤如下1)解包,判断是否利用缓存解读编码端传过来的数据包,根据标识位判断数据在编码时是否利用了缓存;2)解读数据,调整缓存序列对于利用缓存的数据,直接从缓存中读取,而不用去码本中搜索;而对于没有利用缓存的缓存类型数据,则直接解读其码本索引,从码本中查找数据。
10.根据权利要求9所述的利用缓存来加快量化数据取得的解码方法,其特征是,在步骤2)中,每解码一个缓存类型数据后,都要调整缓存序列,缓存数据调整原则及编号变换方法如下a)如果数据刚入缓存,给予一个特定的编号;b)如果缓存中的数据被击中,则赋予其另一个特定的编号;c)编号为1的数据,最先被替换,每次数据被击中或者刚进来,编号都会有所改变。
全文摘要
本发明涉及一种数字音频编码技术领域的利用缓存来加快量化数据取得的编码和解码方法。编码方法步骤为选取缓存类型数据;选择缓存空间;判断是否符合缓存类型数据;判断数据是否击中缓存数据;调整缓存序列;缓存数据标识位的添加;打包输出。解码方法步骤为解包,判断是否利用缓存;解读数据,调整缓存序列。本发明减少重复的运算量,有效地提升编码与解码的计算速度,能够保证在原有量化条件下,在原有音频质量不变的基础上,减少比特数的使用量并降低解码端的运算量从而节省解码时间。
文档编号H03M7/30GK101059958SQ200710038078
公开日2007年10月24日 申请日期2007年3月15日 优先权日2007年3月15日
发明者王薇, 刘彬彬, 刘佩林 申请人:上海交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1