可藉由參考結合附圖之以下描述而最佳地理解實施例及其進一步目的及優點。
在所有圖式中,相同參考標示用於類似或對應元件。
檢索演算法將PVQ結構及索引迭代地分解成前置符號區段。依使得待檢索之已找到PVQ向量中之非零元素之數目(始終為一前置符號)被獨立地提取之一方式進行該分解。此低複雜符號提取進一步實現用於經運行時間計算之PVQ檢索偏移之一減小動態範圍之建立。
PVQ檢索偏移用於PVQ索引合成及PVQ索引分解中。由於結構化PVQ量化器本質上可處置維數(l)及單位脈衝(k)之一大變動及因此位元速率之一大變動,所以通常僅計算針對待編碼之當前維數及單位脈衝之當前數目的偏移。位元速率對應於log2(N
PVQ
(l, k))以導致可行PVQ偏移之巨量。偏移儲存於一動態RAM中。然而,一l,k受限制之PVQ量化器實施方案可使用查表來儲存檢索/解檢索偏移。
為更佳地理解本發明,參考附錄A中所收集之IETF/OPUS搜尋/檢索/解檢索先前技術描述之提取可為有用的。
圖1中繪示使用本發明中所呈現之方案之一實例性音訊編碼系統。此係一實例性音訊編解碼系統,其具有使用MPVQ檢索及解檢索之一編碼器10及一解碼器60。第一部分對應於包括於一編碼器10中之部分且圖之第二部分對應於包括於一解碼器60中之部分。將一輸入樣本1提供至編碼器10。編碼器10提供表示輸入向量之一位元串流2作為至少一MPVQ索引及一前置符號。將一位元串流2' (較佳地,其本質上等於來自編碼器10之位元串流2)提供至解碼器60,其中解碼器將該MPVQ索引及該前置符號解碼成一重建樣本3。通常,提供該MPVQ索引及該前置符號作為單獨碼字。
圖2中更詳細地繪示一編碼器10之一實施例。接收表示一音訊/視訊樣本x之輸入樣本1。在一範數計算器12中計算一範數因數g。一範數量化器14建立表示輸入向量之範數的範數量化位元(NORMQ位元)。通常,此等位元經提供以包含於位元串流中。由範數因數將輸入向量正規化成一正規化向量4。範數量化器14亦視需要將範數因數(例如,作為NORMQ位元)提供至一位元分配區段16,位元分配區段16計算N及K (即,整數向量之維數及單位脈衝之總數)之適合值或自查找表擷取N及K之適合值。可視需要將此等值提供於傳出位元串流中或在接收側處自位元串流中之前述參數導出此等值。一PVQ外形搜尋區段18將正規化向量4轉換成用於PVQ之一整數輸入向量5。將整數輸入向量5提供至其中發生實際MPVQ檢索之一MPVQ檢索區段20。此將在下文中進一步更詳細地加以討論。將作為一第一碼字之一前置符號15及作為一第二碼字之一輸出索引(一MPVQ索引25,通常伴隨MPVQ大小)自MPVQ檢索區段20輸出至一位元串流多工器(MUX) 30。彼處,將不同資訊量合併成自位元串流MUX 30輸出之一單一位元串流2。
圖3中更詳細地繪示一解碼器60之一實施例。將一傳入位元串流2'提供至一位元串流DEMUX 80。此處,將資訊之不同部分分成部分。將支援位元分配之資訊(諸如N值及K值或NORMQ位元)提供至一位元分配區段62,位元分配區段62將N及K之相關值輸出至一大小/偏移計算區段64及一MPVQ解檢索區段70。大小/偏移計算區段64基於N值及K值以及自重建MPVQ索引25'之資訊25' (通常伴隨MPVQ大小)獲得之MPVQ大小而計算偏移8,且將偏移8提供至MPVQ解檢索區段70。亦將作為一第二碼字之重建MPVQ索引25'及作為一第一碼字之重建前置符號15'提供至其中發生實際MPVQ解檢索之MPVQ解檢索區段70。此將在下文中進一步更詳細地加以討論。將一整數輸出向量6' (其係編碼器中之整數輸入向量之一重建向量)輸出至其中實現正規化之一單位能量正規化區段68。一範數量化器66使用NORMQ位元來提供一範數因數
![Figure 02_image003](https://patentimages.storage.googleapis.com/cb/4f/a4/de26d54b7abc9d/02_image003.png)
。接著,範數因數用於形成最終輸出向量
,最終輸出向量
係原始音訊/視訊樣本之一重建樣本3。
應注意,MPVQ方案不受限於圖2及圖3中之特定系統,而是亦可用於基於PVQ之任何量化系統(例如一線性預測(LP)聲碼器中之時域信號或一視訊編解碼器中之變換域係數)之檢索。
例如,在圖2及圖3中,「BITSTREAM MUX」及「BITSTREAM DEMUX」區塊可視需要分別採用一算術編碼器及解碼器來限制PVQ索引捨位損失,如本發明中之別處所解釋。「MUX」及「DEMUX」區塊需要知道各短PVQ碼字之整數大小(MPVQ大小)以能夠提取用於MPVQ(n, k)碼字之正確位元數。若無一算術編碼器/解碼器,則MUX/DEMUX將在剖析用於MPVQ(n, k)短碼字之位元串流時使用ceil(log2(MPVQ-size))整數(非分數)位元。若具有一算術編碼器/解碼器對,則由該算術編碼器/解碼器對採用之位元解析度及(若干)分佈函數將決定由「MUX」及「DEMUX」區塊使用之分數位元。該算術編碼器/解碼器對亦將需要整數MPVQ大小來判定其應如何剖析自位元串流解碼之位元(此時為分數)。
熟悉此項技術者已熟知此等操作,且在下列描述中,假定此等操作係一PVQ系統之一固有部分。
在圖2之編碼器中,將MPVQ大小計算為MPVQ檢索迴圈之一部分且接著將MPVQ大小提供至MUX。在圖3之解碼器中,首先調用計算MPVQ偏移及MPVQ大小之一函數,接著使用此整數大小資訊來自MUX提取碼字。接著,將提取索引(第二碼字)及初始偏移提供至MPVQ解檢索區塊。
在一些應用中,圖2及圖3之編碼器部分及/或解碼器部分可包括於一通信網路之一節點或一使用者設備中。通信網路之節點可為(例如)一無線電網路節點,例如一基地台。可藉由有線及/或無線傳輸而執行編碼器部分與解碼器部分之間之通信。編碼器部分及解碼器部分亦可單獨操作。例如,編碼器部分可為一記錄設備之一部分,且所得位元串流可經儲存以供未來使用。同樣地,解碼器部分可為一播放設備之一部分,其(例如)自一儲存器擷取一位元串流且使該位元串流解碼成音訊/視訊信號。
一MPVQ列舉方法之一實施例係使用一基於發明組合量值及單一前置符號位元之列舉(N
PVQ
(l, k)=2*N
MPVQ
(l, k)),其中MPVQ方案較佳地使用一迭代加法量值列舉,該迭代加法量值列舉進一步較佳地基於剩餘向量中之第一非零元素之一既存前置符號。
先前技術之IETF/OPUS編解碼器使用原始費歇(Fischer)列舉之一最佳變型,其具有經改良之逐列、直接列偏移計算遞迴、透過回繞乘法之快速準確整數除法及直接非遞迴方程偏移及大小計算(若維數l及單位脈衝數k足夠低以允許此等直接計算)。參閱用於IETF/OPUS音訊PVQ實施方案及OPUS-c-code參考之RFC文字本描述提取之附錄A。為降低OPUS之實施方案複雜性,將一PVQ碼字之最大索引值限制於2
32
-1 (可表示為無符號32位元整數運算(其係用於諸多桌上型電腦之一典型格式)之一索引值)。
在本發明之一第一部分中,描述使用一前置符號方法之一前置符號模組化PVQ (MPVQ)列舉。此新的改良MPVQ列舉使用相同通用技術(例如逐列、直接列偏移計算遞迴、精確整數除法及直接非遞迴方程偏移及大小計算),但藉由採用另一遞迴方案。偏移及大小計算之動態範圍被減小以實現短PVQ碼字檢索之一有效實施,其中使可被有效檢索及解檢索之一碼字中之輸入項之數目之大小(一個以上位元)加倍。
在一特定實例中,此檢索/解檢索改良方案尋求實現用於33位元索引之一低複雜性指派程序以擴充可由1個位元使用之最大可行PVQ (或替代地,尋求藉由修正列舉使得吾人可將帶符號算術用於一32位元跨距PVQ而使最大可行PVQ保持(1+31)個位元)。
將一偏移參數U(n,k)定義為整數向量之維數n及L1範數k,偏移參數U(n, k)不具有一前置零且不具有前置值k,具有一前置正值且具有一正前置符號。該前置符號係遞迴之方向上之當前值之後遇到之第一符號。
將一偏移參數A(n, k)定義為整數向量之維數n及L1範數k,偏移參數A(n, k)具有一正前置值且不具有一前置零。
接著,A(n, k)=1+2*U(n, k)。「1」來自單一初始「k」值向量,且因數「2」歸因於下一前置符號之正負號可能性。A(n, k)亦等於(N
PVQ
(n, k-1)+N
PVQ
(n-1, k-1))/2,其等之一總和已用作為先前技術中之一檢索偏移。
參閱圖4,其係U(n, k)及其與具有N
MPVQ
(n, k)向量之MPVQ(n, k)結構中之向量之總數之關係的一表格式結構圖。該圖繪示一基本MPVQ迭代之一實施例之一高階示意圖,該基本MPVQ迭代包含較佳最低有效位元(LSB)前置符號列舉變動,使用下一前置符號資訊之LSB優先「交錯」。在一較佳解決方案中,對各pos[0]唯一振幅k_delta (例如,k_delta=k-1或k-2區塊)執行前置符號交錯。若pos[0]值=「k」,則消耗pos[0]中之所有單位脈衝且迭代可停止。若pos[0]值係非零(下一正或負前置符號),則首先遇到之非零位置符號需要1個位元之資訊。此作為LSB位元儲存於始終為偶數大小之「2*U(n-k)」子區段中。若pos[0]值=「k」,則將迭代擴充至不具有任何新前置符號資訊之pos[0]。
下文中描述此第一部分之基本檢索/列舉方法。吾人已知,待檢索/列舉之PVQ向量係在[0...2
B+1
-1]範圍內且適用於(B+1)個位元。此處,B=32個位元通常用於當前DSP硬體。例如,若吾人具有PVQ(N, K)(即,維數N、K個單位脈衝),則索引之數目N
PVQ
<=(2
B+1
-1)。
圖5繪示用於音訊/視訊樣本之錐型向量量化檢索之一方法之一實施例之步驟之一流程圖。該方法開始於步驟400。在步驟402中,獲得表示該等音訊/視訊信號樣本之一整數輸入向量。該整數輸入向量具有數個整數值係數。在步驟404中,自該整數輸入向量提取一前置符號。該前置符號係該整數輸入向量中之一終端非零係數之一符號。該終端非零係數係該整數輸入向量中之一第一非零係數及一最後非零係數之一者。在步驟406中,使用一錐型向量量化列舉方案來將該整數輸入向量檢索成一輸出索引,該輸出索引與該前置符號一起表示該等音訊/視訊信號樣本。該錐型向量量化列舉方案經設計以忽略該終端非零係數之該符號。在替代實施例中,可與步驟404同時地執行步驟406,可與步驟404一起執行步驟406,或可在步驟404之前執行步驟406。在步驟408中,將分別作為一第一碼字及一第二碼字之該前置符號及該輸出索引輸出成一傳出位元串流。程序結束於步驟449。
在一特定實施例中,藉由一迭代列舉程序而執行檢索步驟406。在一進一步特定實施例中,該迭代列舉程序包括一迭代步驟之重複,其中選擇該整數輸入向量之一當前係數供考量。該迭代步驟繼而包括:找到與在該整數輸入向量之該當前係數之前經處理之該整數輸入向量之所有係數相關聯之一偏移參數;及依據該偏移參數而增大一累積索引。藉由依次選擇該整數輸入向量之係數作為當前係數而繼續該重複,至少直至已考量該整數輸入向量中之所有係數。該迭代列舉程序包括一終止步驟,其中在已結束所有迭代步驟之後將該輸出索引設定成等於該累積索引。
圖6繪示一通用階層上之一MPVQ檢索之一實施例。下文係實施MPVQ檢索之發送側態樣之詳細方塊圖。MPVQ檢索程序開始於步驟200,在步驟210中,自編解碼位元分配迴圈達成VQ維數N及單位脈衝數K。在步驟220中,自PVQ搜尋達成PVQ向量「PVQ-vec」。在步驟230中,藉由找到前置符號位元及MPVQ大小而組成MPVQ索引。在步驟240中,將前置符號發送至位元串流,且在步驟245中,將索引發送至位元串流。程序退出於步驟249。
與圖5之流程圖相比較,步驟210及220可被視為包括於步驟402中。類似地,步驟404及406被視為包括於步驟230中。最後,步驟240及250被視為包括於步驟408中。
圖7A至圖7B繪示MPVQ索引合成之一實施例,且(例如)提供為圖6之步驟230。在圖7A至圖7B中,合成MPVQ索引及找到前置符號及MPVQ大小開始於步驟300。此實施例係基於使用一LSB位置中之向量之下一符號的一解決方案。在步驟302中,藉由一已知偏移迭代基本情況而初始化程序。在步驟304中,設定當前位置參數。在此實施例中,該檢索自向量之末端運行朝向開端。依與解檢索相反之位置順序運行檢索,進一步參閱下文。此意謂:當在各迭代步驟中增大累積索引(如由一前置符號所引起)時,依據整數輸入向量中之前一前置符號而將一最低有效位元給予累積索引。
在替代實施例中,可在檢索與解檢索之間改變向量位置順序。
在步驟306中,使一累積索引初始化為零。參數k_acc表示經分析之累積單位脈衝,且被初始化為零。旗標got_sign_flag指示是否提取一符號,且最初亦被設定為零。在步驟308中,將來自向量之一當前係數「vec(pos)」視為一參數「val」。在步驟310中,若已找到一第一符號且當前係數不等於零,則程序繼續至步驟312,否則,程序直接繼續至步驟314。在步驟312中,將來自前一步驟之一保存前置符號資訊放置於一LSB中。前一步驟中之一負號對應於值next_sign_ind=1且一正號對應於值next_sign_ind=0。在步驟314中,開始搜尋目前符號。若值等於零,則不存在新符號且應轉送最後符號,其意謂:程序直接繼續至步驟324 (圖7B)。若當前係數並非為零,則首先在步驟316中設定已找到之一符號旗標。此事實上僅需用於第一符號,但在本實施例中,為簡化流程,每當找到一非零值時,設定旗標。在步驟318中,next_sign_ind (即,下一符號之指示符)經設定以指示一正號。在步驟320中,檢查當前係數之值是否真為正。若發現當前係數之值係正的,則流程繼續至步驟324,否則,next_sign_ind (即,下一符號之指示符)經改變以指示一負號。
在步驟324中,根據基於經分析之目前維數n及累積單位脈衝之一偏移值而增大累積索引。換言之,將累積索引累計成一數目,該數目對應於整數向量之維數n及L1範數k_acc,具有一正前置值,且不具有一前置零。在本實施例中,A偏移用於修正累積索引。如將在下文中進一步討論,在其他實施例中,可代以使用U偏移,或可使用A偏移及U偏移之一組合。接著,在步驟326中,藉由添加當前係數之值而更新k_acc參數。若尚未考量向量中之所有位置(即,參數「pos」大於零),則準備下一重複。在步驟330中,增大維數且更新偏移,如將在下文中進一步更詳細討論。在步驟332中,使當前係數之位置減去一個步階。接著,程序返回至步驟308 (圖7A)以進行使用來自待考量之整數輸入向量之一新當前係數之另一重複。
若已考量向量中之所有位置,則流程繼續至步驟334,其中將前置符號設定成等於當前下一符號指示。換言之,向量中之第一符號尚未包含於累積索引中且被提取為一單獨參數,其等不影響剩餘檢索。此意謂:所使用之錐型向量量化列舉方案忽略第一非零係數之符號。相反地,此符號自檢索程序「逐」出且表示為「前置符號」或「lead_sign」。其他符號通常亦在迭代期間被提取,但亦將影響索引累積。最後,在步驟336中,計算MPVQ大小,該MPVQ大小在本實施例中,可依兩種不同方式執行該計算。累積索引退出此程序作為MPVQ錐型向量量化列舉方案之輸出索引。程序結束於步驟349。
上述結構操作以在一選定方向上使待編碼一個步階之非零向量值之所有符號移位至下一非零係數。若不存在下一位置(即,程序在原始向量外),則儲存該符號作為剩餘lead_sign。此符號移位可作為一單獨預處理步驟而完成(如下文中進一步可見),或在一較佳實施例中,此符號移位可在總維數迭代迴圈內完成(如同上文)。此時,可傳輸lead_sign (+1或-1)作為位元串流中之一單獨位元,作為lead_sign_ind (0或1)。
使用一經修正之檢索/列舉方案來對原始向量之剩餘移位符號及振幅進行編碼,該方案使用始終恰好已自原始PVQ向量提取/移出一個符號之事實。此提取與原始PVQ目標向量PVQ-vec中之非零元素之數目無關。
下文描述三個實例以支援圖7A及圖7B之結構之理解。該等實例具有一極低複雜性以使描述保持受限且使全部實例可感知。然而,在典型實例中,維數及單位脈衝數更高很多。然而,原理係相同的。
在具有維數N=3及單位脈衝數K=5之一第一實例中,考量一整數輸入向量[2, 2, -1]。執行初始化且將「pos」設定為「2」,將索引k_acc設定為「0」,維數n=1,且未設定got_sign_flag (=0)。選擇第一值「val」作為向量之係數2,即,-1 (向量之係數編號為:0、1及2)。由於尚未評估非零值,所以尚未提取符號,且流程基於所偵測之符號而跳過索引之調整。藉此,流程直接轉至不等於零之值「val」之評估。此觸發待設定之符號旗標。已偵測到一第一符號,且根據所偵測之符號而設定next_sign_ind,在此情況中,next_sign_ind=1,即,一負值(-1)。接著,使累積索引累計一偏移A(1, 0),偏移A(1, 0)對應於整數向量之維數1及L1範數0,偏移A(1, 0)具有一正前置值且不具有一前置零。A(1, 0)等於0。此時,累積索引係index=0。接著,使累積k參數k_acc更新達「val」之絕對值,即,更新達1個單位,即,k_acc=1。
藉由使數目n加1 (即,n=2)且使位置指示符「pos」減1 (例如,pos=1)來準備下一重複。流程返回至步驟308且選擇一新位置值1,即,在本實例中,val=vec(1)=2。符號旗標「got_sign_flag」指示偵測到一符號,且由於目前值「val」不等於零,所以將「next_sign_ind」添加至累積索引「index」作為一LSB以給出一累積索引1 (=2*0+1)。流程繼續至亦不等於零之值「val」的評估。根據所偵測之符號來設定next_sign_ind,在此情況中,next_sign_ind=0,即,一正值(2)。接著,使累積索引累計一偏移A(2, 1),偏移A(2, 1)對應於整數向量之維數2及L1範數1,偏移A(2, 1)具有一正前置值且不具有一前置零。A(2, 1)等於1。此時,累積索引係index=2。接著,使累積k參數k_acc更新達vec(1)之絕對值,即,更新達2個單位,即,k_acc=3。
藉由使數目n加1 (即,n=3)且使位置指示符「pos」減1 (例如,pos=0)來準備下一重複。流程返回至步驟308且選擇一新位置值0,即,在本實例中,val=vec(0)=2。符號旗標「got_sign_flag」指示偵測到一符號,且由於目前值「val」不等於零,所以將「next_sign_ind」添加至累積索引「index」作為一LSB,以給出一累積索引4 (=2*2+0)。流程繼續至亦不等於零之值「val」的評估。根據所偵測之符號來設定next_sign_ind,在此情況中,next_sign_ind=0,即,一正值(2)。接著,使累積索引累計一偏移A(3, 3),偏移A(3, 3)對應於整數向量之維數3及L1範數3,偏移A(3, 3)具有一正前置值且不具有一前置零。A(3, 3)等於13。此時,累積索引係index=17。接著,使累積k參數k_acc更新達「val」之絕對值,即,更新達2個單位,即,k_acc=5。
此時,累積k_acc等於最大值K=5,且考量向量之所有位置。因此,輸出索引等於目前累積索引,即,輸出索引17。最後識別符號仍不包含於累積索引中且代以被提取為一單獨參數,即,前置符號=「+1」(next_sign_ind=0)。
在具有維數N=3及單位脈衝數K=5之一第二實例中,考量一整數輸入向量[-4, 0, -1]。執行初始化且將「pos」設定為「2」,將索引k_acc設定為「0」,維數n=1,且未設定got_sign_flag (=0)。選擇第一值「val」作為向量之係數2,即,-1。由於尚未評估非零值,所以尚未提取符號,且流程基於所偵測之符號而跳過索引之調整。藉此,流程直接轉至值不等於零之值「val」之評估。此觸發待設定之符號旗標。已偵測一第一符號,且根據所偵測之符號而設定next_sign_ind,在此情況中,next_sign_ind=1,即,一負值(-1)。接著,使累積索引累計一偏移A(1, 0),偏移A(1, 0)對應於整數向量之維數1及L1範數0,偏移A(1, 0)具有一正前置值且不具有一前置零。A(1,0)等於0。此時,累積索引係index=0。接著,使累積k參數k_acc更新達「val」之絕對值,即,更新達1個單位,即,k_acc=1。
藉由使數目n加1 (即,n=2)且使位置指示符「pos」減1 (例如,pos=1)來準備下一重複。流程返回至步驟308且選擇一新位置值1,即,在本實例中,val=vec(1)=0。符號旗標「got_sign_flag」指示偵測到一符號,但由於目前值「val」等於零,所以保存「next_sign_ind」用於下一重複。流程繼續至等於零之值「val」的評估。因此,不改變next_sign_ind。接著,使累積索引累計一偏移A(2, 1),偏移A(2, 1)對應於整數向量之維數2及L1範數1,偏移A(2, 1)具有一正前置值且不具有一前置零。A(2, 1)等於1。此時,累積索引係index=1。接著,使累積k參數k_acc更新達「val」之絕對值,即,更新達0個單位,即,仍為k_acc=1。
藉由使數目n加1 (即,n=3)且使位置指示符「pos」減1 (例如,pos=0)來準備下一重複。流程返回至步驟308且選擇一新位置值0,即,在本實例中,val=vec(0)=-4。符號旗標「got_sign_flag」指示偵測到一符號,且由於目前值「val」不等於零,所以將源自向量位置2之「next_sign_ind」添加至累積索引「index」作為一LSB以給出一累積索引3 (=2*1+1)。流程繼續至不等於零之值「val」的評估。根據所偵測之符號來設定next_sign_ind,在此情況中,next_sign_ind=1,即,一負值(-4)。接著,使累積索引累計一偏移A(3, 1),偏移A(3, 1)對應於整數向量之維數3及L1範數1,偏移A(3, 1)具有一正前置值且不具有一前置零。A(3, 1)等於1。此時,累積索引係index=4。接著,使累積k參數k_acc更新達「val」之絕對值,即,更新達4個單位,即,k_acc=5。
此時,累積k_acc等於最大值K=5,且考量向量之所有位置。因此,輸出索引等於目前累積索引,即,輸出索引4。最後識別符號仍不被包含於累積索引中,而是被提取為一單獨參數,即,前置符號=「-1」(next_sign_ind=1)。
在具有維數N=3及單位脈衝數K=5之一第三實例中,考量一整數輸入向量[0, 5, 0]。執行初始化且將「pos」設定為「2」,將索引k_acc設定為「0」,維數n=1,且未設定got_sign_flag (=0)。選擇第一值「val」作為向量之係數2,即,0。由於尚未評估非零值,所以尚未提取符號,且流程基於所偵測之符號而跳過索引之調整。藉此,流程直接轉至等於零之值「val」的評估。此跳過觸發符號旗標。因此,尚未偵測到一第一符號。接著,使累積索引累計一偏移A(1, 0),偏移A(1, 0)對應於整數向量之維數1及L1範數0,偏移A(1, 0)具有一正前置值且不具有一前置零。A(1, 0)等於0。此時,累積索引係index=0。接著,使累積k參數k_acc更新達「val」之絕對值,即,更新達0個單位,即,仍為k_acc=0。
藉由使數目n加1 (即,n=2)且使位置指示符「pos」減1 (例如,pos=1)來準備下一重複。流程返回至步驟308且選擇一新位置值1,即,在本實例中,val=vec(1)=5。符號旗標「got_sign_flag」指示未偵測到一符號。藉此,流程直接轉至不等於零之值「val」的評估。此觸發待設定之符號旗標。此時已偵測到一第一符號,且根據所偵測之符號而設定next_sign_ind,在此情況中,next_sign_ind=0,即,一正值(5)。接著,使累積索引累計一偏移A(2, 0),偏移A(2, 0)對應於整數向量之維數2及L1範數0,偏移A(2, 0)具有一正前置值且不具有一前置零。A(2, 0)等於0。此時,累積索引仍為index=0。接著,使累積k參數k_acc更新達「val」之絕對值,即,更新達5個單位,即,k_acc=5。
藉由使數目n加1 (即,n=3)且使位置指示符「pos」減1 (例如,pos=0)而準備下一重複。流程返回至步驟308且選擇一新位置值0,即,在本實例中,val=vec(0)=0。符號旗標「got_sign_flag」指示偵測到一符號,但由於目前值「val」等於零,所以保存「next_sign_ind」用於下一重複,或在此實例中,作為最後步驟。流程繼續至等於零之值「val」之評估。因此,不改變next_sign_ind。接著,使累積索引累計一偏移A(3, 5),偏移A(3, 5)對應於整數向量之維數3及L1範數5,偏移A(3, 5)具有一正前置值且不具有一前置零。A(3, 5)等於41。此時,累積索引係index=41。接著,使累積k參數k_acc更新達「val」之絕對值,即,更新達0個單位,即,仍為k_acc=5。
此時,累積k_acc等於最大值K=5,且已考量向量之所有位置。因此,輸出索引等於目前累積索引,即,輸出索引41。最後識別符號仍不包含於累積索引中且代以被提取為一單獨參數,即,前置符號=「+1」(next_sign_ind=0)。
圖8中繪示代以使用一區段前置符號編碼之一基本MPVQ迭代之一實施例之一高階示意圖。該圖繪示使用前置符號資訊之區段分割之一基本MPVQ迭代之一實施例之一高階示意圖。在一較佳解決方案中,對各唯一pos[0]、振幅k_delta (例如,k_delta=[k-1、k-2、...1])實施兩個符號區段。若pos[0]值=「k」,則消耗pos[0]中之所有單位脈衝且迭代可停止。若pos[0]值係非零之下一正前置符號,則首先遇到之非零位置符號需要1個位元之資訊。若pos[0]值係非零之下一負前置符號,則首先遇到之非零位置符號需要1個位元之資訊。若pos[0]值=「0」,則迭代擴充至pos[0]且無需任何新前置符號資訊。
自上述迭代定義,吾人可建立:
M(n, k)=1+U(n, k)+U(n, k)+M(n-1, k)=1+2*U(n, k)+M(n-1, k)
M(n, k)-M(n-1, k)=1+2*U(n, k)
藉由應用費歇PVQ遞迴,吾人獲得:
M(n, k)-M(n-1, k)=M(n-1, k-1)+M(n, k-1)
1+2*U(n, k)=M(n-1, k-1)+M(n, k-1)-M(n-1, k-1)+M(n-1, k-1)
1+2*U(n, k)=1+2*U(n, k-1)+2*M(n-1, k-1)
U(n, k)=U(n, k-1)+M(n-1, k-1)
M(n-1, k-1)=U(n, k)-U(n, k-1)
以導致
M(n-1, k)=[U(n, k+1)-U(n, k)]
自遞迴定義知道:
M(n, k)=1+2*U(n, k)+[U(n, k+1)-U(n, k)]=1+U(n, k)+U(n, k+1)
此時,可將MPVQ大小遞迴地判定為:
N
MPVQ
(n, k)=M(n, k) =1+U(n, k)+U(n, k+1)。
進一步參閱用於所採用之MPVQ遞迴公式之推導的附錄B。
N
MPVQ
(n, k)=1+2*U(n, k)+N
MPVQ
(n-1, k)
在列舉/檢索中,使用下文所定義之性質(a至g)之任何者:
a) N
PVQ
(n, k)=2*N
MPVQ
(n, k),
(遞迴地應用於有效檢索);
b) U(n, k)=1+U(n, k-1)+U(n-1, k-1)+U(n-1, k),
其中初始條件U(0, *)= 0,U(*, 0)=0,U(1, *)=0,U(*, 1)=0,
且U(a, b)=U(b, a),且進一步為了效率,吾人可使用
U(2, k)=k-1,及U(n, 2)=n-1,及U(3, k)=k*(k-1),及U(n, 3)=n(n-1);
c) N
MPVQ
(n,k)=1+U(n, k)+U(n, k+1),
(最終MPVQ大小計算)
d) N
MPVQ
(n, k)=1+floor((A(n, k))/2)+U(n, k+1),
(替代最終大小計算)
e) N
MPVQ
(n, k)-N
MPVQ
(n-1, k)=1+2*U(n, k)=A(n, k),
(可用於迭代振幅索引加法判定)
f) A(n, k)=A(n, k-1)+A(n-1, k-1)+A(n-1, k),
(此處,此遞迴(亦用於(例如) CELT/OPUS音訊中)亦可用於低複雜性振幅檢索偏移更新)
g) 迭代地更新PVQ偏移=U(n, k=0…K+1)或較佳地迭代地更新A(n, k=0...K)及U(n, K+1)。A(n, k)遞迴略微快於U(n, k)遞迴且最後元素U(n, K+1)具有比A(n, K+1)低之動態範圍。
此處,c)及d)用於計算最終MPVQ(n, k)碼字之大小,需要該大小來自位元串流獲得索引,或將該大小提供至位元串流或介接位元串流之算術編碼器/解碼器。
圖9繪示用於增大維數之一MPVQ-A/U偏移遞迴之三個實施例之一組合。
用於更新偏移之程序開始於步驟350。輸入參數係維數n及k_max+1值。此程序將一列n-1之檢索偏移提供至列n之檢索偏移,其包含更新0...(k_max+1)之k之偏移。在步驟352中,決定是否僅使用A偏移。若僅使用A偏移,則在步驟354中,將A(n, k)計算為:
A(n, k)=A(n-1, k)+A(n-1, k-1)+A(n, k-1)。
此特定遞迴亦用於先前技術中,但與低效PVQ檢索程序一起使用。在步驟397中使A(n, k)返回。在步驟356中,決定是否僅使用U偏移。若僅使用U偏移,則在步驟358中,將U(n, k)計算為:
U(n, k)=1+U(n-1, k-1)+U(n-1, k)+U(n, k-1)。
在步驟398中使U(n, k)返回。在步驟360中,使用A偏移及U偏移之一組合。在步驟362中,根據下列公式而執行k=0...(k_max)時之迭代:
A(n, k)=A(n-1, k)+A(n-1, k-1)+A(n, k-1)。
此特定遞迴亦用於先前技術中,但與低效PVQ檢索程序一起使用。在步驟364中對最高動態偏移(k_max+1)執行遞迴。在一特定實施例中,根據下列公式而使用一純U遞迴:
U(n, k_max+1)=1+U(n-1, k_max)+U(n-1, k_max+1)+U(n, k_max)。
在另一特定實施例中,根據下列公式而使用一混合A/U遞迴:
U(n, k_max+1)=1+(A(n-1, k_max)>>1)+(A(n, k_max)>>)+U(n-1, k_max+1),
其中(y>>1)意味y=floor(y/2)。在步驟399中使A(n, k)及U(n, k_max+1)返回。
在接收器側處,必須執行一相反程序,其中將一前置符號及一索引變換成一整數輸出向量。圖10繪示用於音訊/視訊樣本之錐型向量量化解檢索之一方法之一實施例之步驟之一流程圖。該方法開始於步驟450。在步驟452中,自一傳入位元串流接收作為一第一碼字之一前置符號及作為一第二碼字之一輸入索引。該前置符號及該輸入索引表示音訊/視訊信號樣本。該前置符號係待建立之一整數輸出向量中之一終端非零係數之一符號,該整數輸出向量表示該等音訊/視訊信號樣本。該整數輸出向量具有數個整數值係數。該終端非零係數係該整數輸出向量中之一第一非零係數及一最後非零係數之一者。在步驟454中,使用一錐型向量量化解列舉方案來將該輸入索引解檢索成該整數輸出向量。由一列舉方案建立之該輸入索引忽略該終端非零係數之該符號。在步驟456中,根據所接收之前置符號而指派該整數輸出向量中之該終端非零係數之一符號。在替代實施例中,可與步驟454同時地執行步驟456,或可在步驟454之前執行步驟456。在步驟458中,輸出該整數輸出向量。程序結束於步驟499。
在一特定實施例中,藉由一迭代解列舉程序而執行解檢索步驟454。在一進一步特定實施例中,該迭代解列舉程序包括:一初始化步驟,其中將一剩餘索引設定成等於該輸入索引;及一迭代步驟之一重複,其中選擇該整數輸出向量之一當前係數供考量。該迭代步驟繼而包括:找到與該整數輸出向量內之該當前係數之一位置及該剩餘索引相容之一偏移參數;依據該偏移參數而減小該剩餘索引;及將該整數輸入向量之該當前係數之一振幅設定成等於與該偏移參數相關聯之一振幅。藉由依次選擇該整數輸入向量之係數作為該當前係數而繼續該重複,至少直至該剩餘索引變成等於零。
下文中使用實施程序之實施例的詳細方塊圖來繪示MPVQ解檢索之一些接收器側態樣。圖11中繪示MPVQ解檢索之一實施例之一概述。MPVQ解檢索開始於步驟250。在步驟260中,自編解碼位元分配迴圈達成VQ維數N及單位脈衝數K。在步驟270中,找到一大小及偏移。在步驟280中,自傳入位元串流提取一前置符號,且在步驟285中,自傳入位元串流獲得MPVQ索引。在步驟290中利用此等量,其中分解MPVQ索引。程序結束於步驟299。
與圖10之流程圖相比較,步驟260、270、280及285可被視為包括於步驟452中。類似地,步驟454及456被視為包括於步驟290中。
圖12中繪示用於找到大小及偏移之程序(例如,對應於圖11之步驟270)之一實施例。解檢索中之A(n, k)偏移通常為一振幅偏移,但其亦涉及剩餘符號。U(n, k)偏移係類似的。其亦為一振幅偏移。然而,其不包含第一前置符號(「2」),而是包含剩餘前置符號之所有剩餘者。一般而言,該等偏移指示用於振幅及前置符號之剩餘可行組合之區段大小。有時,此使用當前前置符號(A(n, k))來執行,且有時並非使用下一前置符號來執行,而是使用所有剩餘者(U(n, k)情況)來執行。用於找到針對自k=0至k=K+1之維數N之MPVQ大小N
MPVQ
(N, K)及檢索偏移A、U的程序開始於步驟500。應注意,A(n, k)之直接方程式、A(n, k)僅列遞迴及A基本遞迴如先前技術中所知。在步驟502中,檢查大小及偏移是否儲存於ROM表中。若大小及偏移儲存於ROM表中(若N及K兩者較低,則其係現實可行的),則程序直接繼續步驟519。在步驟504中,檢查一有效直接計算是否可行。若有效直接計算係可行的(對低N而言,其係現實可行的),則程序繼續至步驟506,其中直接方程式用於MPVQ大小(N, K)及振幅偏移A(N, K)。接著,程序繼續至步驟519。在步驟508中,檢查一有效列遞迴是否可行。若有效列遞迴係可行的(對於一些K而言,其係現實可行的),則程序繼續至步驟510,其中遞迴僅列方程式用於列N以計算A(N, k=0...K)及U(N, K+1)。接著,程序繼續至步驟514。若在步驟508中發現僅列遞迴不可行,則程序繼續至步驟512,其中一偏移更新程序用於一基本行且列偏移遞迴方程式用於列0至列N以將偏移計算為A(N, k=0...K)及U(N, K+1)。此可用於所有N及K。可在(例如)圖9中找到此一更新偏移常式之一實例。在步驟514中,可將MPVQ大小計算為MPVQ-size=1+(A(N, K)>>1)+U(N, K+1)或替代地計算為MPVQ-size=1+U(N, K)+U(N, K+1)。在步驟519中,藉由使偏移(A,U)及MPVQ大小返回而結束程序。
圖13繪示MPVQ索引分解之一實施例。用於分解一MPVQ索引之程序開始於步驟520。提供參數N、K、輸入索引及前置符號以及偏移值。將一剩餘索引設定成等於輸入索引。在步驟522中,使輸出向量「vec」初始化為零。在步驟524中,將局部最大值k (k_max_local)設定成等於K,向量中之位置自0開始且將n設定為N。在步驟526中,審查是否考量向量中之所有位置。若已考量向量中之所有位置,則在步驟548中使向量返回作為輸出向量,即,在處理最後位置之後退出。在步驟528中,審查該剩餘索引是否為零。若該剩餘索引係零,則不再有向量位置填充有非零值。程序繼續至其中併入前置符號之步驟530,且在步驟549中使向量返回作為輸出向量,即,在已處理最後位置之前快速儘早退出。若該剩餘索引大於零,則程序繼續至步驟532,其中找到一k_delta (即,經審查之向量位置之一絕對振幅)及一振幅偏移「amp_offset」。此將在下文中進一步更詳細地加以描述。在步驟534中,使該剩餘索引減去該振幅偏移。若向量位置之振幅不為零(如步驟536中所審查),則程序繼續至步驟538,其中將等於振幅乘以前置符號之一值給予向量位置。對於第一非零係數,前置符號係自位元串流提取之前置符號。在步驟540中,推斷用於一預測位置之下一前置符號。此將在下文中進一步更詳細地加以描述。在步驟542中,使局部最大k值減去當前k值「k_delta」。接著,在步驟544中,藉由增大維數n,藉由更新偏移,且藉由使向量中之位置增加一步階而準備下一重複。接著,使程序返回至步驟526。
如圖13中所指示,自所接收之索引判定當前位置之振幅「k_delta」。此較佳地藉由使用可用A(n, k)偏移及/或U(n, k)偏移而執行。亦推斷振幅資訊偏移且使剩餘索引減去此振幅資訊偏移「amp_offset」。圖14中繪示此一程序之一實施例。
用於找到振幅k_delta及振幅偏移amp_offset之一程序之一實施例開始於步驟550。換言之,假設此程序找到當前位置之振幅及對應索引偏移。因而,使用A(n, k)偏移之線性或樹狀搜尋可用於先前技術中。傳入參數係局部最大k「k_max_local」、索引及偏移H(n, k)=A(n, k)。在步驟552中,選擇一樹狀或線性搜尋。對於線性搜尋選項,步驟554將一累積k值k_acc設定成等於局部最大值k且將一振幅偏移設定成等於針對目前n及累積k值之一偏移。在步驟556中,檢查該偏移是否大於索引。若該偏移大於索引,則在步驟558中,使k_acc值減去一個單位,導出一新振幅偏移。接著,程序返回至步驟556。重複此直至找到小於或等於剩餘索引之最大振幅偏移值。接著,程序繼續至步驟560,其中將k_delta (即,當前位置之振幅)計算為局部最大k值減去k_acc值。
若選擇一樹狀程序,則在步驟562中,定義一高參數及一低參數且推斷針對n及該高參數之一振幅偏移。在步驟564中,將待搜尋之k區域分成兩個部分,其中推斷一k_test參數及針對n及該高參數之一振幅偏移。根據該振幅偏移是否大於或小於索引(如步驟566中所決定),在步驟568中改變該高參數,或在步驟572中改變該低參數。重複此直至該振幅參數與索引之間之差值變成零或k_test點變成等於該高參數,如步驟570及574中分別所檢查。在步驟576中,將k_delta (即,當前位置之振幅)計算為局部最大k值減去k_test值。在步驟579中使振幅k_delta、k_acc及amp_offset返回,其中k_acc=k_max_local-k_delta用於區段符號編碼。
在圖13之步驟536中,若量值係非零且小於最大剩餘K個單位脈衝值,則在步驟538中將先前所提取(儲存)之前置符號應用於當前位置振幅。隨後,自經分解之接收MPVQ索引提取下一前置符號。圖15中繪示用於找到下一前置符號且自索引移除所提取之符號資訊(位元或sign_offset)之一程序之一實施例。
用於取得下一前置符號之程序開始於步驟580。輸入參數係剩餘索引、偏移及累積k值k_acc。在步驟582中,選擇符號定位方法。若選擇LSB方法(據信,其係目前較佳實施例),則在步驟584中,將前置符號最初設定成正的(+1)。在步驟586中,使用一按位元「及」運算來判定索引中之最低有效位元。若位元係「1」,則此意味一負號且因此在步驟588中將前置符號改變成「-1」。在步驟590中,使索引移位一個位置,即,自符號位元移出。
若選擇一區段前置符號解碼(其略微更複雜些),則在步驟592中將前置符號最初設定成正的(1)。在步驟594中,使k_delta段之大小除以2。若索引大於或等於此符號偏移,則符號係負的且因此在步驟597中改變前置符號。在步驟598中,亦使索引減去所找到之符號偏移。在步驟599中,使前置符號及經修正之索引返回。
再次返回至圖13,若當前位置具有零振幅,則保持前置符號,即,記住前置符號以可供當前位置之後之下一位置使用。
若量值等於最大剩餘K個單位脈衝值,則應用所儲存之前置符號。視需要而定,一快速迭代退出可用於此最後非零輸入項且在一系列尾隨零之前退出。此係選用的,因為有時在DSP-HW中,有條件地退出一最佳化定長迴圈之成本高於停留於迴圈中之成本。
可遞迴地更新剩餘向量(其具有待解檢索之一無因次數及待解檢索之無「k_delta」單位脈衝)之偏移A(n, k)或U(n, k)。圖16中繪示用於一無因次數之偏移更新之一程序之一實施例。該程序類似於圖9中所呈現之程序,但此處,並非增大維數,而是減小維數。
用於更新偏移之程序開始於步驟600。輸入參數係維數n及k_max值。此程序提供一列n+1之檢索偏移至列n之檢索偏移,其包含更新0...k_max之k之偏移。在步驟602中,決定是否僅使用A偏移。若僅使用A偏移,則在步驟604中,將A(n, k)計算為:
A(n, k)=A(n+1, k)-A(n, k-1)-A(n+1, k-1)。
此特定遞迴亦用於先前技術中,但與低效PVQ檢索程序一起使用。在步驟617中使A(n, k)返回。在步驟606中,決定是否僅使用U偏移。若僅使用U偏移,則在步驟608中,將U(n, k)計算為:
U(n, k)=U(n+1, k)-U(n, k-1)-U(n+1, k-1)-1。
在步驟618中使U(n, k)返回。在步驟610中,使用A偏移及U偏移之一組合。在步驟612中,根據下列公式而執行針對k=0...(k_max-1)之遞迴:
A(n, k)=A(n+1, k)-A(n, k-1)-A(n+1, k-1)。
此特定遞迴亦用於先前技術中,但與低效PVQ檢索程序一起使用。在步驟614中,執行針對最高動態偏移k_max (其中k_max=K+1)之遞迴。在一特定實施例中,根據下列公式而使用一純U遞迴:
U(n, k_max)=U(n+1, k_max)-U(n, k_max-1)-U(n+1, k_max-1)-1。
在另一特定實施例中,根據下列公式而使用一混合A/U遞迴:
U(n, k_max)=U(n+1, k_max)-(A(n, k_max-1)>>1)-(A(n+1, k_max-1)>>1)-1,
其中(y>>1)意味y=floor(y/2)。在步驟619中使A(n, k)及U(n, k_max)返回。
下文描述三個實例以支援圖13之結構之理解。該等實例具有一極低複雜性以使描述保持受限制且使全部實例可感知。然而,在典型實例中,維數及單位脈衝數更高很多。然而,原理係相同的。
在具有維數N=3及單位脈衝數K=5之一第一實例中,考量一輸入索引17及一前置符號「+1」,即,正的。執行初始化且將「pos」設定為「0」(即,解檢索自向量中之第一係數開始),將k_max_local設定為「5」,且維數n=3。將輸入索引「更名」為一剩餘索引。位置低於3且剩餘索引係非零。搜尋一振幅k_delta及偏移amp_offset (例如,根據圖14)。若(例如)使用A偏移,則審查偏移A(3, 0...5)之群組且仍小於或等於剩餘索引之最大A偏移係A(3, 3)=13。因此,k_acc變成3,k_delta變成2,且amp_offset等於13。剩餘索引被減去amp_offset且此時變成等於4。由於k_delta不等於零,所以存在待應用之一符號。因此,將向量位置設定成絕對值(k_delta)乘以所接收及所儲存之前置符號(其係正的)。此時,輸出向量係[2, 0, 0]。接著,(例如)根據圖15而執行下一前置符號之一判定。若假定一LSB符號定位,則剩餘索引(4)之LSB係零,其對應於一正號。因此,將lead_sign設定為「+1」。亦藉由使索引移位一個步階而減小剩餘索引,即,等於一整數整除2。此時,剩餘索引等於2。最後,更新剩餘脈衝單位k_max_local,且此時,剩餘脈衝單位k_max_local等於3。
藉由使數目n減1 (即,n=2)且使位置指示符「pos」加1 (例如,pos=1)而準備下一重複。亦根據新n而更新可用偏移。流程返回至步驟526且找到一新振幅及偏移(例如,根據圖14)。若(例如)使用A偏移,則審查偏移A(2, 0...3)之群組且仍小於或等於剩餘索引之最大A偏移係A(2, 1)=1。因此,k_acc變成1,k_delta變成2,且amp_offset等於1。剩餘索引被減去amp_offset且此時變成等於1。由於k_delta不等於零,所以存在待應用之一符號。因此,將向量位置設定成絕對值(k_delta)乘以最新提取之前置符號(其係正的)。此時,輸出向量係[2, 2, 0]。接著,(例如)根據圖15而執行下一前置符號之一判定。若假定一LSB符號定位,則剩餘索引(1)之LSB係1,其對應於一負號。因此,將lead_sign設定為-1。亦藉由使索引移位一個步階而減小剩餘索引,即,等於一整數整除2。此時,剩餘索引等於0。最後,更新剩餘脈衝單位k_max_local,且此時,剩餘脈衝單位k_max_local係1。
藉由使數目n減1 (即,n=1)且使位置指示符「pos」加1 (例如,pos=2)而準備下一重複。亦根據新n而更新可用偏移。流程返回至步驟526。由於剩餘索引係零,所以步驟530經執行以給出最後向量係數。lead_sign等於-1且k_max_local等於1,其給出一輸出向量[2, 2, -1]。
在具有維數N=3及單位脈衝數K=5之一第二實例中,考量一輸入索引4及一負前置符號。執行初始化且將「pos」設定為「0」(即,解檢索自向量中之第一係數開始),將k_max_local設定為「5」,且維數n=3。將輸入索引「更名」為一剩餘索引。位置低於3且剩餘索引係非零。搜尋一振幅k_delta及偏移amp_offset (例如,根據圖14)。若(例如)使用A偏移,則審查偏移A(3, 0...5)之群組且仍小於或等於剩餘索引之最大A偏移係A(3, 1)=1。因此,k_acc變成1,k_delta變成4,且amp_offset等於1。剩餘索引被減去amp_offset且此時變成等於3。由於k_delta不等於零,所以存在待應用之一符號。因此,將向量位置設定成絕對值(k_delta)乘以所接收之前置符號(其係負的)。此時,輸出向量係[-4, 0, 0]。接著,(例如)根據圖15而執行下一前置符號之一判定。若假定一LSB符號定位,則剩餘索引(3)之LSB係1,其對應於一負號。因此,將lead_sign設定為-1。亦藉由使索引移位一個步階而減小剩餘索引,即,等於一整數整除2。此時,剩餘索引等於2。最後,更新剩餘脈衝單位k_max_local,且此時,剩餘脈衝單位k_max_local等於1。
藉由使數目n減1 (即,n=2)且使位置指示符「pos」加1 (例如,pos=1)而準備下一重複。亦根據新n而更新可用偏移。流程返回至步驟526且找到一新振幅及偏移(例如,根據圖14)。若(例如)使用A偏移,則審查偏移A(2, 0...1)之群組且仍小於剩餘索引之最大A偏移係A(2, 1)=1。因此,k_acc變成1,k_delta變成0,且amp_offset等於1。剩餘索引被減去amp_offset且此時變成等於1。由於k_delta等於零,所以保存最後提取符號用於下一重複。輸出向量仍為[-4, 0, 0]。
藉由使數目n減1 (即,n=1)且使位置指示符「pos」加1 (例如,pos=2)而準備下一重複。亦根據新n而更新可用偏移。流程返回至步驟526且找到一新振幅及偏移(例如,根據圖14)。若(例如)使用A偏移,則審查偏移A(1, 0...1)之群組且仍小於或等於剩餘索引之最大A偏移係A(1, 1)=1。因此,k_acc變成1,k_delta變成0,且amp_offset等於1。剩餘索引被減去amp_offset且此時變成等於0。由於k_delta不等於零,所以存在待應用之一符號。因此,將向量位置設定成絕對值(k_delta)乘以先前所提取之前置符號(其係負的)。此時,最終輸出向量係[-4, 0, -1]。
在具有維數N=3及單位脈衝數K=5之一第三實例中,考量一輸入索引41及一正前置符號。執行初始化且將「pos」設定為「0」(即,解檢索自向量中之第一係數開始),將k_max_local設定為「5」,且維數n=3。將輸入索引「更名」為一剩餘索引。位置低於3且剩餘索引係非零。搜尋一振幅k_delta及偏移amp_offset (例如,根據圖14)。若(例如)使用A偏移,則審查偏移A(3, 0...5)之群組且仍小於或等於剩餘索引之最大A偏移係A(3, 5)=41。因此,k_acc變成5,k_delta變成0,且amp_offset等於41。剩餘索引被減去amp_offset且此時變成等於0。由於k_delta等於零,所以保存符號用於一隨後迭代。輸出向量仍為[0, 0, 0]。
藉由使數目n減1 (即,n=2)且使位置指示符「pos」加1 (例如,pos=1)而準備下一重複。亦根據新n而更新可用偏移。流程返回至步驟526且找到一新振幅及偏移(例如,根據圖14)。若(例如)使用A偏移,則審查偏移A(2, 0...5)之群組且仍小於或等於剩餘索引之最大A偏移係A(2, 0)=0。因此,k_acc變成0,k_delta變成5,且amp_offset等於0。剩餘索引被減去amp_offset且此時變成等於0。由於k_delta不等於零,所以存在待應用之一符號。因此,將向量位置設定成絕對值(k_delta)乘以所接收及所儲存之前置符號(其係正的)。此時,輸出向量係[0, 5, 0]。
藉由使數目n減1 (即,n=1)且使位置指示符「pos」加1 (例如,pos=2)而準備下一重複。流程返回至步驟526。在步驟528中,發現索引係零且使用經由步驟530及549之快速退出。
本發明中所呈現之此新檢索方法係一改良低複雜短碼字方案。在設計中,其係基於最佳化純量值檢索方案(Fischer/Hung/Opus/CELT)之一解決方案,但另外,其有效利用任何PVQ結構之大小始終為偶數個向量之事實。
仍將需要依一有效方式處置非常大PVQ向量(大於1+B)位元。此可藉由(例如)目標向量維數分割、PVQ向量維數分割或昂貴較高動態範圍整數計算(例如,n*16或n*32虛擬軟體定義大整數)而執行。
可將自B個位元至B+1個位元(例如,32個位元至33個位元)之增益量化為擴充R=位元/係數範圍性能,其中無需維數分割用於一給定維數。例如,對於維數N=8,自R=32/8=4個位元/係數(或樣本)轉至R=33/8=4.125個位元/係數或樣本。通常,一高品質頻域音訊PVQ方案需要R=7個外形位元/係數(或樣本)。
圖17A呈現一些常見硬體位元限制之PVQ碼字之一概述。曲線900表示PVQ(n, k)位元限制33,曲線901表示PVQ(n, k)位元限制32,曲線902表示PVQ(n, k)位元限制31,曲線903表示PVQ(n, k)位元限制17,曲線904表示PVQ(n, k)位元限制16,且曲線905表示PVQ(n, k)位元限制15。33個位元可與新方案及無符號32位元整數一起使用,32個位元對應於無符號32位元整數,31個位元對應於帶符號32位元整數,17個位元可與新方案及無符號16位元整數一起使用,16個位元對應於無符號16位元整數,15個位元對應於帶符號16位元整數。
圖17B呈現用於具有不同位元限制之最佳PVQ碼字量化器之相關R值(以位元/樣本為單位)之一概述。曲線910表示PVQ(n, k)位元限制33,曲線911表示PVQ(n, k)位元限制32,曲線912表示PVQ(n, k)位元限制31,曲線913表示PVQ(n, k)位元限制17,曲線914表示PVQ(n, k)位元限制16,且曲線915表示PVQ(n, k)位元限制15。R值越高,可達成之編碼品質越高。
圖17C展示與一增益外形PVQ之所得外形匹配能力直接關聯之對應可達成脈衝密度。曲線920表示PVQ(n, k)位元限制33,曲線921表示PVQ(n, k)位元限制32,曲線922表示PVQ(n, k)位元限制31,曲線923表示PVQ(n, k)位元限制17,曲線924表示PVQ(n, k)位元限制16,且曲線925表示PVQ(n, k)位元限制15。R值越高,可達成之編碼品質越高。圖中展示具有不同位元限制之最佳PVQ碼字量化器之可行脈衝密度。脈衝密度越高,可達成之編碼品質(例如VQ SNR)越高。
圖17D繪示用於一樣本先前技術方案PVQ及新方案MPVQ (為公平比較,兩者使用最大32之PVQ碼字)之檢索/解檢索中之一最壞情況MOPS指令權衡。曲線930表示MPVQ之總複雜性,曲線931表示PVQ之總複雜性,曲線932表示MPVQ之解檢索複雜性,曲線933表示PVQ之解檢索複雜性,曲線934表示MPVQ之檢索複雜性,且曲線935表示PVQ之檢索複雜性。上述MPVQ可實施於一帶符號32位元架構上,而先前技術PVQ需要一無符號32位元架構。
在本發明之一第二部分中,描述偏移之一低動態MPVQ運行時間計算。在附錄A中,如[先前技術]般重複來自OPUS RFC之高階文字描述。在IETF-OPUS c編碼(cwrs.c)中,經動態運行時間計算之檢索偏移A(n, k)用於符號及振幅檢索兩者。然而,應注意,一不同偏移變數名稱用於OPUS c編碼中。數目A(n, k)表示向量PVQ(n, k)之數目,其自第一位置中之一正非零值開始。吾人已在先前技術中發現:
A(n, k)=(N
PVQ
(n, k-1)+N
PVQ
(n-1, k-1))/2,
換言之,數目A係PVQ大小矩陣N(n, k)中之一列n元素及前一列n-1元素之一加權和。
對於A(n, k),表1展示其中使用先前技術(CELT/OPUS) PVQ偏移資料方案之一實例,其中為記憶體效率,僅在前向遞迴之一給定時點將一列(例如,n==3)儲存於RAM記憶體中,且接著基於列n=3而計算n=4,等等。
應注意,在用於語音及音訊編碼之一現實PVQ實施方案中,維數n可為約256且單位脈衝數k可為約512,其取決於目標DSP能力。因此,通常無法儲存n*k個偏移。
n/k | 0 | 1 | 2 | 3 | 4 | 5 | k=6 |
0 | 1 | | | | | | |
1 | | 1 | 1 | 1 | 1 | 1 | 1 |
2 | | 1 | 3 | 5 | 7 | 9 | 11 |
3 | | 1 | 5 | 13 | 25 | 41 | 61 |
4 | | 1 | 7 | 25 | 63 | 129 | 231 |
5 | | 1 | 9 | 41 | 129 | 321 | 681 |
6 | | 1 | 11 | 61 | 231 | 681 | 1683 |
表1:針對(例如)一IETF-OPUS音訊類檢索方案中之PVQ解碼/編碼所計算之PVQ(n=6, k=5)所需之先前技術A(n, k)偏移
然而,可改良動態檢索偏移計算。此處所提出之新穎遞迴係:
U(n, k)=U(n, k-1)+U(n-1, k-1)+U(n-1, k)+1,
吾人發現,其與如下之先前所採用之OPUS/CELT先前技術偏移A(n, k)相關:
A(n, k)=2*U(n, k)+1。
此時,U(n, k)之整數範圍動態始終為A(n, k)範圍之至少一半。此意謂:可使額外1個位元用於快速檢索,例如,在一32位元字組內。此外,可比A(2, k)及A(3, k)之計算快地直接計算U(2, k)及U(3, k),如U(2, k)=k-1,U(3, k)=k*(k-1),且對稱地,U(a, b)=U(b, a)。
n/k | 0 | 1 | 2 | 3 | 4 | 5 | k=6 |
0 | | | | | | | |
1 | | | | | | | |
2 | | | 1 | 2 | 3 | 4 | 5 |
3 | | | 2 | 6 | 12 | 20 | 30 |
4 | | | 3 | 12 | 31 | 64 | 115 |
5 | | | 4 | 20 | 64 | 160 | 340 |
6 | | | 5 | 30 | 115 | 340 | 841 |
表2:針對MPVQ(n=6, k=5)所計算之新低動態範圍U(n, k)檢索偏移
可在上述表1及表2中看到,A(n=6, k=6)=1683無法適用於10個位元。10個位元對應於1024個輸入項,例如值0至1023。然而,新偏移U(n=6, k=6)將適用於10個位元。由於需要針對成功準確檢索/解檢索而準確地計算檢索偏移,所以無法允許偏移A(6, 6)達到飽和值1023,或無法允許偏移A(6, 6)回繞一不正確低值。
先前(IETF/OPUS音訊PVQ先前技術)遞迴係:
A(n, k)=A(n, k-1)+A(n-1, k-1)+A(n-1, k)。
其具有三個相加項以使其比具有四個相加項之新U(n, k)遞迴略微更快地計算,尤其對於高n或高k。
為保持遞迴效率且維持一低動態範圍,吾人可在需要時在另一實施例中定義一較佳混合遞迴,其中U(n, KMAX)係先前A(n, 較低k)偏移值之一函數且僅用於靠近一B位元字組之範圍限制的動態遞迴資料。此通常適用於一基於N列之遞迴中之最後行KMAX。相較於其最後輸入項超出10個位元之表1,在表3中看到,偏移仍保持在10個位元內。
n/k | 0(A) | 1(A) | 2(A) | 3(A) | 4(A) | 5(A) | k=6(U)
KMAX |
0 | 1 | | | | | | |
1 | | 1 | 1 | 1 | 1 | 1 | 0 |
2 | | 1 | 3 | 5 | 7 | 9 | 5 |
3 | | 1 | 5 | 13 | 25 | 41 | 30 |
4 | | 1 | 7 | 25 | 63 | 129 | 115 |
5 | | 1 | 9 | 41 | 129 | 321 | 340 |
6
NMAX | | 1 | 11 | 61 | 231 | 681 | 841 |
表3:針對有效且範圍安全之檢索遞迴所計算之混合A(n, k)及最後k行U(n, 6=KMAX)偏移
應注意,最後n列NMAX (在此情況中為6)及最高k (在此情況中k=6)通常引起動態範圍問題。然而,在一些情況中,最後第二列(NMAX-1)亦可引起範圍問題,例如,在僅列遞迴計算中,當一除法中之分子接近硬體位元限制時。
可在附錄B中找到用於MPVQ方案之上述遞迴關係之推導。
表4中呈現一先前技術PVQ檢索方案之一實例。此處,最大索引值(A(n, k)+A(k+1)-1)需要小於(例如) 232。具有切換符號[{+, 0}/-]之表4中之方案用於先前技術OPUS/CELT中。註解:a)向量[-2, -1, 1];b)此處,對於索引25至40,解檢索位置p0中之零可最終變成一正值或一負值或p1中之零;c) p0正決策限制。
可對一先前技術PVQ檢索(其中[{+, 0}/-] PVQ遞迴解檢索方案PVQ(n=3, k=4),NPVQ=66,[{-, 0}/+]先前技術檢索(藍、白)單元pX=3維向量[p0, p1, p2]中之位置,k=4個單位脈衝)進行編碼(例如,解碼索引7->向量[-2, -1, 1]),偏移A(n, k)用於判定符號,且關係NPVQ(n=3, k=4)=A(n, k)+A(n, k+1)用於自此等偏移判定大小。
ind | | p0 | | | | | p1 | | p2 | Com. |
0 | A(n, k+1) | -4 | A(n, k) | A(n, k-1) | A(n, k-2) | A(n, k-3) | 0 | | 0 | |
1 | -3 | | 1 | | 0 | |
2 | -3 | 0 | | -1 | |
3 | -3 | 0 | | 1 | |
4 | -3 | | 1 | | 0 | |
5 | -2 | -2 | | 0 | |
6 | -2 | -1 | | -1 | |
7 | -2 | -1 | | 1 | a |
8 | -2 | 0 | | -2 | |
9 | -2 | 0 | | 2 | |
10 | -2 | 2 | | 0 | |
11 | -2 | 1 | | -1 | |
12 | -2 | 1 | | 1 | |
13 | -1 | | -3 | | 0 | |
14 | -1 | -2 | | -1 | |
15 | -1 | -2 | | 1 | |
16 | -1 | -1 | | -2 | |
17 | -1 | -1 | | 2 | |
18 | -1 | 0 | | -3 | |
19 | -1 | 0 | | 3 | |
20 | -1 | 3 | | 0 | |
21 | -1 | 2 | | -1 | |
22 | -1 | 2 | | 1 | |
23 | -1 | 1 | | -2 | |
24 | -1 | 1 | | 2 | |
25 | 0 | A(n, k-1) | -4 | | 0 |
b |
26 | 0 | -3 | | -1 |
27 | 0 | -3 | | 1 |
28 | 0 | -2 | | -2 |
29 | 0 | -2 | | 2 |
30 | 0 | -1 | | -3 |
31 | 0 | -1 | | 3 |
32 | 0 | 0 | | -4 |
33 | 0 | 0 | | 4 |
34 | 0 | 4 | | 0 |
35 | 0 | 3 | | -1 |
36 | 0 | 3 | | 1 |
37 | 0 | 2 | | -2 |
38 | 0 | 2 | | 2 |
39 | 0 | 1 | | -3 |
40 | 0 | 1 | | 3 |
41 | A(n, k) | 4 | A(n, k-1) | A(n, k-2) | A(n, k-3) | | 0 | | 0 | c |
42 | 3 | | -1 | | 0 | |
43 | 3 | 0 | | -1 | |
44 | 3 | 0 | | 1 | |
45 | 3 | 1 | | 0 | |
46 | 2 | | -2 | | 0 | |
47 | 2 | -1 | | -1 | |
48 | 2 | -1 | | 1 | |
49 | 2 | 0 | | -2 | |
50 | 2 | 0 | | 2 | |
51 | 2 | 2 | | 0 | |
52 | 2 | 1 | | -1 | |
53 | 2 | 1 | | 1 | |
54 | 1 | A(n, k-2) | -3 | | 0 | |
55 | 1 | -2 | | -1 | |
56 | 1 | -2 | | 1 | |
57 | 1 | -1 | | -2 | |
58 | 1 | -1 | | 2 | |
59 | 1 | 0 | | -3 | |
60 | 1 | 0 | | 3 | |
61 | 1 | 3 | | 0 | |
62 | 1 | 2 | | -1 | |
63 | 1 | 2 | | 1 | |
64 | 1 | 1 | | -2 | |
65 | 1 | 1 | | 2 | |
表4:實例性先前技術PVQ檢索方案
可在表5中看到使用一前置符號遞迴解決方案之MPVQ(3, 5)實例之A及U之圖表關係。N
PVQ
(n=3, k=5)=2*N
MPVQ
(3, 5)=2*51=102,其中「2」對應於一現預提取之前置符號位元。向量PVQ-vec=[p0, p1, p2],例如,解碼索引8係[3, -1, 1],sum(abs(PVQ-vec))=5。在下列表5中,現預提取之初始符號係正的(+),即,下列值p0始終大於或等於0。在該實例中,將下一前置符號儲存於2*U(n, k)區段之LSB位元中。
索引 | 大小 (A(n, k)) | 大小 (U(n, k)) | 值 p0 | 大小新 K | 前置符號 | 值 p1 | 前置符號 | 值 p2 |
0 | A(n, K)=A(3, 5) | 1 | 5 | 1,新K=5 | 無 | 0 | 無 | 0 |
1 | 2*U(n, K) | 4 | 新K=K-4=1 | + | 1 | 無 | 0 |
2 | 4 | - | -1 | 無 | 0 |
3 | 4 | + | 0 | 保持 | 1 |
4 | 4 | - | 0 | 保持 | -1 |
5 | 3 | 新K=K-3=2 | + | 2 | | 0 |
6 | 3 | - | -2 | | 0 |
7 | 3 | + | 1 | + | 1 |
8 | 3 | - | -1 | + | 1 |
9 | 3 | + | 1 | - | -1 |
10 | 3 | - | -1 | - | -1 |
11 | 3 | + | 0 | + | 2 |
12 | 3 | - | 0 | - | -2 |
13 | 2 | 新K=K-2=3 | + | 3 | | 0 |
14 | 2 | - | -3 | | 0 |
15 | 2 | + | 2 | + | 1 |
16 | 2 | - | -2 | + | 1 |
17 | 2 | + | 2 | - | -1 |
18 | 2 | - | -2 | - | -1 |
19 | 2 | + | 1 | + | 2 |
20 | 2 | - | -1 | + | 2 |
21 | 2 | + | 1 | - | -2 |
22 | 2 | - | -1 | - | -2 |
23 | 2 | + | 0 | 保持 | 3 |
24 | 2 | - | 0 | 保持 | -3 |
25 | 1 | 新K=K-1=4 | + | 4 | 無 | 0 |
26 | 1 | - | -4 | 無 | 0 |
27 | 1 | + | 3 | + | 1 |
28 | 1 | - | -3 | + | 1 |
29 | 1 | + | 3 | - | -1 |
30 | 1 | - | -3 | - | -1 |
31 | 1 | + | 2 | + | 2 |
32 | 1 | - | -2 | + | 2 |
33 | 1 | + | 2 | - | -2 |
34 | 1 | - | -2 | - | -2 |
35 | 1 | + | 1 | + | 3 |
36 | 1 | - | -1 | + | 3 |
37 | 1 | + | 1 | - | -3 |
38 | 1 | - | -1 | - | -3 |
39 | 1 | + | 0 | 保持 | 4 |
40 | 1 | - | 0 | 保持 | -4 |
41 | (A(n, K+1)-A(n, K))/2 | U(n, K+1)-U(n, K) | 0 | 大小=1+U(n-1,K)+U(n-1,K+1)
新K
K=5 | 保持(+) | 5 | 無 | 0 |
42 | 0 | 4 | + | 1 |
43 | 0 | 4 | - | -1 |
44 | 0 | 3 | + | 2 |
45 | 0 | 3 | - | -2 |
46 | 0 | 2 | + | 3 |
47 | 0 | 2 | - | -3 |
48 | 0 | 1 | + | 4 |
49 | 0 | 1 | - | -4 |
50 | 0 | 0 | 保持 | 5 |
表5:基於MPVQ(3, 5) LSB之實例性前置符號列舉
表6繪示根據表5之索引建構實例。
索引 | 值 p0 | 前置符號 | 值 p1 | 前置符號 | 值 p2 | 索引建構實例 |
0 | 5 | 無 | 0 | 無 | 0 | A(3, 0)=0 |
1 | 4 | + | 1 | 無 | 0 | A(3, 1)+2*(A(2, 0))+0=1 |
2 | 4 | - | -1 | 無 | 0 | A(3, 1)+2*(A(2, 0))+1=2 |
3 | 4 | + | 0 | 保持 | 1 | A(3, 1)+2*(A(2, 1))+0=3 |
4 | 4 | - | 0 | 保持 | -1 | A(3, 1)+2*(A(2, 1))+1=4 |
5 | 3 | + | 2 | | 0 | A(3, 2)+2*(A(2, 0))+0=5 |
6 | 3 | - | -2 | | 0 | A(3, 2)+2*(A(2, 0))+1=6 |
7 | 3 | + | 1 | + | 1 | A(3, 2)+2*(A(2, 1))+0=7 |
8 | 3 | - | -1 | + | 1 | A(3, 2)+2*(A(2, 1))+1=8 |
9 | 3 | + | 1 | - | -1 | A(3, 2)+2*(A(2, 1)+1)+0=9 |
10 | 3 | - | -1 | - | -1 | A(3, 2)+2*(A(2, 1)+1)+1=10 |
11 | 3 | + | 0 | + | 2 | |
12 | 3 | - | 0 | - | -2 | |
13 | 2 | + | 3 | | 0 | A(3, 3)+2*0+0=13 |
14 | 2 | - | -3 | | 0 | A(3, 3)+2*0+1=14 |
15 | 2 | + | 2 | + | 1 | A(3, 3)+2*(A(2, 1)+0)+0=15 |
16 | 2 | - | -2 | + | 1 | A(3, 3)+2*(A(2, 1)+0)+1=16 |
17 | 2 | + | 2 | - | -1 | A(3, 3)+2*(A(2, 1)+0)+1=17 |
18 | 2 | - | -2 | - | -1 | A(3, 3)+2*(A(2, 1)+1)+1=18 |
19 | 2 | + | 1 | + | 2 | |
20 | 2 | - | -1 | + | 2 | |
21 | 2 | + | 1 | - | -2 | |
22 | 2 | - | -1 | - | -2 | |
23 | 2 | + | 0 | 保持 | 3 | |
24 | 2 | - | 0 | 保持 | -3 | |
25 | 1 | + | 4 | 無 | 0 | A(3, 4)+2*(A(2, 0))+0=24 |
26 | 1 | - | -4 | 無 | 0 | A(3, 4)+2*(A(2, 0))+1=25 |
27 | 1 | + | 3 | + | 1 | |
28 | 1 | - | -3 | + | 1 | |
29 | 1 | + | 3 | - | -1 | |
30 | 1 | - | -3 | - | -1 | |
31 | 1 | + | 2 | + | 2 | |
32 | 1 | - | -2 | + | 2 | |
33 | 1 | + | 2 | - | -2 | |
34 | 1 | - | -2 | - | -2 | |
35 | 1 | + | 1 | + | 3 | |
36 | 1 | - | -1 | + | 3 | |
37 | 1 | + | 1 | - | -3 | A(3, 4)+2*(A(2, 3))+0=37 |
38 | 1 | - | -1 | - | -3 | A(3, 4)+2*(A(2, 3))+1=38 |
39 | 1 | + | 0 | 保持 | 4 | A(3, 4)+2*(A(2, 3))+0=39 |
40 | 1 | - | 0 | 保持 | -4 | A(3, 4)+2*(A(2, 4))+1=40 |
41 | 0 | 保持(+) | 5 | 無 | 0 | A(3, 5)=41 |
42 | 0 | 4 | + | 1 | A(3, 5)+A(2, 1)+0=42 |
43 | 0 | 4 | - | -1 | A(3, 5)+A(2, 1)+1=43 |
44 | 0 | 3 | + | 2 | A(3, 5)+A(2, 2)+0=44 |
45 | 0 | 3 | - | -2 | A(3, 5)+A(2, 2)+1=45 |
46 | 0 | 2 | + | 3 | A(3, 5)+A(2, 3)+0=46 |
47 | 0 | 2 | - | -3 | A(3, 5)+A(2, 3)+1=47 |
48 | 0 | 1 | + | 4 | A(3, 5)+A(2, 4)+0=48 |
49 | 0 | 1 | - | -4 | A(3, 5)+A(2, 4)+1=49 |
50 | 0 | 0 | 保持 | 5 | A(3, 5)+A(2, 5)=50 |
表6:基於MPVQ(3, 5) LSB之實例性前置符號列舉,索引建構實例
應注意,此時必須使用N
MPVQ
=1+U(n, k)+U(n, K+1)來計算表5中之PVQ大小,因為,無法在針對所有n、k之2*N
MPVQ
(n, k)位元限制(例如,32個位元)內安全地計算A(n, k+1)。先前技術使用PVQ-size=A(n, K+1)+A(n, K)或非零元素之一總和(其使用MOPS昂貴組合函數或儲存值之一ROM昂貴表查找)。
亦可在圖5 ((若干)前置符號之區段定位)及圖2 ((若干)前置符號之LSB定位)之基本遞迴示意圖中找到作為1+2*U(n, k)之A(n, k)。
在本發明之另一部分中,描述通過預提取符號編碼位置之一最佳化MPVQ檢索。亦可藉由將MPVQ前置符號預提取成符號編碼位置encode_sign[0...N-1]、及待在該位置處編碼之實際符號、及剩餘最初前置符號之一向量而最佳化編碼器側MPVQ索引合成內迴圈。然而,此需要運行一預處理符號移位函數,此在脈衝較少時會較昂貴。然而,在一些情況中,其可隨著索引合成之內迴圈變得更簡明而成為用於實施MPVQ檢索之較佳方式,且可(例如)針對DSP管線化而被有力地最佳化。
符號預移位之下列實例利用N=8及K=13。
% 使前置符號預移位之實例,(N=8,K=13)
%
pos
= 0 1 2 3 4 5 6 7
%
PVQ-vec
= -1 0 0 0
+
5 0
-
6
-
1
% 變成:
%
%
PVQ-vec
= -1 0 0 0 +5 0 -6 -1
%
encode_sign
=
+
1 0 0 0
-
1 0
-
1
0
% 及:
lead_sign
=-1 (負的,(來自
PVQ-vec
(0)之符號)
在上述實例中,自右向左(即,自位置(N-1)至位置0)完成編碼。
預移位函數使第一符號移位至變數「lead_sign」且使PVQ-vec中之剩餘符號(向左)移位至下一非零位置。PVQ-vec中之最後非零位置將始終取得encode_sign向量中之一0值。
圖18繪示使用預提取前置符號之一MPVQ索引合成之一實施例。圖中展示用於此MPVQ索引合成實施方案之詳細方塊圖之實施例。用於合成具有預提取前置符號及MPVQ大小之MPVQ索引之程序開始於步驟700。此實施例係基於使用LSB位置中之下一符號之一解決方案。輸入參數係N、K及PVQ向量(即,「vec」)。步驟702係一初始化步驟(其中已知偏移遞迴基本情況),且設定n=1。在步驟704中,將位置參數設定為N-1,即,自最後位置開始,自末端朝向開端分析向量。在步驟706中,將累積索引及累積脈衝設定為0。首先,在步驟708中,分析符號,其將在下文中進一步更詳細地加以描述。藉此,判定前置符號,且一符號向量係可用的。在步驟710中,將一值設定成等於當前輸入向量係數。在步驟712至720中,若係數係非零,則在此實施例中藉由添加一LSB而使累積索引適應於係數之符號。在步驟722中,根據與剩餘單位脈衝及目前維數相關聯之偏移而修正累積索引。若目前位置係非零(如步驟724中所檢查,即,搜尋尚未到達輸入向量之前端),則在步驟726及728中準備一新重複且程序返回至步驟710。若已搜尋整個向量,則在步驟730中計算MPVQ-SIZE且在步驟739中提供傳出索引、前置符號及MPVQ大小。
圖19繪示一符號提取函數之一實施例。程序開始於步驟740。在步驟742中,執行初始化(給出一編碼符號向量0係數,假定一正前置符號,給出初始非零係數(如-1)之一暫時位置),且初始化開始於位置編號0。在步驟744中,檢查位置是否小於最大值及是否仍未找到前置符號。若位置小於最大值且仍未找到前置符號,則在步驟746中,檢查當前位置之向量係數是否為零。若當前位置之向量係數係零,則在步驟754中使目前位置向前步進一個步階且重疊程序。若目前向量係數係非零,則程序繼續至步驟748,其中一負係數導致步驟750中之一負lead_sign。在程序繼續至步驟754之前,在步驟752中將第一非零係數之位置記錄為initial_pos。若在步驟744中發現已找到前置符號,則程序繼續至步驟756,其中初始化符號向量encode_sign程序。步驟758至766繼續搜尋輸入向量之非零係數,且將下列非零係數之符號給予符號向量中之對應位置。當已審查所有位置時,則在步驟769中使前置符號及符號向量返回。
此方法之一益處在於:前置符號編碼位置之預移位或預定位可避免檢索內迭代迴圈中之前置符號隨機排列。此可有益於最佳化某一硬體中之編碼內迴圈(其中分支((IF/ELSE)之實施成本較高)。
表7繪示一MPVQ區段前置符號迭代實例。N
PVQ
(n=3, k=5)=2*N
MPVQ
(3, 5)=2*51=102,其中「2」對應於一現預提取之前置符號位元。向量PVQ-vec=[p0, p1, p2],例如,解碼索引8係[3, 0, 2],sum(abs(PVQ-vec))=5。在表7中,現預提取之初始符號係正的,在該實例中,自2*U(n, k)初始振幅區段之低/高區段導出下一前置符號。
索引 | 大小 (A(n, k)) | 大小 (U(n, k)) | 值 p0 | 新 K 大小 | 前置符號 | 值 p1 | 前置符號 | 值 p2 |
0 | A(n, K)=A(3, 5) | 1 | 5 | 1,新K=5 | + | 0 | 無 | 0 |
1 | 2*U(n, K) | 4 | 新 K=
K-4=1 | + | 1 | 無 | 0 |
2 | 4 | - | 0 | 保持 | 1 |
3 | 4 | - | 1 | 無 | 0 |
4 | 4 | + | 0 | 保持 | 1 |
5 | 3 | 新K=K-3=2 | + | 2 | 無 | 0 |
6 | 3 | + | 1 | + | 1 |
7 | 3 | + | 1 | - | -1 |
8 | 3 | - | 0 | 保持 | 2 |
9 | 3 | - | -2 | 無 | 0 |
10 | 3 | - | -1 | + | 1 |
11 | 3 | - | -1 | - | -1 |
12 | 3 | + | 0 | 保持 | -2 |
13 | 2 | 新K=K-2=3 | + | 3 | 無 | 0 |
14 | 2 | + | 2 | + | 1 |
15 | 2 | + | 2 | - | -1 |
16 | 2 | + | 1 | + | 2 |
17 | 2 | + | 1 | - | -2 |
18 | 2 | - | 0 | 保持 | 3 |
19 | 2 | - | -3 | 無 | 0 |
20 | 2 | - | -2 | + | 1 |
21 | 2 | - | -2 | - | -1 |
22 | 2 | - | -1 | + | 2 |
23 | 2 | - | -1 | - | -2 |
24 | 2 | + | 0 | 保持 | -3 |
25 | 1 | 新K=K-1=4 | + | 4 | 無 | 0 |
26 | 1 | + | 3 | + | 1 |
27 | 1 | + | 3 | - | -1 |
28 | 1 | + | 2 | + | 2 |
29 | 1 | + | 2 | - | -2 |
30 | 1 | + | 1 | + | 3 |
31 | 1 | + | 1 | - | -3 |
32 | 1 | - | 0 | 保持 | 4 |
33 | 1 | - | -4 | 無 | 0 |
34 | 1 | - | -3 | + | 1 |
35 | 1 | - | -3 | - | -1 |
36 | 1 | - | -2 | + | 2 |
37 | 1 | - | -2 | - | -2 |
38 | 1 | - | -1 | + | 3 |
39 | 1 | - | -1 | - | -3 |
40 | 1 | | 0 | 保持 | -4 |
41 | (A(n, K+1)-A(n, K))/2 | U(n, K+1)-U(n, K) | 0 | 大小=1+
U(n-1, K)+
U(n-1, K+1)
新K
K=5 |
保持(+) | 5 | 無 | 0 |
42 | 0 | 4 | + | 1 |
43 | 0 | 4 | - | -1 |
44 | 0 | 3 | + | 2 |
45 | 0 | 3 | - | -2 |
46 | 0 | 2 | + | 3 |
47 | 0 | 2 | - | -3 |
48 | 0 | 1 | + | 4 |
49 | 0 | 1 | - | -4 |
50 | 0 | 0 | 保持 | 5 |
表7:實例性MPVQ(3, 5)區段前置符號列舉
表8繪示根據表7之索引建構實例。
在本發明之一進一步部分中,描述一混合低動態僅列遞迴。若k值足夠低,則可使用下文進一步所呈現之新僅列遞迴公式來計算偏移矩陣A(n, k)中之一給定列n所需之偏移。附錄B中給出新遞迴公式之詳細推導。針對PVQ差偏移A(n, k)之一給定列n之通用遞迴方程式用於2012先前技術IETF/OPUS音訊編碼中:
A(n, k)=A(n, k-2)+((2*n-1)*A(n, k-1)-A(n, k-2))/(k-1)。
索引 | 值 p0 | 前置符號 | 值 p1 | 前置符號 | 值 p2 | 索引建構實例 |
0 | 5 | + | 0 | 無 | 0 | A(3, 0)=0 |
1 | 4 | + | 1 | 無 | 0 | |
2 | 4 | - | 0 | 保持 | 1 | |
3 | 4 | - | 1 | 無 | 0 | |
4 | 4 | + | 0 | 保持 | 1 | |
5 | 3 | + | 2 | 無 | 0 | |
6 | 3 | + | 1 | + | 1 | |
7 | 3 | + | 1 | - | -1 | |
8 | 3 | - | 0 | 保持 | 2 | |
9 | 3 | - | -2 | 無 | 0 | |
10 | 3 | - | -1 | + | 1 | |
11 | 3 | - | -1 | - | -1 | |
12 | 3 | + | 0 | 保持 | -2 | |
13 | 2 | + | 3 | 無 | 0 | A(3, 3)+0*(A(3, 4)-(A3, 3))/2=13 |
14 | 2 | + | 2 | + | 1 | |
15 | 2 | + | 2 | - | -1 | |
16 | 2 | + | 1 | + | 2 | |
17 | 2 | + | 1 | - | -2 | |
18 | 2 | - | 0 | 保持 | 3 | |
19 | 2 | - | -3 | 無 | 0 | A(3, 3)+(A(3, 4)-(A3, 3))/2=19 |
20 | 2 | - | -2 | + | 1 | |
21 | 2 | - | -2 | - | -1 | |
22 | 2 | - | -1 | + | 2 | |
23 | 2 | - | -1 | - | -2 | |
24 | 2 | + | 0 | 保持 | -3 | |
25 | 1 | + | 4 | 無 | 0 | A(3, 4)+0*(A(3, 5)-(A3, 4))/2=25 |
26 | 1 | + | 3 | + | 1 | |
27 | 1 | + | 3 | - | -1 | |
28 | 1 | + | 2 | + | 2 | |
29 | 1 | + | 2 | - | -2 | |
30 | 1 | + | 1 | + | 3 | |
31 | 1 | + | 1 | - | -3 | |
32 | 1 | - | 0 | 保持 | 4 | |
33 | 1 | - | -4 | 無 | 0 | A(3, 4)+(A(3, 5)-(A3, 4))/2=33 |
34 | 1 | - | -3 | + | 1 | |
35 | 1 | - | -3 | - | -1 | |
36 | 1 | - | -2 | + | 2 | |
37 | 1 | - | -2 | - | -2 | |
38 | 1 | - | -1 | + | 3 | |
39 | 1 | - | -1 | - | -3 | |
40 | 1 | | 0 | 保持 | -4 | |
41 | 0 |
保持(+) | 5 | 無 | 0 | A(3, 5)=41 |
42 | 0 | 4 | + | 1 | A(3, 5)+A(2, 1)+0=42 |
43 | 0 | 4 | - | -1 | A(3, 5)+A(2, 1)+1=43 |
44 | 0 | 3 | + | 2 | A(3, 5)+A(2, 2)+0=44 |
45 | 0 | 3 | - | -2 | A(3, 5)+A(2, 2)+1=45 |
46 | 0 | 2 | + | 3 | A(3, 5)+A(2, 3)+0=46 |
47 | 0 | 2 | - | -3 | A(3, 5)+A(2, 3)+1=47 |
48 | 0 | 1 | + | 4 | A(3, 5)+A(2, 4)+0=48 |
49 | 0 | 1 | - | -4 | A(3, 5)+A(2, 4)+1=49 |
50 | 0 | 0 | 保持 | 5 | A(3, 5)+A(2, 5)=50 |
表8:實例性MPVQ(3, 5)區段前置符號列舉,索引建構實例
藉由記錄及調處上述方程式且使用下列新關係:
U(n, k)=(A(n, k)-1)/2,
吾人可獲得一新的較佳較低動態範圍混合遞迴公式:
U(n, k)=U(n, k-2)+(n*A(n, k-1)–N
MPVQ
(n, k-2))/(k-1),
其中N
MPVQ
(n, k)=1+U(n, k)+U(n, k+1),(MPVQ(n, k)大小)。
此處,新分子項n*A(n, k-1)具有比對應先前技術分子項(2*n-1)*A(n, k-1)低很多之動態範圍。
在一較佳解決方案中,藉由使用A(n, k)係奇數(k>0)之事實,此僅列遞迴可進一步經記錄以僅使用列n之既往A(n, k)值。吾人獲得一新的非常有效混合遞迴公式:
U(n, k)=A(n, k-2)>>1+(n*A(n, k-1)–(1+A(n, k-1)>>1+A(n, k-2)>>1))/(k-1),
其中「>>」係整數整除2,大多數硬體中之一低成本右移。
此能夠將具有有限精度(例如,在64個或32個或33個位元內)之快速僅列遞迴用於比先前技術僅列遞迴高之n及k值。換言之,由於吾人已增大用於列遞迴之n或k之範圍,所以新n*A(n, k-1)項比舊2*n*A(n, k-1)項晚溢出/回繞。
由於U(n, k)所得偏移具有比先前所使用之A(n, k)低之動態範圍,所以最佳化僅列遞迴之動態益處亦可間接地見於表2之減小動態偏移及表3之混合遞迴偏移中。
在本發明之一進一步部分中,描述一混合MPVQ前置符號迭代及任何舊有PVQ迭代。另一可行列舉替代例將一初始MPVQ前置符號列舉階段及接著任何其他有效PVQ列舉方案用於向量之剩餘者。換言之,無論何時列舉第二前置符號,均可將使用中之PVQ列舉方法切換至一舊有方案。初始前置符號MPVQ階段將可使用比舊有短碼字方案多之一個位元,且在第一MPVQ階段之後,初始MPVQ階段會將偏移(A, U)之動態範圍減小至至少1個位元以下。
表9展示一實例性解檢索結構及MPVQH (一第一MPVQ階段與一基於OPUS/IETF音訊量值及(大小PVQ(n, k)=A(n, k)+A(n, k+1))之第二列舉階段之一混合組合)之結果。
索引 | 大小 | 值 p0 | 大小 | | | | 值 p1 | | 大小 | | | 值 p2 | 大小 |
0 | 1 | -5 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 |
1 | U(3,k)+U(3,k+1)=20+30=50 (此總和必須低於目標檢索數值動態範圍,例如< 232
或<231
) | -4 | 2*U(3, k)=2*20 | 2*U(3, k-1)=2*12 | 2*U(3, k-2)=2*6 | 2*U(3, k-3)=2*2 | -1 |
3 | [p1, p2]區段,其中使用任何其他PVQ方案(如IETF/OPUS音訊量值方案)來將子索引編碼為PVQ(2,剩餘k)子錐型。 | 0 | 1 |
2 | -4 | 0 | -1 | 2 |
3 | -4 | 0 | 1 |
4 | -4 | 1 | 1 | 0 | 1 |
5 | -3 | | -2 | 5 | 0 | 1 |
6 | -3 | -1 | -1 | 2 |
7 | -3 | -1 | 1 |
8 | -3 | 0 | -2 | 2 |
9 | -3 | 0 | 2 |
10 | -3 | 2 | 3 | 0 | 1 |
11 | -3 | 1 | -1 | 2 |
12 | -3 | 1 | 1 |
13 | -2 | | -3 | 7 | 0 | 1 |
14 | -2 | -2 | -1 | 2 |
15 | -2 | -2 | 1 |
16 | -2 | -1 | -2 | 2 |
17 | -2 | -1 | 2 |
18 | -2 | 0 | -3 | 2 |
19 | -2 | 0 | 3 |
20 | -2 | 3 | 5 | 0 | 1 |
21 | -2 | 2 | -1 | 2 |
22 | -2 | 2 | 1 |
23 | -2 | 1 | -2 | 2 |
24 | -2 | 1 | 2 |
25 | -1 | | -4 | 9 | 0 | 1 |
26 | -1 | -3 | -1 | 2 |
27 | -1 | -3 | 1 |
28 | -1 | -2 | -2 | 2 |
29 | -1 | -2 | 2 |
30 | -1 | -1 | -3 | 2 |
31 | -1 | -1 | 3 |
32 | -1 | 0 | -4 | 2 |
33 | -1 | 0 | 4 |
34 | -1 | 4 |
7 | 0 | 1 |
35 | -1 | 3 | -1 | 2 |
36 | -1 | 3 | 1 |
37 | -1 | 2 | -2 | 2 |
38 | -1 | 2 | 2 |
39 | -1 | 1 | -3 | 2 |
40 | -1 | 1 | 3 |
41 | 0 | M(2,k)=1+U(2, k+1)+U(2, k)=10 | -5 | 1 | 1 | 1 | 1 | 0 | 1 |
42 | 0 | -4 | 2*U(2, k) | 2*U(2, k-1) | 2*U(2, k-2) | 2*U(2, k-3) | -1 | 2 |
43 | 0 | -4 | 1 |
44 | 0 | -3 | | -2 | 2 |
45 | 0 | -3 | 2 |
46 | 0 | -2 | | -3 | 2 |
47 | 0 | -2 | 3 |
48 | 0 | -1 | | -4 | 2 |
49 | 0 | -1 | 4 |
50 | 0 | 0 | M(1, k) | -5 | 1 |
表9:實例性MPVQH(3, 5)混合單一前置符號列舉
MPVQ變動針對(n=3, k=5)。此混合變型使用單一前置符號迭代檢索階段及接著一基於先前技術IETF/OPUS類[{-, 0}/+]量值之PVQ檢索階段單元,N
PVQ
=2*N
MPVQH
=2*51=102,其中「2」對應於一單一初始單一提取前置符號位元。
使用一第一MPVQ(n, k)階段且接著在添加一第二符號時使用基於錐型之另一PVQ列舉階段(上述之一IETF/OPUS類量值階段)之一混合方案(如上文所例示之MPVQH)之缺點在於:PROM編碼大小將相當大,且迭代迴圈內之檢索方法之切換將需要進一步決策邏輯,該決策邏輯需要關鍵迭代迴圈內之進一步DSP循環。此外,必須維持若干偏移記憶體。然而,一混合MPVQ單一前置符號階段及接著一隨後常規PVQ方案之階段亦可提供使總短碼字大小擴充1個位元(例如,自32個位元至33個位元)之益處。
在上述實施例中,已選擇前置符號作為向量中之第一非零係數之符號。然而,在其他實施例中,亦可選擇前置符號作為向量中之最後非零係數之符號。因此,前置符號係整數輸入向量或整數輸出向量中之一終端非零係數之一符號。該終端非零係數係整數輸入向量或整數輸出向量中之一第一非零係數及一最後非零係數之一者。提取前置符號之使用可簡化剩餘檢索。一重要原因在於:可使檢索方案減半。在檢索之前,並不知道待處理之向量中有多少非零係數。然而,始終存在一終端非零係數。
在上述實施例中,亦已假定:整數輸入向量之檢索開始於最後係數且結束於第一係數,且解檢索開始於整數輸出向量之第一係數且結束於最後係數。在替代實施例中,檢索可代以開始於第一向量係數且結束於最後向量係數,而解檢索開始於最後係數且結束於第一係數。此可與終端非零係數之替代者之任何者組合。在進一步實施例中,檢索可依任何預定順序拾取整數輸入向量之係數,且接著,對應解檢索在一相反方向上檢閱整數輸出向量之係數。接著,可相應地調適錐型向量量化列舉方案及錐型向量量化解列舉方案。在一特定實施例中,整數輸入/輸出向量中之「位置」可為依假定處理順序之一位置且不必對應於向量本身內之實際位置。
在特定實施例中,本發明可應用於可為一有線或無線器件之一使用者終端機或使用者設備。
如本文中所使用,非限制性術語「使用者設備(UE)」及「無線器件」可係指一行動電話、一蜂巢式電話、配備有無線電通信能力之一個人數位助理(PDA)、一智慧型電話、配備有一內部或外部行動寬頻數據機之一膝上型電腦或個人電腦(PC)、具有無線電通信能力之一平板PC、一目標器件、一器件至器件UE、一機器型UE或實現機器至機器通信之UE、iPAD、客戶端設備(CPE)、膝上型嵌入設備(LEE)、膝上型安裝設備(LME)、通用串列匯流排(USB)硬體鎖、一可攜式電子無線電通信器件、配備有無線電通信能力之一感測器器件、或其類似者。特定言之,術語「UE」及術語「無線器件」應被解譯為非限制性術語,其包括:任何類型之無線器件,其在一蜂巢式或行動通信系統中與一無線電網路節點通信;或任何器件,其配備有根據一蜂巢式或行動通信系統內之任何相關通信標準而無線通信之無線電電路。
如本文中所使用,術語「有線器件」可係指經組態以有線連接至一網路或準備有線連接至一網路之任何器件。特定言之,有線器件可為上述器件之至少部分,其等在經組態用於有線連接時具有或不具有無線電通信能力。
在特定實施例中,本發明可應用於可為一有線或無線器件之一網路節點。
在特定實施例中,網路節點可為一無線電網路節點。如本文中所使用,非限制性術語「無線電網路節點」可係指基地台、網路控制節點(諸如網路控制器)、無線電網路控制器、基地台控制器及其類似者。特定言之,術語「基地台」可涵蓋不同類型之無線電基地台,其包含:標準化基地台,諸如節點B或演進型節點B (eNB);及巨型/微型/微微無線電基地台、家庭基地台(亦稱為毫微微基地台)、中繼節點、中繼器、無線電存取點、基地收發台(BTS)、及甚至無線電控制節點(其控制一或多個遠端無線電單元(RRU)或其類似者)。
在特定實施例中,網路節點可為一有線通信系統中之一網路節點。
UE或網路節點亦可包含用於與一或多個其他節點通信(其包含傳輸及/或接收資訊)之無線電電路。
應瞭解,可依各種方式組合及重新配置本文中所描述之方法及器件。
例如,可在硬體、或由適合處理電路執行之軟體、或其等之一組合中實施實施例。
可在使用任何習知技術(諸如離散電路或積體電路技術)之硬體(其包含通用電子電路及專用電路兩者)中,實施本文中所描述之步驟、功能、程序、模組及/或區塊。
特定實例包含一或多個經適當組態之數位信號處理器及其他已知電子電路,例如經互連以執行一專用功能之離散邏輯閘,或專用積體電路(ASIC)。
替代地,可在軟體(諸如由適合處理電路(諸如一或多個處理器或處理單元)執行之一電腦程式)中實施本文中所描述之步驟、功能、程序、模組及/或區塊的至少部分。
因此,本文中所呈現之(若干)流程圖可被視作由一或多個處理器執行之一或若干電腦流程圖。一對應裝置可被定義為一群組之功能模組,其中由處理器執行之各步驟對應於一功能模組。在此情況中,功能模組被實施為運行於處理器上之一電腦程式。
處理電路之實例包含(但不限於)一或多個微處理器、一或多個數位信號處理器(DSP)、一或多個中央處理單元(CPU)、視訊加速硬體及/或任何適合可程式化邏輯電路,諸如一或多個場可程式化閘陣列(FPGA)或一或多個可程式化邏輯控制器(PLC)。
亦應瞭解,可重新使用其中實施本發明之任何習知器件或單元之通用處理能力。亦可(例如)藉由重新程式化既有軟體或藉由添加新軟體組件來重新使用既有軟體。
本發明提供一種編碼器,其經組態以對音訊/視訊信號進行編碼,其中該編碼器經組態以:獲得表示音訊/視訊信號樣本之一整數輸入向量,該整數輸入向量具有數個整數值係數;自該整數輸入向量提取一前置符號,該前置符號係該輸入向量中之一終端非零係數之一符號,該終端非零係數係該整數輸入向量中之一第一非零係數及一最後非零係數中之一者;使用一錐型向量量化列舉方案來將該整數輸入向量檢索成一輸出索引,該輸出索引與該前置符號一起表示音訊/視訊信號樣本,其中該錐型向量量化列舉方案經設計用於忽略該終端非零係數之該符號;及將作為一第一碼字之該前置符號及作為一第二碼字之該輸出索引輸出成一傳出位元串流。
在一特定實例中,該編碼器包括一處理器及一記憶體。該記憶體包括可由該處理器執行之指令,藉此該編碼器/處理器可操作以:獲得表示音訊/視訊信號樣本之一整數輸入向量,該整數輸入向量具有數個整數值係數;自該整數輸入向量提取一前置符號,該前置符號係該整數輸入向量中之一終端非零係數之一符號,該終端非零係數係該整數輸入向量中之一第一非零係數及一最後非零係數之一者;使用一錐型向量量化列舉方案來將該整數輸入向量檢索成一輸出索引,該輸出索引與該前置符號一起表示音訊/視訊信號樣本,其中該錐型向量量化列舉方案經設計用於忽略該終端非零係數之該符號;及將作為一第一碼字之該前置符號及作為一第二碼字之該輸出索引輸出成一傳出位元串流。
本發明亦提供一種解碼器,其經組態以藉由錐型向量量化而解檢索音訊/視訊樣本,其中該解碼器經組態以:自一傳入位元串流接收作為一第一碼字之一前置符號及作為一第二碼字之一輸入索引,該前置符號及該輸入索引表示音訊/視訊信號樣本,該前置符號係待建立之一整數輸出向量中之一終端非零係數之一符號,該整數輸出向量表示該等音訊/視訊信號樣本,該整數輸出向量具有數個整數值係數,該終端非零係數係該整數輸出向量中之一第一非零係數及一最後非零係數之一者;使用一錐型向量量化解列舉方案來將該輸入索引解檢索成該整數輸出向量,其中由一列舉方案建立之該輸入索引經設計用於忽略該終端非零係數之該符號;根據該所接收之前置符號而指派該終端非零係數之一符號;及輸出該向量。
在一特定實例中,該解碼器包括一處理器及一記憶體。該記憶體包括可由該處理器執行之指令,藉此該解碼器/處理器可操作以:自一傳入位元串流接收作為一第一碼字之一前置符號及作為一第二碼字之一輸入索引,該前置符號及該輸入索引表示音訊/視訊信號樣本,該前置符號係待建立之一整數輸出向量中之一終端非零係數之一符號,該整數輸出向量表示該等音訊/視訊信號樣本,該整數輸出向量具有數個整數值係數,該終端非零係數係該整數輸出向量中之一第一非零係數及一最後非零係數之一者;使用一錐型向量量化解列舉方案來將該輸入索引解檢索成該整數輸出向量,其中由一列舉方案建立之該輸入索引經設計用於忽略該終端非零係數之該符號;根據該所接收之前置符號而指派該終端非零係數之一符號;及輸出該向量。
在下文中,將參考圖20來描述一電腦實施方案之一實例。編碼器10包括處理電路(諸如一或多個處理器800)及一記憶體810。在此特定實例中,本文中所描述之步驟、功能、程序、模組及/或區塊之至少部分實施於一電腦程式820至826中,電腦程式820至826載入至記憶體中以由處理電路執行。處理電路及記憶體彼此互連以實現正常軟體執行。一選用之輸入/輸出器件804至808亦可互連至處理電路及/或記憶體以實現相關資料(諸如(若干)輸入參數及/或所得之(若干)輸出參數)之輸入及/或輸出。
在下文中,將參考圖21來描述一電腦實施方案之另一實例。解碼器60包括處理電路(諸如一或多個處理器850)及一記憶體860。在此特定實例中,本文中所描述之步驟、功能、程序、模組及/或區塊之至少部分實施於一電腦程式870至876中,電腦程式870至876載入至記憶體中以由處理電路執行。處理電路及記憶體彼此互連以實現正常軟體執行。一選用之輸入/輸出器件854至858亦可互連至處理電路及/或記憶體以實現相關資料(諸如(若干)輸入參數及/或所得之(若干)輸出參數)之輸入及/或輸出。
術語「電腦」一般應被解譯為能夠執行程式碼或電腦程式指令以執行一特定處理、判定或計算任務之任何系統或器件。
在一特定實施例中,該電腦程式包括指令,其在由至少一處理器執行時引起該(等)處理器:獲得表示該等音訊/視訊信號樣本之一整數輸入向量,該整數輸入向量具有數個整數值係數;自該整數輸入向量提取一前置符號,該前置符號係該整數輸入向量中之一終端非零係數之一符號,該終端非零係數係該整數輸入向量中之一第一非零係數及一最後非零係數之一者;使用一錐型向量量化列舉方案來將該整數輸入向量檢索成一輸出索引,該輸出索引與該前置符號一起表示該等音訊/視訊信號樣本,該錐型向量量化列舉方案忽略該終端非零係數之該符號;及將作為一第一碼字之該前置符號及作為一第二碼字之該輸出索引輸出成一傳出位元串流。
在一特定實施例中,該電腦程式包括指令,其在由至少一處理器執行時引起該(等)處理器:自一傳入位元串流接收作為一第一碼字之一前置符號及作為一第二碼字之一輸入索引,其中該前置符號及該輸入索引表示音訊/視訊信號樣本,該前置符號係待建立之一整數輸出向量中之一終端非零係數之一符號,該整數輸出向量表示該等音訊/視訊信號樣本,該整數輸出向量具有數個整數值係數,該終端非零係數係該整數輸出向量中之一第一非零係數及一最後非零係數之一者;使用一錐型向量量化解列舉方案來將該輸入索引解檢索成該整數輸出向量,由一列舉方案建立之該輸入索引忽略該終端非零係數之該符號;根據該所接收之前置符號而指派該終端非零係數之一符號;及輸出該整數輸出向量。
本發明亦提供一種載體,其包括電腦程式,其中該載體係一電子信號、一光學信號、一電磁信號、一磁信號、一電信號、一無線電信號、一微波信號或一電腦可讀儲存媒體之一者。
因此,該軟體或電腦程式可實現為通常裝載或儲存於一電腦可讀媒體上之一電腦程式產品。該電腦可讀媒體可包含一或多個可移除或不可移除記憶體器件,其包含(但不限於)一唯讀記憶體(ROM)、一隨機存取記憶體(RAM)、一光碟(CD)、一數位多功能光碟(DVD)、一藍光光碟、一通用串列匯流排(USB)、記憶體、一硬碟機(HDD)儲存器件、一快閃記憶體、一磁帶或任何其他習知記憶體器件。因此,該電腦程式可載入至一電腦或等效處理器件之操作記憶體中以由其處理電路執行。
如本文中所指示,該編碼器可替代地定義為一群組之功能模組,其中該等功能模組實施為運行於至少一處理器上之一電腦程式。
圖22係繪示包括一群組之功能模組830至836之一編碼器10之一實例的一示意性方塊圖。
因此,駐留於記憶體810中之電腦程式可組織為適當功能模組830至836,其等經組態以在由處理器800執行時執行本文中所描述之步驟及/或任務之至少部分。圖22中繪示此等功能模組830至836之一實例。
如本文中所指示,該解碼器可替代地定義為一群組之功能模組,其中該等功能模組實施為運行於至少一處理器上之一電腦程式。
圖23係繪示包括一群組之功能模組880至886之一解碼器60之一實例的一示意性方塊圖。
因此,駐留於記憶體860中之電腦程式可組織為適當功能模組880至886,其等經組態以在由處理器850執行時執行本文中所描述之步驟及/或任務之至少部分。圖23中繪示此等功能模組880至886之一實例。
所提出之方法改良一基於短碼字之錐型向量量化方案之效能。該方案減小所需檢索偏移之動態範圍。減小動態範圍之所要副效應係:可在無任何顯著損失之情況下將1位元較大「短」PVQ碼字用於一給定HW。
此可將B+1位元PVQ碼字方案用於支援B位元無符號算術之DSP硬體上,且此可將一B位元PVQ碼字方案實施於僅支援帶符號B位元整數運算(具有一B-1位元量值)之一DSP硬體上。
此外,將歸因於對1位元較大碼字進行有效編碼之能力而減少傳輸分割側資訊所需之負擔。作為一實例,使用維數N=128時之k個均勻分佈脈衝之PVQ編碼,其中5個位元用於對各二進位維數分割之關係進行編碼且藉由音訊編解碼位元分配演算法而將71個位元分配給維數N=128時之PVQ。最佳無限制PVQ給出:
log2(N
PVQ
(N=128, k=12))=67.2個位元,
log2(N
MPVQ
(N=128, k=12+1))=71.5個位元。
67.2<71<71.5,即,12個單位脈衝可在N=128時使用一最佳無限制PVQ以導致12/128之一脈衝密度。
舊有B=32位元方案需要2次分割來變成幾乎相等維數[N1=43, N2=43, N3=42]:
2*log2(N
PVQ
(43, 4))+log2(N
PVQ
(42, 4))+2*5=63.25+2*5=73.25個位元
73.25超過位元預算71。吾人藉由嘗試將脈衝數減1至11而獲得:
2*log2(N
PVQ
(43,4))+log2(N
PVQ
(42,3))+2*5=58.84+2*5=68.84<71。
所得脈衝密度變成11/128。
舊有B=32位元方案需要2次分割來變成不均勻分割維數[N1=64, N2=32, N3=32]:
log2(N
PVQ
(64, 6))+2*log2(N
PVQ
(32, 3))+2*5=53.34+2*5=73.34個位元
73.25超過位元預算71。吾人藉由嘗試將脈衝數減1至11而獲得:
2*log2(N
PVQ
(32, 3))+log2(N
PVQ
(64, 5))+2*5=58.92+2*5=68.9<71。
所得脈衝密度變成11/128。
新(B+1)=33位元MPVQ方案需要1次分割來變成[N1=64, N2=64]:
2*log2(2*N
MPVQ
(64, 6))+5=2*32.51+5=70.02個位元< 71,
其中
2*N
MPVQ
(64, 6)=N
PVQ
(64, 6)=32.51>B。
所得脈衝密度變成12/128。換言之,鑑於分配給維數N=128向量之71個位元,舊32位元碼字方案僅可提供11個脈衝,而新33位元碼字方案可提供12個脈衝。
歸因於33位元之1位元較大編碼範圍,新方案更適合於根據音訊編解碼器之原始位元分配指令而分配位元,此係因為額外向量分割負擔(通常)可減少。
可在ITU-T G.719說明書之第7.5.2章節或OPUUS RFC6716之第4.3.4.1章節中找到一實例性音訊編解碼位元分配方案。
上述實施例僅供例示,但應瞭解,本發明不限於此。熟悉此項技術者應瞭解,可在不背離由隨附申請專利範圍定義之本發明之範疇之情況下對實施例作出各種修改、組合及改變。特定言之,若技術上可行,則可在其他組態中組合不同實施例中之不同部分解決方案。
縮寫列表:
VQ 向量量化器/量化
PVQ 錐型VQ
PVQ(n, k) 具有維數n及k個單位脈衝之PVQ結構,PVQ(n, k)係具有與等於k之一L1範數之錐型結構
MPVQ 前置符號模組化PVQ
MPVQ(n, k) 具有維數n及k個單位脈衝之MPVQ結構,MPVQ(n, k)結構係一切片PVQ(n, k)錐型結構,MPVQ(n, k)之L1範數係k
N
PVQ
(N, K) PVQ(維數N, K個單位脈衝)之大小
N
MPVQ
(N, K) MPVQ(維數N, K個單位脈衝)之大小
SIMD 單指令多資料(一DSP指令類別)
DSP 數位信號處理器
HW 硬體
SW 軟體
N, dim 維數
n, l 當前維數
k, K PVQ(n, k)及MPVQ(n, k)中之單位脈衝數
KMAX 最大K值
B 用於有效操作之目標硬體系統中之位元限制,在現今處理器中通常為16個、32個或64個位元
R 每樣本位元或每係數位元
x 目標向量
r, vec 外形向量(有時亦稱作剩餘向量)
G 用於縮放目標向量之增益(純量或向量)
RAM 隨機存取記憶體
OPS 每秒運算
MOPS 每秒百萬次運算
P-ROM 程式ROM
ROM 唯讀記憶體(通常預儲存資料)
LSB 最低有效位元
MSB 最高有效位元
LP 線性預測
附錄 A
在此附錄中,包含自IETF/OPUS音訊PVQ區段之相關提取以建立先前技術狀態。經改善且最佳化之OPUS音訊PVQ檢索/解檢索演算法涉及若干最佳化,其等未描述於RFC 6716之文字描述中,而是提供為一附件IETF/OPUS音訊RFC6716 PVQ解檢索中之一c編碼檔案(cwrs.c)。
「PVQ解碼
將PVQ向量之解碼實施於decode_pulses()(cwrs.c)中。將唯一碼字索引解碼為0至V(N, K)-1之間之一均勻分佈整數值,其中V(N, K)係N個樣本中之K個脈衝之可行組合數。接著,依[PVQ]中所指定之相同方式將索引轉換成一向量。檢索係基於V(N, K) (在[PVQ]中表示為N(L, K))之計算。
可將組合數遞迴地計算為V(N, K)=V(N-1, K)+V(N, K-1)+V(N-1, K-1),其中V(N, 0)=1且V(0, K)=0,K!=0。存在諸多不同方式來計算V(N, K),其包含預先計算表及直接使用遞迴公式化。參考實施方案一次一行地應用遞迴公式化以節約記憶體使用,以及應用一替代單變數遞迴以初始化一任意行,且將直接多項式解應用於小N。所有此等方法係等效的,且具有速率、記憶體使用及編碼大小之不同權衡。實施方案可使用其喜歡之任何方法,只要該等方法等效於數學定義。
使解碼向量X恢復如下。使i成為使用第4.1.5章節中之程序來解碼之索引(其中ft=V(N, K)),使得0<=i<V(N, K)。使k=K。接著,當j=0至(N-1)(含)時,完成:
1. 使p=(V(N-j-1, k)+V(N-j, k))/2。
2. 若i<p,則使sgn=1,否則使sgn=-1且設定i=i–p。
3. 使k0=k且設定p=p-V(N-j-1, k)。
4. 當p>i時,設定k=k-1且p=p-V(N-j-1, k)。
5. 設定X[j]=sgn*(k0-k)且i=i-p。
接著,解碼向量X經正規化使得其L2範數等於1。」
IETF/OPUS 音訊 PVQ 碼字限制及分割
「分割解碼
為避免在對PVQ編碼向量進行解碼時需要多精度計算,碼本所允許之最大大小係32個位元。當需要更大碼本時,代以將向量分割成N/2大小之兩個子向量。具有自當前分配導出之精度之一量化增益參數經熵編碼以表示分割之各側之相對增益,且遞迴地應用整體解碼程序。可應用高達(LM+1)個分割之多個分割位準。將相同遞迴機制應用於立體聲音訊之聯合編碼。」
IETF/OPUS 音訊 RFC-6716 PVQ 搜尋
「球形向量量化
CELT使用一錐型向量量化器(PVQ)[PVQ]來量化尚無法由基頻預測器預測之各頻帶中之光譜之細節。PVQ碼本由N個樣本之一向量中之K個帶符號脈衝之總和組成,其中要求相同位置處之兩個脈衝具有相同符號。因此,碼本包含滿足sum(abs(y(j)))=K之N個維數之所有整數編碼向量y。
在其中存在足夠分配位元之頻帶中,PVQ用於對由第5.3.2章節中之正規化直接所致之單位向量進行編碼。鑑於一PVQ編碼向量y,獲得單位向量X作為X=y/||y||,其中||.||表示L2範數。」
「PVQ搜尋
藉由alg_quant()(vq.c)而執行搜尋最佳編碼向量y。存在若干可行搜尋方法,其等具有品質與複雜性之間之一權衡。參考實施方案中所使用之方法藉由將正規化光譜X投影至(K-1)個脈衝之碼本錐上而計算一初始碼字y1:
y0=truncate_towards_zero((K-1)*X/sum(abs(X)))
根據N、K及輸入資料,初始碼字y0可含有自0至K-1之非零值。使用最小化y與X之間之正規化相關性之一貪婪搜尋來迭代地找到所有剩餘脈衝(最後脈衝除外):
T
J=-X*y/||y||
上述搜尋被視為品質與計算成本之間之一良好權衡。然而,存在其他可行方式來搜尋PVQ碼本且實施方案可使用任何其他搜尋方法。參閱celt/vq.c中之alg_quant()。」
IETF/OPUS 音訊 RFC-6716 PVQ 檢索
「PVQ編碼
將待編碼之向量X轉換成一索引i,使得0<=i<V(N, K),如下所述。使i=0且k=0。接著,當j=(N-1)至低達0 (含)時,完成:
1. 若k>0,則設定i=i+(V(N-j-1, k-1)+V(N-j, k-1))/2。
2. 設定k=k+abs(X[j])。
3. 若X[j]<0,則設定i=i+(V(N-j-1, k)+V(N-j, k))/2。
接著,使用第5.1.4章節中之程序來對索引i進行編碼,其中ft=V(N, K)。」
附錄 B MPVQ 相關遞迴方程式之推導
使用費歇公式來導出U(n, k)及M(n, k)=N
MPVQ
(n, k)大小關係:
使用N(n, k)作為N
PVQ
(n, k)之一短記法,PVQ向量之維數係n且單位脈衝數係k。
自1986年之費歇原始PVQ遞迴:
N(n, k)=N(n-1, k)+N(n-1, k-1)+N(n-1, k) (1)
定義M(n, k)=N(n, k)/2 (2);
下文中使用M(n, k)作為N
MPVQ
(n, k)之短記法
// 具有一初始正號之PVQ向量之M(n, k)數目係一全PVQ錐型N(n, k)中之輸入項數之一半
將U(n, k)定義為sum(j=1, j=k-1, M(n-1, j) (3)
// 具有一剩餘前置正號(+)之向量數目(具有一初始位置值「k」之向量及具有一初始位置值「0」之向量除外)
M(n, k)=1+2*U(n, k)+M(n-1, k) (4);
// 1針對k=KMAX,僅此一前置向量可行;2*U(n, k)用於具有一新/下一前置符號之向量數,(「2」歸因於新/下一前置正號或負號)((U(n, k)向量具有初始正振幅[KMAX-1, KMAX-2…1]);M(n-1, k)用於具有一前置零值之剩餘向量
(等效地,M(n, k)=N
MPVQ
(n, k))
N
MPVQ
(n, k)=1+2*U(n, k)+N
MPVQ
(n-1, k) (4b);
M(n, k)-M(n-1, k)=1+2*U(n, k)=A(n, k) (5)
組合(1)、(2)、(5)
M(n-1, k)=U(n, k+1)-U(n, k) (6)
組合(4)、(6)
M(n, k)=1+U(n, k)+U(n, k+1) (7)
此時,(7)可用於大小計算(如U(n, k)及U(n, k+1)<M(n, k)兩者(5)),(5)之差值A(n, k)仍可用於振幅偏移迭代,若僅用於偏移,則高達A(n, KMAX)(如A(n,
KMAX+1
))可超過M(n, KMAX),且因此引起精度有限硬體中之數值問題。
U(n, k) 之直接列計算遞迴之 推 導
U(n, k)=(A(n,k)-1)/2 (來自方程式(5))
用於CELT/OPUS音訊中之一PVQ差列A(n, k)之通用方程式
A(n, k)=A(n, k-2)+((2*n-1)*A(n, k-1)-A(n, k-2))/(k-1) (8)
組合(5)、(8)
U(n, k)=((2*n-1)*(U(n, k-1)+(k-2)*U(n, k-2)+n-1)/(k-1) (9)
或允許一混合遞迴
U(n, k)=(A(n, k-2)-1)/2+((2*n-1)*A(n, k-1)-A(n, k-2))/(2*(k-1)) (10)
歸因於(8)、(9)及(10)之分子之高動態範圍,必須在評估此直接函數時特別小心,尤其在一有限精度算術系統(例如一32位元系統))中。
(8)用於IETF/OPUS及原始CELT中。
(10)可用於U(n, KMAX+1)之MPVQ系統計算中,此係因為先驗地已知所有先前A(n, k<KMAX+1)具有足夠低值。
甚至可進一步簡化(10)(此係因為當k>1時,A(n,k)始終為奇數)。
U(n, k)=floor(A(n, k-2)/2)+
(
n*A(n, k-1)-(floor(A(n, k-1)/2)+floor(A(n, k-2)/2
+1
))
)
/(k-1) (11)
或U(n, k)=U(n, k-2)+(n*A(n, k-1)-
NMPVQ
(n, k-2)
)/(k-1) (
11.b
)
MPVQ n,k 矩陣遞迴關係
自費歇關係式(1)(N(n, k)=N(n-1, k)+N(n-1, k-1)+N(n-1, k))
組合(7)及(5),吾人可發現此等遞迴關係:
U(n, k+1)=1+U(n-1, k)+U(n-1, k+1)+U(n, k) (12),
其中初始條件U(0, *)=0,U(1, *)=0,且U(a, b)=U(b, a)
A(n, k+1)=A(n-1, k)+A(n-1, k+1)+A(n, k) (13)
其中初始條件A(0, 0)=1,A(0, 1+)=0,A(1, *)=1,且A(a, b)=A(b, a)
此時,(13)可用於自A(n, k)之先前向量列n-1、k=0至KMAX迭代地計算列n、k=0至KMAX,且(12)可用於自U(n, k)之先前向量列n-1、k=0至KMAX+1迭代地計算列n、k=0至KMAX+1。
(13)用於IETF-OPUS音訊中。
使用(12)及A(n, k)係奇數之事實,吾人獲得一新的有效混合遞迴公式:
U(n, k+1)=1+A(n-1, k)>>1+U(n-1, k+1)+A(n, k)>>1 (14)
其中「>>」係整數整除2 (右移),由於A(大n, k+1)可飽和,所以方程式(14)用於保持於給定動態範圍(例如,對於最後(k+1)偏移行而言,32個位元)內。
向量半徑關係 、 藉由 乘積 之列舉及向量長度遞迴關係
1998年,Hung、Tsern、Meng亦總結一PVQ(l==n, k)錐之一些額外相關關係,大小係N(l, k)=N
PVQ
(l, k)。下列向量半徑遞迴關係「(43)」係針對列l=n之一基本僅列大小關係。
藉由乘積之下列列舉公式「(44)」係針對PVQ大小之基於數個非零元素之乘積關係。
(向量長度遞迴) (42)
(向量半徑遞迴) (43)
(藉由乘積之列舉公式) (44)