用於信號的低複雜度組合編碼的設備和方法
2023-06-15 09:00:41 3
專利名稱:用於信號的低複雜度組合編碼的設備和方法
技術領域:
本發明一般地涉及編碼向量,具體上涉及向量的低複雜度組合階乘脈衝編碼。
背景技術:
用於對語音、音頻、圖像、視頻和其他信號的向量或者矩陣數量進行編碼的方法是公知的。在Peng等的美國專利6,236,960(其通過引用被包含在此)中描述的這樣一種方法被稱為階乘脈衝編碼(或者FPC)。如下所示,FPC可以使用總共M個比特來編碼向量xi 並且,向量xi的所有值是整數值,使得-m≤xi≤m,其中,m是單位幅度脈衝的總數,並且n是向量長度。總共M個比特被用於以最有效的方式來對N個組合進行編碼,使得用於描述組合的理論最小數量的如下表達式成立 對於這個方程式,F(n,d)是通過下式給出的在n個位置上的d個非零的向量元素的組合的數量 D(m,d)是通過下式給出的、在給定的總共m個的單位脈衝的情況下的d個非零向量元素的組合的數量 D(m,d)=F(m-1,d-1),(4) 並且,2d表示用於描述d個非零向量元素的極性(符號)所需要的組合的數量。項min(m,n)允許單位幅度脈衝的數量m超過向量長度n的情況。在現有技術中已經充分說明了用於編碼和解碼這種形式的向量的方法和設備。而且,已經在3GPP2標準C.S0014-B中描述了這種編碼方法的實際實現方式,其中,向量長度n=54和單位幅度脈衝的數量m=7,其產生了M=35比特的碼字。
雖然n和m的這些值不引起任何過度的複雜性負擔,但是更大的值會很快地引起問題,特別是在需要將存儲和計算複雜度保持得儘可能低的移動手持裝置中。例如,這種編碼方法對於一些應用(諸如音頻編碼)的使用可能要求n=144並且m=28或者更高。在這些情況下,與使用現有技術的方法來產生組合表達式F(n,d)相關聯的成本可能對於實際實施而言太高。
為了更詳細地考察該成本,我們可以將等式3重寫為 直接的實現是存在問題的,因為F(144,28)需要在分子上的197比特的精度和在分母上的98比特的精度,以產生99比特的商。因為在今天的手持裝置中使用的大多數數位訊號處理器(DSP)通常僅僅支持16比特x16比特的乘法運算,因此,需要使用特殊的多倍精度的乘法/除法程序(routine)。這樣的程序需要一系列嵌套的乘法/累加運算,其通常需要k個乘法/累加(MAC)量級的運算,其中,k是在操作數中的16比特分段的數量,
因此,單個197×16比特乘法的執行需要最少13個MAC運算外加移位和存儲操作。以類似的方式來計算分母項,以產生98比特的結果。另外,需要197/98比特的除法,其是極其複雜的運算,因此在方程5中的整個階乘關係式的計算將需要相當多的資源。
為了減小複雜度,重寫方程5,以對除法運算進行分配,從而產生下述結果 在這個表達式中,除法運算的動態範圍得以減小,但是不幸的是,需要提高商的解析度,以精確地表示由3、7、9等進行的除法。為了適應這種結構,也需要四捨五入運算來保證整數結果。假定在大數的高精度除法運算的情況下,這種實現方式未充分地處理大值的m和n的複雜度問題,並且還可能由於在精度上的累積誤差而產生不正確的結果。
在另一種實現方式中,可以以下面的方式來重新布置方程5 如果從左向右評估這個表達式,則結果將總是產生整數值。雖然這種方法在一定程度上控制精度和動態範圍,但是大值的m和n仍然要求大量地使用多倍精度的乘法和除法運算。
最後,為了最小化計算複雜度,有可能預先計算和在查找表中存儲所有的階乘組合。因此,可以簡單地在n×m矩陣中存儲F(n,m)的所有值,並且使用很少的處理器周期來從存儲器中對其進行適當地檢索。但是,這種手段的問題是當n和m變大時,相關聯的存儲要求也變大。引用之前的示例,F(144,28)將需要
這對於大多數移動手持裝置的過高的。因此,需要一種用於向量的低複雜度的組合階乘脈衝編碼的方法和設備。
發明內容
圖1是編碼器的方框圖。
圖2圖解了碼字的產生。
圖3解碼器的方框圖。
圖4是示出圖1和圖3的組合函數產生器的操作的流程圖。
圖5是示出圖1的編碼器操作的流程圖。
圖6是示出圖3的解碼器操作的流程圖。
圖7是示出圖1的組合編碼電路的操作的流程圖。
圖8是示出圖3的組合解碼電路的操作的流程圖。
具體實施例方式 為了解決上述的需要,在此提供了一種用於向量的低複雜度組合編碼的方法和設備。在編碼器的操作期間,接收信號向量(x)。將根據要編碼的信號向量來產生第一多倍精度操作數(Ψ′k)。尾數操作數和指數操作數被產生。尾數操作數和指數操作數都表示基於要編碼的信號向量的第二多倍精度的操作數。根據指數操作數來選擇要修改的Ψ′k的一部分。根據尾數操作數修改Ψ′k的該部分,以產生修改的多倍精度的操作數(Ψ′k+1)。最後,產生多倍精度的碼字來在對應的解碼器中使用。
本發明涵蓋一種用於操作編碼器的方法,所述編碼器將向量(x)編碼成碼字(C)。所述方法包括步驟接收要編碼的向量x;根據x來產生第一多倍精度的操作數(Ψ′k);並且,產生尾數操作數(M)和指數操作數(h)。所述尾數操作數和指數操作數表示基於要編碼的信號向量的第二多倍精度的操作數(F′(pk,k))。然後,根據所述指數操作數來選擇要修改的Ψ′k的一部分,並且根據尾數操作數和位置指示符來修改Ψ′k的所述部分來產生修改的多倍精度的操作數(Ψ′k+1)。最後,根據Ψ′k+1來產生碼字(C)。
本發明另外涵蓋一種編碼器,其包括組合編碼電路,所述組合編碼電路用於執行以下步驟接收要編碼的向量x;根據x來產生第一多倍精度的操作數(Ψ′k);並且,產生尾數操作數(M)和指數操作數(h)。所述尾數操作數和指數操作數表示基於要編碼的信號向量的第二多倍精度的操作數(F′(pk,k))。然後,根據所述指數操作數來選擇要修改的Ψ′k的一部分,並且根據尾數操作數和位置指示符來修改Ψ′k的所述部分來產生修改的多倍精度的操作數(Ψ′k+1)。最後,根據Ψ′k+1來產生碼字(C)。
本發明另外涵蓋一種操作解碼器的方法,所述解碼器根據碼字(C)產生向量(x)。所述方法包括以下步驟接收所述碼字(Cπ);根據Cπ來產生第一多倍精度的操作數(Ψ′k+1);並且,產生尾數操作數(M)和指數操作數(h)。所述尾數操作數和指數操作數表示基於所述碼字的第二多倍精度的操作數(F′(pk,k))。根據所述指數操作數來選擇要修改的Ψ′k+1的一部分,並且根據尾數操作數和位置指示符來修改Ψ′k+1的所述部分,從而產生修改的多倍精度的操作數(Ψ′k)。向量x的第(k-1)個非零的元素的位置pk-1被解碼,並且根據位置pk-1來產生向量(x)。
本發明另外涵蓋一種解碼器,其包括組合編碼電路,所述組合編碼電路用於執行以下步驟接收所述碼字(Cπ);根據Cπ來產生第一多倍精度的操作數(Ψ′k+1);並且,產生尾數操作數(M)和指數操作數(h)。所述尾數操作數和指數操作數表示基於所述碼字的第二多倍精度的操作數(F′(pk,k))。根據所述指數操作數來選擇要修改的Ψ′k+1的一部分,並且根據尾數操作數和位置指示符來修改Ψ′k+1的所述部分,從而產生修改的多倍精度的操作數(Ψ′k)。向量x的第(k-1)個非零的元素的位置pk-1被解碼,並且根據位置pk-1來產生向量(x)。
現在轉到附圖,其中,相似的附圖標號表示相似的部件。圖1是編碼器100的方框圖。編碼器100包括向量產生器102、組合編碼電路(編碼器)106、組合函數產生器108和其他編碼電路104。在操作期間,向量產生器102接收要編碼的輸入信號。如在本領域中已知,所述輸入信號可以包括諸如語音、音頻、圖像、視頻和其他信號的信號。
向量產生器102接收輸入信號,並且建立向量xi。向量產生器102可以包括任何數量的編碼範例,其中包括但是不限於由Peng等描述的碼激勵線性預測(CELP)語音編碼;用於音頻、圖像和視頻的變換域編碼,其中包括基於離散傅立葉變換(DFT)、離散餘弦變換(DCT)和基於修改的離散餘弦變換(MDCT)的方法;基於小波的變換編碼;直接時域脈衝代碼調製(PCM);差分PCM;自適應差分PCM(ADPCM);或者,在本領域中公知的子帶編碼技術族中的任何一個。實際上,可以根據本發明有益地處理如上所述形式的任何信號向量。
組合編碼電路106接收向量xi,並且使用階乘脈衝編碼來產生碼字C。如上所述,假設
階乘脈衝編碼可以使用總共M個比特來編碼向量xi,並且向量xi的所有值是整數值,使得-m≤xi≤m,其中m是單位幅度脈衝的總數,並且n是向量長度。如上所述,大值的n和m會迅速地引起問題,特別是在需要將存儲和計算複雜度保持得儘可能低的移動手持裝置中。
為了處理這個問題,組合函數產生器108使用低複雜度技術來用於產生F′(n,d)。然後,組合編碼電路106使用F′(n,d)來產生碼字C。電路108使用階乘組合F′(n,d)的相對低的解析度的近似(精度的比特),其提供了僅足夠允許產生有效碼字的精度。即,只要保持特定的屬性,則函數F(n,d)的適當近似足以保證所產生的碼字可被唯一地解碼。為了描述F′(n,d)的產生,我們首先推導出作為F(n,d)的適當近似的函數F′(n,d)。所述第一步驟是以任意底數a對方程5取對數,並且對重新布置的項以a為底數取反對數 其中,函數expa(k)=ak。接著,定義函數P(i)、Q(d)和R(k),並且代入方程8,以便 其中P(i)=loga(i),
和R(k)=expa(k)=ak。
但是,根據本發明的優選實施例,要使得所產生的碼字可被唯一地解碼不需要F(n,d)和F′(n,d)相等。僅僅需要兩個條件就足以使其成立 F′(n,d)≥F(n,d), (10) 以及 F′(n,d)≥F′(n-1,d)+F′(n-1,d-1).(11) 對於第一條件,所述限制僅僅表示,如果F′(n,d)<F(n,d),則將存在重疊的代碼空間,並且隨後,將有可能存在多於一個的能夠產生特定碼字輸入;因此,所述碼字不能被唯一地解碼。第二條件規定,對於給定的n、d的「誤差」將大於或者等於與由Peng等在美國專利6,236,960中描述的遞歸關係的前一個元素相關聯的誤差項的和。可知,F(n,d)=F(n-1,d)+F(n-1,d-1),其僅僅在如果組合表達式精確地等於
的情況下成立。但是,雖然在方程11中的不等式是充分的,但是其可以不必對於n和d的所有值都成立。對於這樣的值,F(n,d)可以滿足從Peng等的方程31推導出的另一個不等式,並且其通過下式被給出 在這種情況下,方程11需要滿足對於特定的(m,k),(m≤n),(k≤d)的嚴格不等式,即 F(n,k)>F(m-1,k)+F(m-1,k-1),n≤n,k≤d.(13) 向回參見方程9,我們現在希望通過利用原始函數的低複雜度的近似來建立函數P′(i)、Q′(d)和R′(k),從而產生F′(n,d),使得 並且,其中,滿足在方程10和11中給出的條件。考慮P(i),我們可以希望對所述函數進行近似,以便P′(i)≥loga(i),i∈[1,2...,n]。如果我們選擇a=2,並且然後將P′(i)限制到32比特的精度,則所產生的運算容易被實現在手持的移動裝置上,因為大多數DSP支持單循環32比特加法。因此,我們定義
其中,l(i)是可以作為i的函數來改變的移位因子。在所述優選實施例中,l(i)=l=21,但是許多其他組的值是可能的。對於這個示例,2l因子等價於向左移位l比特,據此,向下取整函數
在四捨五入到下一個最高整數的同時去除分數位,最後,所述2-l的因子將結果向右移位l比特。使用這種方法,對於所有的i≥1而言,函數P′(i)≥log2(i),還僅僅使用32比特來提供了足夠的動態範圍和精度,因為在log2域中的正整數解析度的9個比特可以表示512比特的數。為了避免實時地計算這些值的複雜度,可以對於F(144,28)示例,僅僅使用存儲器的144×4位元組來對其進行預先計算和將其存儲在表中。使用用於近似Q(d)的類似方法,我們得到
其中,因為要從總數中減數,因此使用向下取整函數
這保證了
使得Q′(d)的影響將保證F′(n,d)≥F(n,d)。雖然l(j)可以根據m和n的配置來取許多值,但是所述優選實施例使用l(j)=l=14的值來作為可變的移位因子。像P′(i)那樣,對於F(144,28)示例,可以僅僅使用存儲器的28×4位元組來預先計算Q′(d)和將其存儲在表中。為了定義R′(k),我們需要首先將k定義為 使用如上定義的P′(i)和Q′(d),k優選是32比特的數,其中有8比特的無符號的整數分量ki和24比特的分數分量kf。使用其,我們可以通過使得k=ki+kf,然後取以2為底的反對數以得出
從而推導出R′(k)≥exp2(k)=2k。然後,我們可以使用泰勒級數展開來估計分數分量是否達到期望的精度,以
來表示,使用向上取整函數來得對所述結果四捨五入,然後將所述結果適當地移位以形成多倍精度的結果(其僅僅具有l個有效比特),以便
其中,
是被應用到泰勒級數展開結果的整數移位因子。在此,l是移位因子,其以與方程15和16類似的方式用於保證R′(k)≥2k。但是,因為對於有效的實時操作,實際上不能預先計算R′(k),因此必須小心地指定在編碼器和解碼器兩者中都需要的精確的操作,以保證重建的信號向量精確地匹配輸入信號向量。注意,可以通過左移
來獲得R′(k),其中,左移
可以由l比特來精確地表示。
在上述的討論中,已經選擇了函數P′(i)、Q′(d)和R′(k),使得每個獨立的函數估計保證了F′(n,d)≥F(n,d)的結果。但是,僅僅需要整個效果滿足這個條件就可以了。例如,P′(i)和Q′(d)可以如上所述,但是R′(k)可以是更傳統的R′(d)≈2k函數,所述函數可以刪截或者四捨五入最低有效位,使得對於k的某些值而言可以使R′(k)小於2k。只要這個效果相對於P′(i)和Q′(d)的影響較小,則其是可接受的,因此在方程10和11中的屬性仍然成立。
而且,可以使用任何函數P′(i)、Q′(d)和R′(k),而不損失一般性,只要方程10和11的屬性被滿足。但是,必須小心,如果使用太低的精度,則可以出現在比特率的增大。也應當注意,在比特率和複雜度上存在固有的折衷,並且對於大值的m、n,對於在複雜度的極大降低而言,1或者2比特的增加可以被認為是合理的折衷。
現在說明在組合編碼電路106中的用於位置和幅度的部分碼字C的公式化。設π={p1,p2,...,pv}是非零脈衝位置(以升序),並且設μ={m1,m2,....,mv}是在向量x中的相應位置的幅度。通過下式來給出用於脈衝位置的代碼 並且通過下式來給出用於脈衝幅度的代碼 因此,這些碼字的公式化需要增加v和v-1個多倍精度的數。在解碼器中需要類似的相減運算。這些運算也當n和m大時增加了FPC方法的複雜度。考慮用於多層嵌入編碼系統的音頻信號的編碼/解碼。這種技術用於編碼在所述多層系統的三層中的殘餘誤差信號的變換。設20毫秒的塊的大小是n=280,並且對於所有的層相同。用於編碼的脈衝的數量依賴於每層的比特率。如果每層是8kbps、16kbps或32kbps,則它們分別需要160比特、320比特和640比特來用於20ms塊的編碼。使用FPC技術,對於每層160比特、320比特和640比特,可以分別使用28、74和230脈衝來編碼長度280的塊。在數位訊號處理器上執行在方程(19)和(20)中的多倍精度的運算,所述數位訊號處理器通常以16比特字來進行運算。因此,為了形成160比特的碼字,需要在10個字上執行加法運算;並且對於640比特碼字,需要在40個字上執行加法運算。每個加法運算需要4個單元(進位的產生、移動到陣列、帶進位的加法)。因此,在多層系統的p層中的k比特碼字的編碼/解碼需要
個運算/秒。對於n、m和p的多個值,在表1中示出了多倍精度加法/減法運算的複雜度。在這個表中,WMOPS表示加權的每秒百萬次運算。
表1在使用現有技術方法的FPC編碼/解碼中的加法/減法的複雜度 從表1中,我們注意到,當比特率加倍時,多倍精度加法的複雜度增加6倍。
如上所述,將組合函數替換為近似函數F′(n,r),其被給出為 其中
並且R′(k)是函數R′(k)≈2k的近似,其被給出為
其中,k=ki+kf被分解成k的整數和分數分量,並且,
是k的分數分量的低解析度泰勒級數展開。根據以上預定義的函數Q′(r)和R′(k),首先獲得P′(i),從而對於n和d的所有值滿足唯一可解碼的不等式 F′(n,d)>F′(n-1,d)+F′(n-1,d-1)(24) 返回到方程(19)和(20,將近似函數F′替代實際函數F得到 如果k>lR,在方程(23)中獲得的二進位表示F′(n,r)具有ki-lR個終止零。通過左移(h=ki-lR次移位)lR比特數而獲得F′(n,r)來作為多倍精度數。因為F′(pk,k)的尾部的h個比特是0,則在方程(25)中當我們將F′(pk,k)與存在部分和相加時,碼字的那些尾部的h比特將不受到影響。為了有效地使用這個屬性,以偽浮動點格式來計算F′(pk,k),即,函數R′(k)輸出lR比特的尾數(M)和對應的非負的指數(h)。所述lR比特的尾數(M)被定義為
並且指數h被定義為 h=min(0,ki-lR).(28) 現在,在方程(25)和(26)中的求和可以容易地使用下述事實當將F′(pk,k)與部分和相加時,不影響
個字。
上述方法確實降低了一定的複雜度。但是,在所述運算期間產生的進位仍然需要被傳播,直到碼字的尾部。隨後,我們將示出,如果F′(k,r)滿足特定的屬性,則進位需要被傳播到整個碼字的小得多的部分。
首先,我們將探討的是,如果要對準確的組合函數F(pk,k)進行相加(像在方程(19)中那樣)並且以k的升序來計算和,則進位將被傳播到一個額外的字 Cπ=(((F(p1,1)+F(p2,2))+F(p3,3))+…)+F(pv,v),(29) 即,通過下式來給出被加上F(pk,k)的部分和Ψk 可以顯示,多倍精度操作數Ψk小於F(pk,k-1)。Ψk對F(pk,k)的最大比率小於k/(pk-k+1)。當k=pk+1時,上述比率是無限大,其中,k=pk+1也是k的最大可能值。因為F(pk,pk+1)=0,進位不必在這種特定情況下被傳播。對於k的其他值,這個比率不大於n和m的較小者。因此 Ψk+F(pk,k)<(min(m,n)+1)F(pk,k),k≤pk(31) 因為min(m,n)小於32768,因此,上述的求和將不會把進位傳播超過一個額外的字。這表明,如果我們在有序求和(29)中使用精確的組合函數,則我們獲得把進位僅僅傳播到一個額外的字的益處,但是精確的組合函數沒有尾部零的優點,因此在F(pk,k)的長度上執行加法。
很清楚,我們希望設計近似函數F′(pk,k),使得除了具有唯一的可解碼性和尾部的零之外,在方程(29)中的F′(pk,k)的有序求和不要求進位傳播。可以顯示,通過下式來給出被加上F′(pk,k)的部分和(第一多倍精度碼字) 其小於F′(pk,k-1)。
F′(pk,k-1)<32768·F′(pk,k),(33) 因此,當向Ψ′k加上F′(pk,k),產生Ψ′k+1(修改的多倍精度碼字)時,不等式足以滿足進位僅需要被傳播到一個額外的字。
Ψ′k+1=Ψ′k+F′(pk,k),(34) 已經從經驗上,對於由方程(21)、(22)和(23)定義的F′(n,r)確定了這一點。除了唯一可解碼的不等式之外,我們還需要滿足部分和不等式,即, Ψ′k<32768·F′(pk,k).(35) 可見,如果所述唯一可解碼的不等式對於n<pk成立,則 Ψ′k<F′(pk-1,k-1)+F′(pk-1,k-2).(36) 因此,足以產生P′(i),所述P′(i)滿足 32768·F′(pk,k)>F′(pk-1,k-1)+F′(pk-1,k-2)(37) 現在,近似組合函數F′滿足 1.唯一可解碼的不等式 2.尾部為零的屬性 3.部分和不等式 因此,這些函數可以用於通過僅僅修改完整的多倍精度碼字的很小的子集(僅僅在10、20或者30個字中的3個字)來構造階乘包裝碼字。所述小子集被表示為由整數wl和wu定義的位置指示符,所述wl和wu用於識別在多倍精度碼字中的要修改的字。所述位置指示符被計算如下
其中。16是字長度,並且將lR=16選擇為尾數的長度。根據尾數M來修改多倍精度碼字(Cπ)的字wl至wu。注意,所述多倍精度碼字 Cπ=Ψ′v+1 (39) 解碼器包含從Ψ′k+1=Ψ′k+F′(pk,k)減去F′(pk,k)。使用與我們用於求和類似的變元,可知,如果函數F′滿足所述三個上面定義的屬性,則在解碼期間,也僅僅需要對完整碼字的很小的子集進行修改。在所述解碼器中,pk-1被獲得為 pk-1=max(p)s.t.F′(p,k-1)≤Ψ′k(40) 在表1中示出了使用現有技術方法來編碼/解碼位置和幅度的複雜度(所示的複雜度僅僅用於加法和減法部分。所述複雜度不包括產生F′的複雜度)。使用所提出的方法來在多層嵌入系統的3層中進行編碼/解碼,結果是大大地降低了在多倍精度加法/減法複雜度。在表2中示出了當我們使用本發明時的對應的複雜度數量。注意,當在編碼中使用更多的脈衝(更長的碼字大小)時,所述複雜度改善更大。
表2在使用當前發明的FPC編碼/解碼中的加法/減法的複雜度 非零位置的數量的編碼 lR比特尾數和指數的表示格式還在非零位置的數量的編碼上具有優點。通過下式來給出非零位置v的數量的編碼 可以容易地看出,兩個近似函數的乘法在尾數和指數格式中比在多倍精度格式中容易得多。然而,其的主要優點是,當我們要使用lR比特尾數和指數的表示來降低複雜度時,可以僅僅使用兩個字來預先存儲F′(n,k)和F′(m-1,k-1)中的每個(它們的lR比特尾數的乘積和它們的指數的和也可以被預先存儲)。這使得能夠快速的編碼v,而沒有任何較大的ROM的需求。
在編碼器100的運行期間,組合編碼電路106將接收要編碼的信號向量(x)。將根據要編碼的信號向量來產生第一多倍精度操作數(Ψ′k)。具體地,
其中,pi是向量x的非零元素的位置。尾數操作數(
)和指數操作(h=min(0,ki-lR))被產生。尾數操作數和指數操作數兩者都表示第二多倍精度操作數(F′(pk,k)),其基於要編碼的信號向量。然後,電路106根據指數操作數來選擇要修改的Ψ′k的一部分。如上所述,所述部分被表示為由整數wl和wu定義的位置指示符,所述整數wl和wu識別在多倍精度碼字中要修改的字。如方程(38)中所示,計算位置指示符。然後根據尾數操作數和位置指示符來修改Ψ′k的一部分,以產生像在方程(34)中那樣的修改的多倍精度操作數(Ψ′k+1),並且根據如方程(39)中所示的修改的多倍精度操作數,來產生在對應的解碼器中使用的多倍精度碼字。
圖2圖解了經由上述技術來產生碼字的一個示例。如上所述,
如圖2中所示,當從Ψ′k向Ψ′k+1變化時,僅僅修改多倍精度碼字的字3、4和5。被選擇來修改的特定字是來自多倍精度碼字Cπ的wl到wu字,並且wl到wu基於指數h=50,使得
通過與左移的尾數M的h-16×wl個最低有效比特相加來修改Ψ′k的wl字。通過與尾數M的後續16比特相加來修改wl+1到wu-1個字。這些加法中的每個都涉及帶進位的加法,並且為下一個級產生了進位。通過僅僅加上來自前一個加法的進位來對wu字進行修改。注意,因為lR=16,所以wu=wl+2。在解碼器的情況下,執行減法而不是加法。
圖3是解碼器300的方框圖。如圖所示,解碼器300包括組合解碼電路306、信號重建電路310、其他解碼電路304和組合函數產生器108。在操作期間,通過組合解碼電路306來接收組合碼字。組合解碼電路306向組合函數產生器提供n將d,並且接收作為響應的F′(n,d)。解碼電路306然後根據F′(n,d)來產生向量xi。電路306以與電路106類似的方式來工作,除了用減法來替換拉加法運算。換句話說,Ψ′k=Ψ′k+1-F′(pk,k)。向量xi被傳送到信號重建電路310,其中,根據xi和來自其他解碼電路304的其他參數來建立輸出信號(例如語音、音頻、圖像、視頻或者其他信號)。具體地,所述其他參數可以包括與在特定實施例中使用的信號編碼範例相關聯的任何數量的信號重建參數。其可以包括但是不限於信號調節和能量參數,以及頻譜整形和/或合成濾波器參數。通常,這些參數用於調節重建信號向量xi的能量和/或頻譜形狀,以再現最後的輸出信號。
圖4是示出了圖1和圖3的組合函數產生器的操作的流程圖。具體地,圖4的邏輯流示出了組合函數產生器108用於產生F′(n,d)所需要的那些步驟。邏輯流在步驟402開始,其中,接收輸入n和d。在步驟403,將累加器A設置為0。在步驟404,計數器i被設置為等於n-d+1。在步驟406,向累加器A加上對數近似P′(i)。在步驟410,計數器i遞增1。以循環重複步驟406和410,直到計數器i大於n。在步驟S412,對i>n進行檢查,並且當i變得大於n時,終止該循環。在這個階段,累加器包含組合函數F(n,d)的分子的對數近似。在步驟416,從累加器減去組合函數Q′(d)的分母的對數近似,以獲得所述組合函數的對數近似。在步驟418,獲取累加器的指數近似R′(A)來產生組合函數的近似B。在步驟414,B被輸出為F′(n,d)。
圖5是圖1的編碼器的操作的流程圖。邏輯流在步驟501開始,其中,向量產生器102接收輸入信號。如上所述,所述輸入信號可以包括語音、音頻、圖像、視頻或者其他信號。在步驟503,向量xi被產生和輸入到組合編碼電路106中,其中,m和d被確定和傳送到組合函數產生器108。如上所述,m是單位幅度脈衝的總數(或者xi的整數值分量的絕對值的和),並且d是xi的非零向量元素的數量。在步驟505,通過組合函數產生器108來產生F′(n,d),並且其被傳送到組合編碼電路106,其中,對向量xi進行編碼以產生組合碼字C(步驟507)。如上所述,通過將在F(n,d)中的P(i)、Q(d)和R(k)替換為原始函數的低複雜度的近似,以便滿足在方程10和11中給出的條件,從而產生F′(n,d)。
圖6是示出圖3的解碼器的操作的流程圖。邏輯流在步驟601開始,其中,通過組合解碼器306接收組合碼字。在步驟603,n和d被從組合解碼器306傳送到組合函數產生器108,並且F′(n,d)被返回到解碼器306(步驟605)。解碼器306根據F′(n,d)來解碼所述碼字(步驟607),以產生向量xi,並且xi被傳送到信號重建電路310,其中,產生輸出信號(步驟609)。
圖7是示出組合編碼電路106的操作的流程圖。所述邏輯流在步驟701開始,其中,接收信號向量(x)。根據要編碼的信號向量來產生第一多倍精度操作數(Ψ′k)(步驟703)。具體地,
其中,pi是向量x的非零元素的位置。尾數操作數(
)和指數操作數(h=min(0,ki-lR))被產生(步驟705)。尾數操作數和指數操作數表示基於要編碼的信號向量的第二多倍精度操作數(F′(pk,k))。然後,電路106根據指數操作數來選擇要修改的Ψ′k的一部分(步驟707)。如上所述,所述部分被由整數wl和wu定義的位置指示符表示,整數wl和wu識別在要修改的在多倍精度碼字中的字。如在方程(38)中所示,計算位置指示符。在步驟709,根據尾數操作數和位置指示符來修改Ψ′k的一部分,以像在方程(34)中那樣來產生修改的多倍精度操作數(Ψ′k+1),並且在步驟711,根據如在方程(39)中所示的修改的多倍精度碼字來產生在對應的解碼器中使用的多倍精度碼字。
圖8是示出組合解碼電路306的操作的流程圖。所述邏輯流在步驟801開始,其中,接收碼字(Cπ)。將根據所接收的碼字來產生第一多倍精度操作數(Ψ′k+1)(步驟803)。具體地,
其中,pi是被編碼的向量x的非零元素的被解碼位置。尾數操作數(
)和指數操作數(h=min(0,ki-lR))被產生(步驟805)。所述尾數操作數和指數操作數都表示基於碼字的第二多倍精度操作數(F′(pk,k))。然後,電路306根據指數操作數來選擇要修改的Ψ′k+1的一部分(步驟807)。如上所述,所述部分被表示為由整數wl和wu限定的位置指示符,整數wl和wu識別要修改的在多倍精度碼字中的字。如方程(38)中所示計算位置指示符。在步驟809,根據尾數操作數和位置指示符來修改Ψ′k+1的一部分,使得所產生的修改的多倍精度操作數(Ψ′k)為Ψ′k=Ψ′k+1-F′(pk,k),並且在步驟811,如在方程(40)中,根據修改的多倍精度碼字來解碼向量x的第(k-1)非零元素的位置pk-1。在步驟813,根據解碼的位置pk-1來產生解碼的向量x。
表1示出了與現有技術相比較的、與本發明相關聯的複雜度的降低。對於m和n的不同值,給出了比特M的相關數量和每個幀調用F(n,m)的函數的平均數量。對於這些示例,幀長度間隔是20ms,其對應於每秒50個幀的速率。用於複雜度比較的測量單位是加權的每秒百萬計運算或者WMOPS。如其將在受限精度的給定點DSP上執行一樣,將使用計算機模擬來產生對複雜度的估計。對於這些示例,當適當時使用多倍精度庫,並且每個原始指令被分配適當的加權。例如,乘法和加法被提供一個運算的加權,而原始的除法和超越(transcendental)運算(例如2x)被提供25個運算的加權。從所述表中,容易看出,使用F′(n,d)相對於現有技術提供了較大複雜度的降低,並且隨著n和m增大,在複雜度的減低成比例地增加。對於F(144,60)的情況,所顯示這種複雜度的降低高達兩個數量級的程度,並且當n和m進一步增大,其將繼續增長。這主要是因為在現有技術中執行精確的組合表達所需要的操作數的精度的增長。這些運算證明會導致過量的複雜度負擔,並且,實際上消除了將階乘脈衝編碼用作可用於對大值的m和n的向量進行編碼的方法。通過僅僅要求與少量的存儲器存儲結合的單周期低精度操作,來產生對這種類型的編碼所需要的複雜組合表達的估計,使得本發明解決以上問題。
表3F(n,m)對F′(n,m)的複雜度比較
下面的文本和方程實現了上述技術,從而編碼和解碼為用於增強的可變速率編碼解碼器的第三代合作夥伴項目2(3GPP2)C.P0014-C規格,用於寬帶擴頻數字系統的語音服務選項3、68和70。
4.13.5MDCT殘餘線狀譜量化 被稱為殘餘線狀譜的MDCT係數被以與4.11.8.3的FCB階乘代碼本類似的方式被量化。基本地,在長度n向量v具有屬性
並且所有的元素vi是整數值的情況下,可以實現N=nFPCm個可能組合的階乘編碼。即,v的整數元素的絕對值的和等於m。對於這種情況,我們希望編碼Xk的能量定標的版本,以便 其中,γm是全局比例因子,並且範圍0-143對應於頻率範圍0-3600Hz。對於這種情況,m可以是用於NB的28或者用於WB的23個輸入。根據下面的偽代碼來迭代地確定(對於非零的||Xk||2)用於實現上述目的的γm的值 /*初始化(Initialization)*/ emin=-100,emax=20 e=max{emin,-10log10(||Xk||2)/1.2} s=+1,Δe=8 /*主循環(main loop)*/ do{ γm=10e/20 if(m′==m)then break else if(m′>m and s==+1) then s=-1,Δe=Δe/2 else if(m′<m and s==-1) then s=+1,Δe=Δe/2 end e=e+s·Δe }while e ≤emax andΔe≥Δmin 然後將量化的殘餘線狀譜Xcc計算為 如果在少見的情況下m和m′的值不同,則應當通過向量化的殘餘線狀譜Xcc加上或者減去單位值來修改線狀譜。這保證了可以使用階乘編碼方法來可靠地對所產生的線狀譜進行編碼。用於表示線狀譜Xcc的輸出指數被指定為RLSIDX。這個指數包括用於144FPC28情況的131比特和用於144FPC23情況的114比特。
為了處理與編碼和解碼向量Xcc相關聯的複雜度問題,應當使用低解析度組合近似函數F′(n,r)來替代標準的組合關係F(n,r)=nCr=n!/r!(n-r)!。具體上,編碼器和解碼器使用具有屬性F′(n,r)≥F(n,r)和F′(n,r)≥F′(n-1,r)+F′(n-1,r-1)的組合函數產生器F′(n,r),所述屬性足以唯一地編碼/解碼向量Xcc。所述函數F′(n,r)被給定為 其中,P′(i)和Q′(r)是32比特的查找表,其被給出為
並且
並且,其中,R′(k)是函數R′(k)≈2k的多倍精度整數近似,其被給出為
其中,k=ki+kf被分解為k的整數和分數分量,並且
是k的分數分量的泰勒級數展開。通過將多倍精度乘法和除法運算替換為32比特的加法和2k的低複雜度泰勒級數近似,之後進行多倍精度的移位運算,這些運算大大地降低了在計算組合表達式中所需要的複雜度。編碼/解碼運算的所有其他分量與在4.11.8.3中的類似。
雖然已經參考特定實施例具體示出和描述了本發明,但是本領域內的技術人員應該理解,在不偏離本發明的精神和範圍的情況下,可以對本發明進行在形式和細節上的各種改變。本發明旨在將該種改變包括在下面的權利要求的範圍中。
權利要求
1.一種用於操作編碼器的方法,所述編碼器從輸入向量(x)產生碼字(C),所述方法包括步驟
接收要編碼的所述輸入向量;
根據所述輸入向量來產生第一多倍精度操作數(Ψ′k);
產生尾數操作數(M)和指數操作數(h),其中,所述尾數操作數和所述指數操作數表示基於要編碼的信號向量的第二多倍精度操作數(F′(pk,k));
根據所述指數操作數來選擇要修改的所述第一多倍精度操作數的一部分;
根據所述尾數操作數來修改所述第一多倍精度操作數的所述部分,以產生修改的多倍精度操作數(Ψ′k+1);並且
根據所述修改的多倍精度操作數來產生所述碼字(C)。
2.根據權利要求1所述的方法,其中,Ψ′k基於一組尾數和指數操作數,所述一組尾數和指數操作數表示F′(pi,i);1≤i<k,其中,pi是所述輸入向量x的非零元素的位置。
3.根據權利要求1所述的方法,其中,
4.根據權利要求1所述的方法,其中,h是函數ki。
5.根據權利要求1所述的方法,其中,通過由整數wl和wu定義的位置指示符來表示要修改的所述第一多倍精度操作數Ψ′k的所述部分。
6.根據權利要求5所述的方法,其中
其中,16是字長度,並且lR是尾數的長度。
7.一種編碼器(100),包括
組合編碼電路(106),用於執行步驟
接收要編碼的向量x;
根據x來產生第一多倍精度操作數(Ψ′k);
產生尾數操作數(M)和指數操作數(h),其中,所述尾數操作數和所述指數操作數表示基於要編碼的信號向量的第二多倍精度操作數(F′(pk,k));
根據所述指數操作數來選擇要修改的Ψ′k的一部分;
根據所述尾數操作數和位置指示符來修改Ψ′k的所述部分,以產生修改的多倍精度操作數(Ψ′k+1);並且
根據Ψ′k+1來產生碼字(C)。
8.一種用於操作解碼器的方法,所述解碼器從碼字(C)產生向量(x),所述方法包括步驟
接收碼字(Cπ);
根據Cπ來產生第一多倍精度操作數(Ψ′k+1);
產生尾數操作數(M)和指數操作數(h),其中,所述尾數操作數和所述指數操作數表示第二多倍精度操作數(F′(pk,k));
根據所述指數操作數來選擇要修改的Ψ′k+1的一部分;
根據所述尾數操作數和位置指示符來修改Ψ′k+1的所述部分,以產生修改的多倍精度操作數(Ψ′k);
解碼向量x的第(k-1)個非零元素的位置pk-1;並且
根據所述位置pk-1來產生向量(x)。
9.一種解碼器(300),包括
組合編碼電路(306),用於執行步驟
接收碼字(Cπ);
根據Cπ來產生第一多倍精度操作數(Ψ′k+1);
產生尾數操作數(M)和指數操作數(h),其中,所述尾數操作數和所述指數操作數表示基於要編碼的信號向量的第二多倍精度操作數(F′(pk,k));
根據所述指數操作數來選擇要修改的Ψ′k+1的一部分;
根據所述尾數操作數和位置指示符來修改Ψ′k+1的所述部分,以產生修改的多倍精度操作數(Ψ′k);
解碼向量x的第(k-1)個非零元素的位置pk-1;並且
根據所述位置pk-1來產生向量(x)。
全文摘要
在編碼器的運行期間,接收信號向量(x)。根據要編碼的信號向量來產生第一多倍精度操作數(Ψ′k)。產生尾數操作數和指數操作數。尾數操作數和指數操作數表示基於要編碼的信號向量的第二多倍精度操作數。根據指數操作數來選擇要修改的Ψ′k的一部分。根據尾數操作數來修改Ψ′k的該部分,以產生修改的多倍精度操作數(Ψ′k+1)。最後,產生在對應的解碼器中使用的多倍精度碼字。
文檔編號H03M7/30GK101821953SQ200880111272
公開日2010年9月1日 申請日期2008年9月23日 優先權日2007年10月11日
發明者烏達·米塔爾, 詹姆斯·P·阿什利 申請人:摩託羅拉公司