一种可分级矢量量化编解码方法

文档序号:2832051阅读:403来源:国知局

专利名称::一种可分级矢量量化编解码方法
技术领域
:本发明涉及音频信号编解码
技术领域
,尤其是涉及一种可分级矢量量化编解码方法。
背景技术
:音频编码技术涉及矢量量化技术,目前较为常用的量化技术是格型矢量量化技术,在低码率的情况下用得相当普及。在3GPP(第三代合作伙伴)组织推荐的AMR-WB+(自适应多速率宽带)音频编码标准中TCX(变换码激励编码)部分所运用的量化技术就是建立在8维高斯格点上的多位率格型矢量量化技术。它作用于预整形后的频谱数裙,以八个数为一组,根据就近原则将这八个数量化为8维格集合上的点。之后选取不同的码本,输出对应的基本码本标识位,基本码本索引和扩展码本的值。经过对现有及技术文献的检索发现,美国专利US2005/0285764《Methodandsystemformulti-ratelatticevectorquantizationofasignal》(多码率格型矢量量化方法和装置)中提出的Voronoi扩展(最近邻扩展)方法已经在AMR-WB+标准总采用,即编码器通过Voronoi扩展装置来量化大值的矢量,即在矢量量化中遇到较大矢量值的时候,使用Voronoi扩展装置将基础码本按指数扩大,直到码本达到能将大矢量值包含进来。求Voronoi扩展码本值时,需要首先对输入的样点和生成矩阵做乘法运算得到矢量v,然后再通过公式y=mc+v(其中y为待量化矢量,c为其对应的基础码本中的码字,m为基础码本的放大倍数,v为其对应的Voronoi码本的码字)球的扩展后的码本c,并判断c是否位于基础码本中。但这种方法大量使用了乘法和加法操作,从而导致计算复杂度大增。检索中还发现,中国专利200810038192.x《基于变长分裂表的矢量量化高阶码本扩展编码及解码系统》采用的是变长分裂表实现高阶码本扩展编码和解码。该系统采用将大值分裂为低阶核心值和高阶分裂量之和的策略,低阶核心值采用格型矢量量化,高阶分裂量采用了基于变长分裂表的两级扩展方法,该方法避免了大量乘法运算。但随着扩展级数的增加,扩展分裂表的存储量也将随之成指数增加,将较大程度上消耗存储空间。
发明内容本发明针对上述现有技术的不足,提出了一种可分级矢量量化编解码方法。本发明的编码技术方案包括以下步骤步骤l.l,提取表示源信号的帧的点阵矢量I;步骤1.2,对点阵矢量^进行点阵压縮得到格点矢量y;步骤i.3,判断目标矢量r是否包括在基础码本c中;如果目标矢量F包括在基础码本C中,对目标矢量F在基础码本C中进行矢量量化索引査找,得到基础码本量化索引I并编码输出;如果目标矢量y不包括在基础码本C中,分裂目标矢量r得到基础部分矢量6me—r和扩展部分矢量extend—r,所述扩展部分矢量extend—7按照扩展层数"分裂为各层扩展部份矢量extend—K,1《Kn;对基础部分矢量kwe—r在基础码本C中进行矢量量化索引査找,得到基础码本量化索引I,对各层扩展部份矢量extend一《分别在扩展码本E中进行矢量量化索引查找,得到相应各层扩展量化索引extend—/,,1《/《";最后将所得基础码本量化索引I、各层扩展量化索引extend—和扩展层数"编码输出;所述扩展部分矢量extend一y按照扩展层数"分裂为各层扩展部份矢量extend_",具体方式如下,(1)计算扩展部分矢量extend—:T的扩展层数""=L!ogz(max(extend一_y,,extendj2,…,extendj》/+1其中,L,」表示上限取整,R为基础码本球壳半径,z为扩展码本球壳半径,extend—少,表示扩展部分矢量extend—y的第々维元素,A取1K,K为总维数;(2)根据扩展层数n计算得到每层扩展部份矢量{extend_K,extend—72,…,extend—7n}其中,第一层的扩展部份矢量extend—K计算如下,extend一K=mod((extend—r/Z)其中,第二层及以上的扩展部份矢量extend—^计算如下,i-lextend—y=mod(((extend—)7/i)-^ZJextend—"),Z')其中2^z^",且i为整数。本发明的相应解码技术方案包括以下步骤步骤2.1,从编码码流中提取基础码本量化索引I以及扩展层数";步骤2.2,根据扩展层数"解码量化索引,方式如下;如果11=0,使用基础码本C解码基础码本量化索引I,得到目标矢量y;如果nx),根据基础码本解码索引i得到基础部分矢量^;^一:r,根据各层扩展量化索引extend—/,合成扩展部分矢量extend—:r,1^/2";合成基础部分矢量^we一:r和扩展部分矢量extend—r,得到目标矢量y;所述根据各层扩展量化索引extend—/,合成扩展部分矢量extend一:r,具体方式如下,(1)根据扩展层数",读入extend—/^extend—/.."extend—/(2)根据各层扩展量化索引extend—/,査找得到各层扩展部份矢量extencL;^,,1《",扩展部分矢量extend一r由各层扩展部份矢量extend一i;合成,其合成公式extend—;r^i^Z"extend—兀,R为基础码本球壳半径,Z为扩展码本球壳半径。本发明采用多层扩展部份矢量量化编码,根据实际矢量球壳半径大小分配最少的比特数,实现多级矢量量化。并且提供了相应的解码方案。因为采用精细的分级粒度进行高阶码本扩展,既避免随着级数增加造成的存储空间耗损,又节省了对较小码字进行矢量量化时开销的比特数,同时降低了编解码量化算法的复杂度,因此本发明技术方案能适用于不同网络带宽。图l本发明实施例的可分级矢量量化编码流程图;图2本发明实施例的可分级矢量量化解码流程图;图3本发明的基础码本索引分配示意图。具体实施例方式以下结合附图对本发明的实施例做详细说明。本实施例在本发明方法前提下进行实施,给出了详细的实施方式与具体的操作过程,但本发明的实施例不限于下述的实施例。音频领域上一般涉及4,8,16维,本实施例中选取的是8维浮点矢量输入,实现基础码本和多层扩展编码过程,但本发明技术方案对其它数目维也适用。在比特数充足的情况下,实施例实现了叫格点到编码输出的无损编码;在比特数不充分或者是网络带宽限制的情况下,根据调整扩展层数,实现M格点的粗编码。为了降低码率,实施例还在本发明技术方案基础上进行了全零校验和奇偶变换。参见附图l,可分级矢量量化编码流程如下歩骤IOI,提取表示源信号的帧的点阵矢量i,将输入的每帧源信号切断为N维矢量Z,本实施例选取的维数1^=8。歩骤102,对输入浮点8维矢量压缩为i^8格点,即格点矢量F。步骤102具体实施时,/^8格型结构的格点具有两个特性,特性一是i^;格点8维矢量的分量和为4的倍数;特性二是iA格点8维矢量分量全部为奇数或者全部为偶数。i^8格点的定义如下碼=2Z^U+(U,1,1,U,1,1)〉,其中£>8=((X,…,X8)eZ81;q,…,X8为偶数l;根据朋8格点定义,将输入浮点8维矢量压縮为朋8格点,7={力,少2,...,3^。A为Y的第H隹值,A取1K,总维数K二8。步骤103,实施例对朋8格点做全零矢量判定。步骤103具体实施时,对1^0^,h,…,W作全零判定,如果对于任意"{1,2,...,8},均冇力=0,那么r为全零矢量,全零标志位^ra—ykg=l,直接转到步骤110;否则为非全零矢量,全零标志位zera一y^g-0。这样即可实现对格点矢量y进行全零校验。步骤104,对非全零的及£8格点进行全奇全偶判定,计算奇偶标记位o必—y/"g。步骤104具体实施时,根据7^8格点的第二特性,/^8格点y的每维矢量将全部是奇数或者全部是偶数,奇偶校验位o^/—y/flg为,ocW一^/7ag二」Y为全奇格点;j)Y为全偶格点;步骤105,根据奇偶标记位o^^一y"g对非全零的i^8格点进行奇偶算法变换。步骤105具体实施时,具体的奇偶变换算法如下,得到变换后输出8维格点矢量y,0^,^,…,少Jodd—flag=l;l+",^,…,yjodd—flag=0;步骤106,根据矢量半径,确定是否进行多层扩展编码。步骤106具体实施时,在基础矢量量化编码中选择的码本矢量半径限制在一定的范围内,通过8维格点矢量F半径的判定,确定是否基础码本能完全覆盖编码格点矢量r。本发明实施例设置的基础码本C的半径为R=4,即如果^<4,r^max(l少」,l少2l,…,l;;81),那么格点矢量7在基础码本c之内,基础部份矢量6"^—:r-:r,并设置扩展层数"=0,进入步骤ios。否则格点矢量r不在基础码本C之内,则进入步骤107。步骤107,确定进行多层扩展,作8维矢量分裂,分裂为8维基础部分矢量和8维扩展部份矢量。步骤107具体实施时,将8维格点矢量y分裂成基础部份矢量Z)"se—:r和扩展部份矢量extend—r,其中基础部份矢量6"化—r转入步骤108,扩展部份矢量extend一F转入步骤109,具体的分裂算法如下,可见y由基础部份矢量^we一;r和扩展部份矢量extend—y合成,其分解算法为Zw化—:r=mod(7,4)和extend一7=|7-mod(J,4)|。例如,如果8维矢量1^{-7,-5,-3,-1,1,3,5,7},由—F=mod(7,4)得,基础部份矢量&"—y={-3,-1,-3,-1,1,3,1,3},根据公式extend—]7-}"—mod(y,4),J广展咅卩伤、矢量extend—F={4,4,0,0,0,0,4}。步骤108,对基础部份矢量^se一;r或是不需扩展编码的s维格点矢量y进行格式矢量量化索引编码。步骤108具体实施时,本发明实施例设置的基础码本最大球壳半径为R=4,艮卩(kwe一力,k^U2,…,6ose一7j中|kzse_j^|<4,卜asuj表示基础部份矢量Zwwe—y的第A维元素,A取l8。本发明实施例的基础码本C分为Q1,Q2,Q3三个码本,一共有N=9个绝对引导项,绝对引导项包括半径从1一4的所有奇数引导项。绝对引导项每维矢量均为非负整数,而且按照从大至小的顺序进行排列。基础码本C的4个子码本,所对应的绝对引导项如表1所示,其中X表示绝对引导项在码本Q1,Q2,Q3之一选中表l绝对引导项表<table>tableseeoriginaldocumentpage10</column></row><table>基础码本的矢量量化索引方式采用了三级索引,绝对引导项索引,符号引导项索引和全局索引表。如附图3,第一层是符号变化,第二层是矢量的排列变化,因此对于任意一个在基础码本之中的输入矢量,可以先求取其绝对引导项,与绝对引导项表中的第一项、第二项...第N项绝对引导项进行对比,找出索引表的起始点绝对引导项;然后确定符号变化信息,找到符号引导项的第二层入口地址,即在绝对引导项的基础上增加符号后的符号引导项;最后经过矢量的轶,即增加排列变化,来找到矢量的索引值,将该索引值作为基础码本量化索引/值转入步骤109。举例说明三级索引的具体步骤,如果输入矢量为{-3,1,3,1,-1,3,1,3},那么一级索引得到第五项绝对引导项,即{3,3,3,3,1,1,1,1};符号变化后的二级索引是将符号引导项{3,3,3,-3,1,1,1,-1}对应绝对引导项{3,3,3,3,1,1,1,1},即査表得到索引号;三级索引是将{3,3,3,-3,1,1,1,-1}进行排列计算得到全局索引表中的索引值,此时实现了矢量{-3,1,3,1,-1,3,1,3}的索引值査找。步骤109,对8维扩展部份矢量进行分级量化得到分级层数n和每层索引值。步骤109具体实施时,扩展部份矢量extend—r采用多级扩展的矢量量化方法,对基础码本不能覆盖的部分进行扩展编码,设置扩展部份矢量量化的半径为Z=2,具体的可分级扩展方法如下,计算扩展部份矢量extend一y的扩展层数"<formula>formulaseeoriginaldocumentpage11</formula>其中,L,」表示上限取整,如果矢量球壳半径越大,扩展层数"越大。如表2所示,所谓矢量球壳半径即为max(extend—x,extend—y2,.."extend—少8)<table>tableseeoriginaldocumentpage11</column></row><table>n=04n=l8n=216n=332n=464n-5128n=6256512…计算得到每层扩展部份矢量{extend—,extend—&,…,extend_i;}第一层的扩展部份矢量extend一i;计算如下,extend—K=mod((extend—F/4),2)第二层以上的扩展部份矢量extend_计算如下,i一lextend—"=mod(((extend—7/i)—^"extend—),Zj)其中2SK",且/为整数;中间变量j用于标识已经算出来的数层扩展部分矢量,以便基于这个基础之上计算下一层的扩展部分矢量。本发明对每层扩展部份矢量采用矢量量化编码方法,每层编码耗费8bitS,W层扩展部份矢量耗费比特数为8X";每层扩展部份矢量量化索引值extend—/,为,extend—=S2k"extend—>^hi,其中1^'S",且f为整数。本发明以一级扩展码本的码本矢量为例,一级扩展码本共有256项矢量,需要8比特进行编码。选取一级扩展码本的码本矢量和基础码本,能够覆盖所有的球壳半径不大于8的矢量。对于目标矢量1^(^,_F2,...,A},|^|||<-8,而基础码本可以查找所有球壳半径不大于4的矢量,因此基础码本可生成的矢量为6a"—r,kwe—&||<=4,由于扩展码本中extend—h取值有两种,分别是0和4。例如,F={-7,-5,-3,-1,1,3,5,7},由歩骤107得到的扩展部份矢量为{4,4,0,0,0,0,0,4},用w=log2(max(extend一j,,extend—少2,...,extend一y8)/4)+1,i十算f寻至ij扩展层数"=1,第一层扩展部份矢量为extend—K={1,1,0,0,0,0,0,1},根据扩展码本E的球壳半径Z=2,矢量量化索引计算公式为extend—/,.=^2k"extend—&,搜索计算得到第一层扩展量化索引为extend—/=131,艮卩f取l;为便于理解本发明技术方案,另以二级扩展码本的码本矢量为例,对于目标矢量7={^,72,…,少8},叫<=16。以7={-15,-13,-11,-9,9,11,13,15}为例,基础码本可以查找所有球壳半径不大于4的矢量,艮卩6""—f={-3,-1,-3,-1,1,3,1,3},用w=log2(max(extend一^,extend—>>2,…,extend一;v8),4)」+1,计算得至ij扩展层数"=2,扩展部分矢量为extend—7={12,12,8,8,8,8,12,12},第一层扩展部份矢量extend—]^={1,1,0,0,0,0,1,1},第二层扩展部份矢量extend—72={1,l,1,1,1,1,1,1}。扩展码本E的球壳半径Z=2,矢量量化索引计算公式为extend—/,=Z2k—、xtendj,t,量化后的索引为extend—A=195,extend—/2=255,艮P/分别取1、2。步骤IIO,编码端输出,包括奇偶校验位oc^—yZag、全零标志位zero—yag、索引值、分级层数n打包输出。所谓索引值分两种情况如果目标矢量y包括在基础码本C中,未进行扩展,直接将基础码本量化索引I编码输出。否则对应扩展的情况,则是将所得基础码本量化索引I、各层扩展量化索引extend—/,和扩展层数"编码输出。针对按照以上方式生成的量化编码结果,本发明实施例的可分级矢量量化解码流程参见附图2:步骤201,将编码端传输过来的数据解包得到各个参数。步骤201具体实施时,将编码端传送来的打包作为输入,解包得到全零标志位^ra—y"g,奇偶校验位o必一/唯,基础码本索引I值,扩展层数"。步骤202,判定输出全零标志位zwo—/7%值。步骤202具体实施时,如果zm—y/"g为1,输出8维矢量7为{0,0,0,0,0,0,0,0},直接进入步骤208结束该8维矢量解码,进入下一8维矢量解码;如果zero—y。g为0,那么进行后续步骤。步骤203,判定编码端是否进行了扩展编码。步骤203具体实施时,如果进行了扩展编码,将进行歩骤204和步骤205,否则只进行步骤204,具体判定方法如下,如果"=0,那么判定为该编码输入端作了基础编码,如果">0,那么该解码输入端作了基础编码和扩展编码两部分。步骤204,根据基础码本量化索引I査找基础码本C到/t^格点的基础部份14矢量&化—7。步骤204实现基础部分解码具体实施时,根据基础码本量化索引I的索引值査找格型矢量量化索引到i^8格点的基础部份矢量^"—r,索引码本是半径为R=4的基础码本C,和编码端所用码本一致。步骤205,从编码码流提取每层扩展编码输出的各层扩展量化索引extend_/;,l&^";根据扩展层数"和各层扩展部份矢量extend—};得到扩展部分矢量extend一;r,1S/S"。步骤205扩展部分解码具体实施时,根据扩展层数",读入extend/={extend—/,extend—/2,...,extend—/}利用逆扩展算法得到各层扩展部份矢量extend—K,具体算法如下,8extend一《=Z2M((extend—/a)JM)(2卜1》"i,总的扩展部份矢量extend—r由各层扩展部份矢量extend—j;合成,其合成算法为,extend—F"f2"extend一《'■=i步骤206,由基础部份矢量^化—y和扩展部分矢量extend—y合成8维格点矢量r。步骤206具体实施时,8维格点矢量F-extend—F+kwe—y。步骤207,根据输出奇偶标志位o^/—刀"g值,对输出8维格点矢量r作奇偶校验。步骤207具体实施时,根据输出奇偶标志位oc^Ly"g值,对输出8维格点矢量r作奇偶校验,具体奇偶变换算法如下,7=7+|認jag-1|步骤20S,将解码结果输出,输出结果为格点矢量:r。步骤208具体实施时,将解码结果输出,输出的格点矢量y为8维矢量。权利要求1.一种可分级矢量量化编码方法,其特征在于包括以下步骤,步骤1.1,提取表示源信号的帧的点阵矢量X;步骤1.2,对点阵矢量X进行点阵压缩得到格点矢量Y;步骤1.3,判断目标矢量Y是否包括在基础码本C中;如果目标矢量Y包括在基础码本C中,对目标矢量Y在基础码本C中进行矢量量化索引查找,得到基础码本量化索引I并编码输出;如果目标矢量Y不包括在基础码本C中,分裂目标矢量Y得到基础部分矢量base_Y和扩展部分矢量extend_Y,所述扩展部分矢量extend_Y按照扩展层数n分裂为各层扩展部份矢量extend_Yi,1≤i≤n;对基础部分矢量base_Y在基础码本C中进行矢量量化索引查找,得到基础码本量化索引I,对各层扩展部份矢量extend_Yi分别在扩展码本E中进行矢量量化索引查找,得到相应各层扩展量化索引extend_Ii,1≤i≤n;最后将所得基础码本量化索引I、各层扩展量化索引extend_Ii和扩展层数n编码输出;所述扩展部分矢量extend_Y按照扩展层数n分裂为各层扩展部份矢量extend_Yi,具体方式如下,(1)计算扩展部分矢量extend_Y的扩展层数n其中,id="icf0002"file="A2009100631710002C2.tif"wi="5"he="5"top="217"left="43"img-content="drawing"img-format="tif"orientation="portrait"inline="yes"/>表示上限取整,R为基础码本球壳半径,Z为扩展码本球壳半径,extend_yk表示扩展部分矢量extend_Y的第k维元素,k取1~K,K为总维数;(2)根据扩展层数n计算得到每层扩展部份矢量{extend_Y1,extend_Y2,...,extend_Yn}其中,第一层的扩展部份矢量extend_Y1计算如下,extend_Y1=mod((extend_Y/R),Z)其中,第二层及以上的扩展部份矢量extend_Yi计算如下,<mathsid="math0001"num="0001"><math><![CDATA[<mrow><msub><mrow><mi>extend</mi><mo>_</mo><mi>Y</mi></mrow><mi>i</mi></msub><mo>=</mo><mi>mod</mi><mrow><mo>(</mo><mrow><mo>(</mo><mrow><mo>(</mo><mi>extend</mi><mo>_</mo><mi>Y</mi><mo>/</mo><mi>R</mi><mo>)</mo></mrow><mo>-</mo><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>i</mi><mo>-</mo><mn>1</mn></mrow></munderover><msup><mi>Z</mi><mi>j</mi></msup><msub><mrow><mi>extend</mi><mo>_</mo><mi>Y</mi></mrow><mi>j</mi></msub><mo>)</mo></mrow><mo>,</mo><msup><mi>Z</mi><mi>i</mi></msup><mo>)</mo></mrow></mrow>]]></math></maths>其中2≤i≤n,且i为整数。2.—种可分级矢量量化解码方法,其特征在于包括以下步骤,步骤2.1,从编码码流中提取基础码本量化索引I以及扩展层数";步骤2.2,根据扩展层数"解码量化索引,方式如下;如果r^0,使用基础码本C解码基础码本量化索引I,得到目标矢量r;如果nX),根据基础码本解码索引i得到基础部分矢量6""一r,根据各层扩展量化索引extend—/,合成扩展部分矢量extend一r,1SK";合成基础部分矢量6"化—F和扩展部分矢量extencL;r,得到目标矢量F;所述根据各层扩展量化索引extend—,.合成扩展部分矢量extend—y,具体方式如下,(1)根据扩展层数",读入extend—extend—/"."extend—/"(2)根据各层扩展量化索引extend—/,査找得到各层扩展部份矢量extend—K,,1,扩展部分矢量extend一:r由各层扩展部份矢量extend—"合成,其合成公式extend—l^W^Zi-Extend—《,R为基础码本球壳半径,Z为扩展码本球壳半径。全文摘要本发明提出了一种可分级矢量量化编解码方法。编码时,提取表示源信号的帧的点阵矢量X;对点阵矢量X进行点阵压缩得到格点矢量Y;判断目标矢量Y是否包括在基础码本C中,根据判断结果进行多级扩展。解码时,从编码码流中提取基础码本量化索引I以及扩展层数n;根据扩展层数n解码量化索引。本发明根据具体的码本半径,确定扩展层数,实现了精细的可分级矢量量化。文档编号G10L19/00GK101599273SQ20091006317公开日2009年12月9日申请日期2009年7月14日优先权日2009年7月14日发明者刘元元,成周,希杜,杨玉红,胡瑞敏,昭谢申请人:武汉大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1