專利名稱:一種維特比譯碼器及用于維特比譯碼器的加比選單元電路的制作方法
技術領域:
本發明涉及一種基于專用集成電路(ASIC)的維特比(Viterbi)譯碼器,尤其涉及一種Viterbi譯碼器中的加比選(ACS相加-比較-選擇)單元電路的改進。
背景技術:
卷積碼是一種常用的差錯控制編碼。卷積碼(n0,k0,m)表示該卷積碼編碼器將k0比特信息段編成n0比特的碼組,而且所編的n0長碼組不僅同當前k0比特信息段有關聯,還同前面的(m-1)個(m>1,整數,我們稱其為約束長度)信息段有關聯。卷積碼用生成序列表示輸入與輸出之間的關系,生成序列表示為gi,j=gi,j1gi,j2...gi,jL...gi,jm]]>其中i=1,2,…,k0;j=1,2,…,n0;L=1,2,…,m。gi,jL表示了各個寄存器的輸入輸出端(第L組的第i個節點)到第j個模2加法器輸入端的連接線的情況。如果有連接線則gi,jL=1]]>,如果無連接線則gi,jL=0.]]>可以看出,卷積碼有很強的關聯性,能夠很好的進行糾錯。圖1給出一種典型的卷積編碼器——(2,1,7)卷積編碼器,即該卷積編碼器有2比特輸出,1比特輸入,約束長度為7,寄存器階數階數等于(m-1),為6;該卷積碼的生成序列為g1,1=(1011011)2和g1,2=(1111001)2,為了表述簡便,用八進制表示為(133)8和(171)8。
對卷積碼的一種主要的糾錯譯碼方法就是Viterbi算法。Viterbi算法是一種基于最大后驗概率的卷積譯碼算法,具有較強的克服突發錯誤的能力。目前,在數據通信、數據記錄與數字信號處理領域都得到廣泛的采納。Viterbi的譯碼過程即是通過接收的過程找出與卷積碼輸入數據流最相似的路徑。我們遍歷整個狀態變化的網格圖,并計算每條路徑產生的碼距,當Viterbi譯碼器輸入完最后一個數據的時候,我們得到最小的碼距值,而到達這個狀態的路徑就是我們所要尋找的路徑,根據這條徑和相關的信息我們可以得出譯碼的輸出。
圖2是一個通常的Viterbi譯碼器的結構框圖。分支度量單元(BMU)21接收數字信號,并計算分支度量值作為概率的信息,這里的分支度量值取無符號數。加比選單元(ACS)22從(BMU)21中讀取分支度量值并利用該分支度量值更新與網格中每個狀態對應的原路徑度量(PM)值。(ACS)22將已更新的PM值互相比較并輸出被選中的PM值及相應的選擇位。在路徑度量存儲單元25中,由(ACS)22選出的PM值在后繼的步驟中被送回(ACS)22單元。幸存路徑存儲器24存儲從(ACS)22輸出的選擇位。回溯單元(TBU)23利用存儲在幸存路徑存儲器24中的選擇位實現回溯操作并輸出譯碼序列。
Viterbi的各種應用中,數據輸出速率和功耗面積的需求有很大的差別。當Viterbi檢測器應用在低速的蜂窩電話系統時,要求速度可以低于1Mb/s,但是要求有非常低的功耗;在用于調制解調器中的網格編碼解調時,輸出速率要求在幾十Kb/s,但是對于功耗和芯片的面積以及價格上就有非常嚴格的限制;在另一個極端,高速的Viterbi檢測器也用于磁盤驅動的讀信道,要求輸出超過600Mb/s,相應的對于面積和功耗要求就比較低。
Viterbi的實現結構同它所需要完成的功能需求緊密相關,主要分為串行、并行和混合型結構。
1、串行設計(ACS)22每次從路徑度量存儲單元25讀取一個狀態(共有2m-1個狀態)的PM值,即每個時鐘只完成一個狀態的計算,2m-1個時鐘處理網格表中的一列。這種結構不受約束長度m限制,只消耗固定的面積,FPGA的面積消耗最小,但是譯碼延時也最大。
2、并行設計(ACS)22每次從路徑度量存儲單元25讀取2m-1個狀態的PM值,即一個時鐘完成對所有狀態的更新。并行設計的優點是可以實現高速Viterbi譯碼,最高譯碼速率可以達到時鐘頻率;需要的存儲單元也比較少,不需要兩個路徑度量存儲單元乒乓式操作。它的缺點也顯而易見硬件資源消耗大。
3、混合型又稱串并結合型。(ACS)22每次從路徑度量存儲單元25讀取n個狀態的PM值,即每個時鐘處理n(其中,n<2m-1)個狀態,2m-1/n個時鐘周期完成網格表的一列。在具體實現時,可綜合考慮面積和速度來選擇n值(n越大,速度越快,面積越大)。
可見,各種Viterbi結構主要的區別體現在(ACS)22單元,(ACS)22單元也是Viterbi中需要資源最大的部件。
圖3為常規的(ACS)22結構。兩個加法器(31A、31B)用于將上一列對應狀態的PM值與來自(BMU)21的分支度量值相加。兩個上一列的PM值可以來自路徑度量存儲器(串行/混合型),也可以來自相應的上級寄存器(并行),統稱為路徑度量存儲單元25。所得的值經過比較器(CMP)32,并通過2選1的多路選擇器(MUX)33選擇輸出對應的幸存PM值和幸存路徑值。ACS單元是Viterbi譯碼器的核心電路,但是,PM值會隨著時間的推移一直累加下去,如果不加以控制,ACS單元會有溢出的隱患,造成嚴重的譯碼錯誤。
Viterbi譯碼器通過尋找最小PM值的路徑來進行譯碼,由ACS單元的電路結構可知,我們只需保留各個狀態PM值的大小關系即可,即是說所有PM值的基數對于Viterbi譯碼沒有意義,可以去掉,而且這樣做可以避免PM值的溢出問題。一般的控制方法是每隔一段時間比較所有的PM數值,找出其中最小的一個數值,然后將所有的PM值減去這個數值,這樣即可以保證加法器不溢出,也可以保持各個PM數值之間的大小關系不變。在數字系統硬件實現時,采用的方法是將每一列所有PM(假設為i位)的最高位作與運算,如果結果為‘1’,說明PMany≥2i-1,那么就產生一個溢出控制信號,用這個信號將網格圖中下一列所有的PM最高位置‘0’,實際相當于將所有PM值減掉基數2i-1。因此,希望ACS單元的數據位寬要足夠大,既能保證各個路徑的大小關系不變,又可以有效地解決溢出問題。
從改善硬件實現和關鍵路徑角度出發,希望ACS單元的數據位寬盡量小。但是,如果ACS的數據位寬過小,便不足以保存各個路徑的大小關系不變,也會出現PM值溢出的現象。
發明內容
通過背景資料的分析可知,ACS單元的數據位寬是Viterbi譯碼器的一個重要參數,如果ACS位寬過大,會增加硬件實現電路和關鍵路徑延時;如果ACS位寬過小,又不能夠有效地解決PM溢出問題。本發明綜合考慮影響ACS數據位寬的各種因素,公開了一種能確定Viterbi譯碼器ACS單元最小位寬的方法,并且提出一種實現該方法的改進的ACS電路,該電路普遍適用于Viterbi的并行/串行/混合型結構。
本發明公開了一種維特比譯碼器,包括順序處理接收到的數據的分支度量單元BMU、加比選單元ACS、幸存路徑存儲器、和回溯單元TBU,以及將所述ACS選出的PM值在后繼的步驟中再送回ACS單元的路徑度量存儲單元,在所述加比選單元ACS后端設置最高位積累單元。
所述的最高位積累單元用來進行網格圖中每一列的所有2m-1個節點PM值的最高位與操作。在并行結構時,輸入為上一列2m-1個ACS單元的PM值最高位,進行2m-1輸入的與操作,輸出為本列的over_bit位;在串行/混合型結構時,輸入為上一列n(n為采用的ACS單元個數)個ACS單元的PM值最高位以及上一列已經積累的over_bit值,進行n+1輸入的與操作,將上一列的所有2m-1個狀態的最高位都搜集全之后將本列的over_bit位輸出。
在所述加比選單元ACS中還包括將各個加法器的最高位單獨處理的兩個進位處理邏輯電路A和B、以及簡單邏輯電路;所述進位處理邏輯電路A的輸入有三個,分別是網格圖中上一列相應狀態的進位輸出c_out、本狀態的加法器進位輸出add_c1和上一列的溢出控制位over_bit,輸出有兩個,分別為本加法器的最高位輸出c1和該狀態PM值溢出標志位over1,其輸入輸出的邏輯關系為c1=c_out&over_bit+add_c1;over1=c_out&over_bit&add_c1;所述進位處理邏輯電路B的輸入有三個,分別是網格圖中上一列另一個相應狀態的進位輸出c_out、本狀態的加法器進位輸出add_c2和上一列的溢出控制位over_bit,輸出有兩個,分別為本加法器的最高位輸出c2和該狀態PM值溢出標志位over2,其輸入輸出的邏輯關系為c2=c_out&over_bit+add_c2;over2=c_out&over_bit&add_c2;所述簡單邏輯電路的輸入有進位位c1、c2,溢出標志位over1、over2和所述比較器輸出結果x輸出有選擇器的選擇信號a1和最高位的選擇結果a2,其輸入輸出的邏輯關系為a1=over1+over2‾c1x+over2‾c1c2‾+over2‾xc2‾;a2=over1+over2‾c1c2]]>所述最高位的選擇結果a2輸入所述最高位積累單元,在將上一列的所有2m-1個狀態的最高位搜集全之后從所述最高位積累單元輸出本列溢出控制位over_bit。
所述的維特比譯碼器為并行結構;所述最高位積累單元的輸入為上一列2m-1個ACS單元的PM值最高位(m是約束長度),進行2m-1輸入的與操作,輸出為本列的over_bit位。
所述的維特比譯碼器為串行/混合型結構;所述最高位積累單元的輸入為上一列n(n為采用的ACS單元個數)個ACS單元的PM值最高位以及上一列已經積累的over_bit值,進行n+1輸入的與操作,將上一列的所有2m-1個狀態的最高位都搜集全之后將本列的over_bit位輸出。
本發明公開的一種用于維特比譯碼器的加比選單元電路,包括順序處理輸入數據的兩個加法器A、B、比較器CMP、和多路選擇器MUX,防止兩個加法器A、B溢出的最高位選通電路包括將各個加法器的最高位單獨處理的進位處理邏輯電路A和B、以及簡單邏輯電路,在最高位選通電路后端設置最高位積累單元。
本發明公開了一種用于維特比譯碼器的加比選單元電路還具有下述附加技術特征所述進位處理邏輯電路A的輸入有三個,分別是網格圖中上一列相應狀態的進位輸出c_out、本狀態的加法器A的進位輸出add_c1和上一列的溢出控制位over_bit,輸出有兩個,分別為本加法器A的最高位輸出c1和該狀態PM值溢出標志位over1,其輸入輸出的邏輯關系為c1=c_out&over_bit+add_c1;over1=c_out&over_bit&add_c1;所述進位處理邏輯電路B(45B)的輸入有三個,分別是網格圖中上一列另一個相應狀態的進位輸出c_out、本狀態的加法器B的進位輸出add_c2和上一列的溢出控制位over_bit,輸出有兩個,分別為本加法器B的最高位輸出c2和該狀態PM值溢出標志位over2,其輸入輸出的邏輯關系為c2=c_out&over_bit+add_c2;over2=c_out&over_bit&add_c2;所述簡單邏輯電路的輸入有所述兩個加法器A、B的進位位c1、c2,溢出標志位over1、over2和所述比較器CMP的輸出結果x;輸出有所述選擇器MUX的選擇信號a1和最高位的選擇結果a2,其輸入輸出的邏輯關系為a1=over1+over2‾c1x+over2‾c1c2‾+over2‾xc2‾;a2=over1+over2‾c1c2]]>所述最高位的選擇結果a2輸入所述最高位積累單元,在將上一列的所有2m-1個狀態的最高位搜集全之后從所述最高位積累單元輸出本列溢出控制位over_bit;所述的最高位積累單元用來進行網格圖中每一列的所有2m-1個節點PM值的最高位與操作,將上一列的所有2m-1個狀態的最高位都搜集全之后將本列的over_bit位輸出。
本發明在確定ACS單元最小位寬以后,提出了一種改進的ACS電路,在解決PM值溢出問題的同時,可以有效地較少ACS單元的硬件實現面積和關鍵路徑延時,并能普遍適用于Viterbi的各種不同結構。在此基礎上,本發明電路通過增加簡單的邏輯電路、進位位邏輯單元A和B,將各個加法器的最高位單獨處理,使其可以在ACS電路輸出之前產生,這樣最高位積累單元就可以與ACS電路同時執行,不增加關鍵路徑的長度。產生ACS的比較選擇信號時,先對PM值的最高位處理,再處理低位值。因為軟判決和硬判決的區別主要在BMU單元,體現在ACS單元只是數據位寬的不同,因此本發明可以兼容軟判決和硬判決。
本發明的最高位積累單元針對Viterbi的各種結構可以采用相近的不同結構,使得本發明可以普遍適用于串行、并行和混合型Viterbi結構,而且不同Viterbi結構下的電路結構相差不大。
本發明包括如下附圖圖1是一種典型的卷積編碼器;圖2是Viterbi譯碼器的結構框圖;圖3是常規的ACS電路結構;圖4是本發明的ACS電路結構;圖5本發明ACS電路的數據流圖。
具體實施方法下面結合附圖對本發明做進一步詳細說明。
本發明公開的技術方案是一種可以有效減小ACS單元數據位寬的方法,并在此基礎上提出一種ACS電路,可以解決PM值溢出的問題。
首先說明決定ACS單元最小位寬的方法對于一般二進制(n0,k0,m)編碼器來說,每次輸入的是k0個信息元,有2k0個可能的信息組,這相應于從碼樹每一節點上分出的分支數有2k0條,每個節點相應于2k0種不同的信息組輸入,并且每條都有n0個碼元,作為與此相應的輸出子碼,相應的每個ACS也有2k0個加法器以及2k0路數據比較器。一般在通信系統中采用的卷積碼都取k0=1,本發明也是針對(n0,1,m)卷積碼的Viterbi譯碼器。另外,Viterbi每接收一個數據,用width位來表示。很顯然,用width參數可以表示判決方式,即width=1為硬判決,width>1為軟判決。
基于以上的分析,本發明通過以下三步,可以通過確定最大PM值和最小PM值之差即PM跨度值,從而決定ACS單元所需的最小位寬。
1、對于(n0,1,m)卷積碼,網格圖中的每一列的PM跨度(用S_PM表示)有
S_PM≤n0·(m-1)·(2width-1)。
即對于(n0,1,m)卷積碼,每一列所有節點的最大PM跨度為n0·(m-1)·(2width-1),假設某一列t的PM最小值狀態為Sx,它的度量值為PMmin。在網格圖中,經過(m-1)列后,該狀態就可以將其度量值延伸到所有的2m-1個狀態。我們知道對于n0輸出的卷積碼由同一點出發的PM值在網格圖上前進(m-1)步之后,PM跨度最大為n0·(m-1)·(2width-1)。如果網格圖前進(m-1)步后,所有的網格狀態都是由該點出發的延伸值,則度量跨度最大為n0·(m-1)·(2width-1);否則,說明剩余的PM值比由該點出發的延伸值還要小,即小于n0·(m-1)·(2width-1)。
2、對于有確定生成序列的(n0,1,m)卷積碼,網格圖中的每一列PM跨度(用S_PMgs表示,指確定生成序列的PM跨度)還會有所降低,即S_PMgs≤H_PM(gs,00)·(2width-1),其中H_PM(gs,00)指用于硬判決時,向Viterbi譯碼器輸入全0數據的最大PM跨度。由1可知,(n0,1,m)卷積碼有S_PM≤n0·(m-1)·(2width-1),但是確定的生成序列使得各狀態之間有著微妙的聯系,網格圖的拓撲結構總是保證會有更小的其它路徑的度量值作為幸存路徑PM值,因此會有S_PMgs≤S_PM。因為網絡拓撲結構與輸入數據的軟硬判決無關,因此,我們只需考慮硬判決情況,先求出最大硬判決跨度H_PM(gs,max),然后再拓展到width位寬即可。
我們尋找確定生成序列的(n0,1,m)卷積碼的H_PM(gs,max)的步驟是這樣的首先,將所有狀態的PM值清0,以免在初始狀態引入PM跨度。接著,向Viterbi譯碼器輸入全0的數據流,然后通過Matlab或其它軟件,考察其ACS輸出的全部度量值以及度量跨度,全0輸入的序列使得Viterbi譯碼器的硬判決PM跨度最大。
H_PM(gs,00)就是確定生成序列的(n0,1,m)卷積碼的H_PM(gs,max)。
首先,介紹一下“源”和“匯”的概念,某個狀態S的“源”和“匯”的定義如下“源”指的是在網格上可以通過一條支路到達狀態S的狀態;“匯”指的是網格上以S為“源”的狀態。從網格圖的分析可知,狀態0和狀態2m-1-1都是以自己作為“源”和“匯”的。以狀態0為例,網格圖中,狀態0→狀態0的輸出值為“00”。因此,當我們以全0的比特流作為Viterbi譯碼器的輸入流時,幸存路徑就是0→0→0→0。這種幸存路徑受其它狀態的干擾最小,因為幸存路徑始終是0狀態,沒有別的狀態能夠介入到幸存路徑中;而且,對其它狀態的PM值的影響也最大,因為總是0狀態有最小的路徑度量(PM)值,它的延伸值很容易成為其它狀態的幸存路徑。即是說,它是最接近于1中所討論的最大度量跨度情況的。因此,可以推出它就是度量跨度最大的路徑,即H_PM(gs,00)就是確定生成序列的(n0,1,m)卷積碼的H_PM(gs,max)。
同理,可知狀態2K-1-1也是度量跨度最大的路徑,也即是它們的度量跨度值是相同的,都為H_PM(gs,max)。因為H_PM(gs,00)是由網格圖的拓撲結構決定的,因此經過足夠多的列之后,H_PM便不再增加,而是穩定到一定的數值,這就是我們要求的H_PM(gs,00)。如果Viterbi每個輸入數據用width位寬來表示(即width=1時,為硬判決;width>1時,為軟判決),則確定生成序列的(n0,1,m)卷積碼的S_PMgs≤H_PM(gs,00)·(2width-1)。
Viterbi輸入數據用width位寬來表示,就是將硬判決的輸入數據‘0’和‘1’對應量化成“0”和“2width-1”。在無噪聲的情況下,也即是將S_PM(gs,max)從硬判決的H_PM(gs,00)變成了H_PM(gs,00)·(2width-1);在有噪聲的情況下,就S_PMgs最大的全0輸入而言,如果噪聲很小,0信號經過噪聲信道對應量化成“0~2width-1-1”,既是說依然是傾向于硬判決的0值的,這會使得最小度量狀態不變,而最小度量值增大,因而S_PMgs≤H_PM(gs,00)·(2width-1);若噪聲很大,0信號經過噪聲信道對應量化成“2width-1~2width-1”,既是說Viterbi的輸入信號傾向于硬判決的1值,這就使得幸存路徑不再是0狀態,因此也有S_PMgs≤H_PM(gs,00)·(2width-1)。
3、對于(n0,1,m)卷積碼,首先由(1)式確定i值。如果對應的i值能夠滿足(2)式((2)式中 表示不大于 的最大整數),則確定該(n0,1,m)卷積碼可以用i比特位寬的ACS單元;如果對應的i值不能滿足(2)式,則說明i比特可能不滿足ACS對數據范圍的要求,需要用(i+1)比特位寬的ACS單元。如果是有確定生成序列的卷積碼,只需將S_PM換成相應的S_PMgs,求出對應的ACS位寬即可,很顯然igs≤i。
2i-2≤S_PM<2i-1(1) 為了能夠保存每一列的S_PM,我們可以用比S_PM值多一位的i比特來表示ACS單元數據,但是,還要保證當所有PM值的最高位都為1時,最大的PM值不會溢出。因此,需要(2)式來進行選擇。
假設第t列的最小PM值為節點SX的PM(min,t),則(t+1)列的最小PM值PM(min,t+1)有 對于(3)的前半部分這里就不再敘述了,可以在講解卷積碼的相關書籍中找到對應的解釋;對于(3)的后半部分,t列的每個狀態在t+1時刻均可以延伸出兩個狀態,分別對應輸入值為0和1。因為一般卷積碼的n0個輸出都與輸入即時相關,所以相同狀態的兩個不同輸入,勢必造成兩種狀態的輸出互異,因此從SX延伸的兩個狀態最小值一定不大于 ,如果PM(min,t+1)依然是SX的延伸,則有 如果PM(min,t+1)不是SX的延伸,則說明PM(min,t+1)值會比 更小。綜上所述,可以得到(3)式。
由(1)式確定的i值,如果能夠滿足(2)式則該(n0,1,m)卷積碼可以用i比特位寬的ACS單元;如果不滿足(2)式,則需要用(i+1)比特位寬的ACS單元。考慮極限情況,當某一列的PM(min,t)=2i-1-1時,由(3)式,假設PM(min,t+1)取最大值,則有 則該列的最大PM值為
PM(max,t+1)≤PM(min,t+1)+S_PM 如果滿足(2)式,則有PM(max,t+1)<2i,說明2i-1≤PM(any,t+1)<2i(PM(any,t+1)表示(t+1)列的任意節點的PM值),因此可以用i比特位寬的ACS單元;如果不能滿足(2)式,說明當PM(min,t+1)≥2i-1時,有PM(max,t+1)≥2i,i比特數據不足以保存PM值差異,我們需要增加1位,用(i+1)比特位寬的ACS單元。
通過以上三步可以確定任意(n0,1,m)卷積碼的對應ACS位寬。我們以(2,1,7)卷積碼和(3,1,7)卷積碼為例進行說明,假設都是進行width=3的軟判決例1(2,1,7)卷積碼由(1)式有26<2×(7-1)×23=84<27,所以i=8,而且由(2)式有27-1+84+1×7=218<28,所以(2,1,7)卷積碼可以用8位的ACS單元。如果確定(2,1,7)卷積碼的生成多項式為(133)8、(171)8,通過Matlab軟件仿真可以得到H_PM(gs,00)=8。則由(1)式有25<8×7=56<26,所以i=7,而且由(2)式有26-1+56+1×7=126<27,所以對于生成序列為(133)8、(171)8的(2,1,7)卷積碼可以用7位的ACS單元。
例2(3,1,7)卷積碼由(1)式有26<3×(7-1)×23=126<27,所以i=8,但是由(2)式有27-1+126+1×7=260>28,因此(2,1,7)卷積碼需要用8+1=9位的ACS單元。如果確定(3,1,7)卷積碼的生成多項式為(133)8、(145)8、(175)8,通過Matlab軟件仿真可以得到H_PM(gs,00)=12。則由(1)式有26<12×7=84<27,所以i=8,而且由(2)式有27-1+84+1×7=218<28,所以對于生成序列為(133)8、(145)8、(175)8的(3,1,7)卷積碼可以用8位的ACS單元。
在確定ACS單元位寬i之后,本發明提出一種改進的ACS電路,可以有效地解決PM值溢出問題,而且相對于傳統的ACS設計也減小了硬件實現和關鍵路徑延時,并且能夠普遍適用于Viterbi的并行/串行/混合型結構。
如圖4所示是本發明的改進ACS電路單元結構圖,在該電路中,并沒有采用i比特位寬的加法器、比較器,而是采用(i-1)比特位寬加法器和比較器,然后通過增加進位位邏輯單元45A、45B和Logic基本邏輯單元46對最高位進行單獨處理。
下面給出圖4中進位位邏輯單元45A、45B和Logic基本邏輯單元46的真值表。
這是以45A為例(X狀態為不可能出現的狀態)的進位邏輯單元真值表。它的輸入有三個,分別是網格圖中上一列相應狀態的進位輸出c_out、本狀態的加法器41A進位輸出add_c1和上一列的溢出控制位over_bit,輸出有兩個,分別為本加法器的最高位輸出c1和該狀態PM值溢出標志位over1。當出現PM值溢出問題時,對應于真值表中的{c_out,add_c1}=2’b11,即上一時刻的最高位輸出為1,本時刻的加法器41A進位位也為1,說明本數據已經兩次超過2i-1,即已經超過2i,如果這時候over_bit=1,即所有狀態PM值都已經大于等于2i-1,所以PM值可以減掉2i-1,進位位c1輸出為1;如果這時候over_bit=0,則說明這時本加法器的輸出已經超過2i,但是還沒有所有狀態PM值都大于等于2i-1,則該PM值一定是被舍棄的PM值,所以,我們令c1輸出為X,而over1為1(表示該數即將被舍棄)。
通過對真值表的分析可以得出c1=c_outover_bit+add_c1,over1=c_out&over_bit&add_c1。
對于基本邏輯單元Logic46,它的輸入有五個分別是兩個加法器41A、41B的進位位c1、c2,溢出標志位over1、over2和比較器(CMP)42的輸出結果x,輸出有兩個,一個是選擇電路(MUX)43的選擇信號a1和最高位的選擇結果a2。這里,溢出標志位over1、over2是為了防止非幸存路徑的溢出問題。
為了分析邏輯關系方便,先分析c1、c2和x的邏輯關系,令它們的輸出分別對應為a1_temp和a2_temp,再考慮over1、over2、a1_temp和a2_temp之間的邏輯關系。
所以,Logic基本邏輯單元46分為兩個真值表格來表示。
對于第二部分,{over1,over2)=2’b11時,即本ACS單元的兩個PM值都出現溢出現象,通過前面決定ACS數據位寬的分析,可知這是不可能發生的情況,可以不用理會。通過對兩個真值表的分析可以得出a1=over1+over2‾c1x+over2‾c1c2‾+over2‾xc2‾;]]>a2=over1+over2‾c1c2]]>下面詳細解釋一下,本電路的性能改進1、本發明提供了一種決定ACS最小位寬的方法,并提出了能夠解決溢出問題的ACS電路,雖然本電路增加了一些邏輯電路,但是,這些邏輯電路只是由簡單的與或非門組成,消耗資源很少;而且,通過本方法已經使ACS的數據位寬達到最小。綜合考慮,本發明有效地減小了硬件電路資源。
2、時間特性分析圖5給出本發明ACS電路的數據流圖,假設最終確定ACS數據位寬為i。該圖與圖4相比在電路表現形式上做了如下改動將Logic中的a1和a2分開表示,并將a1進行變形,如下式所示a1=over1+over2‾·c1·x+over2‾·c1·c2‾+over2‾·c2‾·x]]>=(over2‾·c1+over2‾·c2‾)·x+(over1+over2‾·c1·c2‾)=ax+b]]>其中a=over2‾·c1+over2‾·c2‾,]]>b=over1+over2‾·c1·c2‾.]]>因為x信號出現的較晚,因此a1信號可以分為兩部分執行a、b電路先執行;收到x信號后,再執行a1=ax+b的操作。
從數據流的角度看,本發明ACS電路可以分成三個階段,每個階段的電路可以同時執行第一階段包括兩個(i-1)位加法器41A、41B和45A、45B中的over_bit非門、兩個與門相關的電路,很顯然這個階段的關鍵路徑是(i-1)位加法器。第二階段的電路在第一階段電路之后執行,包括45A和45B中的兩個或門(c1、c2)、兩個與門(over1、over2)、46中的a2、64輸入與非門、(i-1)位CMP(x)以及46中的a和b。而第三階段電路a1=ax+b只能在比較器CMP輸出比較信號x之后執行。
在第一階段電路之后,數據流分為三股,第一股數據流與門(over1、over2)、或門(c1、c2)→與門(a2)→最高位積累單元;第二股數據流CMP(x);第三股數據流與門(over1、over2)、或門(c1、c2)→46中的a和b。如圖所示,后兩股數據流交匯于a1=ax+b部分,顯然比較器決定了后兩股數據流的關鍵路徑。第一股數據流與后兩股數據流不相關,實際上三股數據流會合并成兩股。
先分析2m-1輸入與門的延時假設該多輸入與門用二輸入的與門級聯實現,則需要(m-1)級的二輸入與門(第一級2m-2個二輸入與門,以此類推,最后一級為1個二輸入與門),因此最大延時為tmax=(m-1)×t二輸入與門,在實際實現時一定會采取延時更小的電路,延時一定不會大于tmax的值。最高位積累單元44延時最大的情況是Viterbi采用并行結構即需要2m-1輸入與門的情況,因此有t44≤(m-1)×t二輸入與門。因此,最高位積累單元延時小于(i-1)位比較器+(a1=ax+b)+2選1的多路選擇器。
綜上,整個電路的關鍵路徑為(i-1)位加法器+(i-1)位比較器+二輸入與門+二輸入或門+2選1多路選擇器。很顯然,本電路使得關鍵路徑有所降低。
3、本電路普遍適用于串行、并行與混合型Viterbi結構。在并行結構時,輸入為上一列2m-1個ACS單元的PM值最高位,進行2m-1輸入的與操作,輸出為本列的over_bit位;在串行/混合型結構時,輸入為上一列n(n為采用的ACS單元個數)個ACS單元的PM值最高位以及上一列已經積累的over_bit值,進行n+1輸入的與操作,將上一列的所有2m-1個狀態的最高位都搜集全之后將本列的over_bit位輸出。
綜上所述,本發明公開了一種用于確定ACS單元最小位寬的方法,包括下述三個步驟第一步,對于(n0,1,m)卷積碼,網格圖中的每一列的PM跨度(用S_PM表示)有S_PM ≤n0·(m-1)·(2width-1);第二步,對于有確定生成序列的(n0,1,m)卷積碼,網格圖中的每一列PM跨度(用S_PMgs表示)有S_PMgs≤H_PM(gs,00)·(2width-1),其中H_PM(gs,00)指用于硬判決時,向Viterbi譯碼器輸入全0數據的最大PM跨度;第三步,對于(n0,1,m)卷積碼,首先2i-2≤S_PM<2i-1(1)由(1)式確定i值。如果對應的i值能夠滿足 ((2)式中 表示不大于 的最大整數),則確定該(n0,1,m)卷積碼可以用i比特位寬的ACS單元;如果對應的i值不能滿足(2)式,則需要用(i+1)比特位寬的ACS單元。對于有確定生成序列的卷積碼,只需將S_PM換成相應的S_PMgs,求出對應的ACS位寬即可,很顯然igs≤i。
權利要求
1.一種維特比譯碼器,包括順序處理接收到的數據的分支度量單元BMU(21)、加比選單元ACS(22)、幸存路徑存儲器(24)、和回溯單元TBU(23),以及將所述ACS(22)選出的路徑度量(PM)值在后繼的步驟中再送回ACS(22)單元的路徑度量存儲單元(25),其特征在于,在所述加比選單元ACS(22)后端設置用來進行網格圖中每一列的所有2m-1個節點PM值的最高位與操作、將上一列的所有2m-1個狀態的最高位都搜集全之后將本列的溢出控制位over_bit位輸出的最高位積累單元。
2.根據權利要求1所述的維特比譯碼器,其特征在于,在所述加比選單元ACS(22)中還包括將各個加法器的最高位單獨處理的兩個進位處理邏輯電路(45A)和(45B)、以及簡單邏輯電路(46);所述進位處理邏輯電路(45A)的輸入有三個,分別是網格圖中上一列相應狀態的進位輸出c_out、本狀態的加法器(41A)進位輸出add_c1和上一列的溢出控制位over_bit,輸出有兩個,分別為本時刻的最高位輸出c1和該狀態PM值溢出標志位over1,其輸入輸出的邏輯關系為c1=c_out&over_bit+add_c1;over1=c_out&over_bit&add_c1所述進位處理邏輯電路(45B)的輸入有三個,分別是網格圖中上一列另一個相應狀態的進位輸出c_out、本狀態的加法器(41B)進位輸出add_c2和上列的溢出控制位over_bit,輸出有兩個,分別為本時刻的最高位輸出c2和該狀態PM值溢出標志位over2,其輸入輸出的邏輯關系為c2=c_out&over_bit+add_c2;over2=c_out&over_bit&add_c2。
3.根據權利要求2所述的維特比譯碼器,其特征在于,所述簡單邏輯電路(46)的輸入有進位位c1、c2,溢出標志位over1、over2和所述比較器輸出結果x;輸出有選擇器的選擇信號a1和最高位的選擇結果a2,其輸入輸出的邏輯關系為a1=over1+over2‾c1x+over2‾c1c2‾+over2‾xc2‾;]]>a2=over1+over2‾c1c2]]>所述最高位的選擇結果a2輸入所述最高位積累單元,在將上一列的所有2m-1個狀態的最高位搜集全之后從所述最高位積累單元輸出本列溢出控制位over_bit。
4.根據權利要求3所述的維特比譯碼器,其特征在于,所述的維特比譯碼器為并行結構;所述最高位積累單元的輸入為上一列2m-1個ACS單元的PM值最高位(m是約束長度),進行2m-1輸入的與操作,輸出為本列的over_bit位。
5.根據權利要求3所述的維特比譯碼器,其特征在于,所述的維特比譯碼器為串行/混合型結構;所述最高位積累單元的輸入為上一列n(n為采用的ACS單元個數)個ACS單元的PM值最高位以及上一列已經積累的over_bit值,進行n+1輸入的與操作,將上一列的所有2m-1個狀態的最高位都搜集全之后將本列的over_bit位輸出。
6.一種用于維特比譯碼器的加比選單元電路,包括順序處理輸入數據的兩個加法器(41A、41B)、比較器CMP(42)、和多路選擇器MUX(43),其特征在于,防止兩個加法器(41A、41B)溢出的最高位選通電路包括將各個加法器的最高位單獨處理的進位處理邏輯電路(45A)和(45B)、以及簡單邏輯電路(46),在最高位選通電路后端設置用來進行網格圖中每一列的所有2m-1個節點PM值的最高位與操作、將上一列的所有2m-1個狀態的最高位都搜集全之后將本列的溢出控制位over_bit位輸出的最高位積累單元。
7.根據權利要求6所述的用于維特比譯碼器的加比選單元電路,其特征在于,所述進位處理邏輯電路(45A)的輸入有三個,分別是網格圖中上一列相應狀態的進位輸出c_out、本狀態的加法器A的進位輸出add_c1和上一列的溢出控制位over_bit,輸出有兩個,分別為本加法器(45A)的最高位輸出c1和該狀態PM值溢出標志位over1,其輸入輸出的邏輯關系為c1=c_out&over_bit+add_c1;over1=c_out&over_bit&add_c1;所述進位處理邏輯電路(45B)的輸入有三個,分別是網格圖中上一列另一個相應狀態的進位輸出c_out、本狀態的加法器進位輸出add_c2和上一列的溢出控制位over_bit,輸出有兩個,分別為本加法器的最高位輸出c2和該狀態PM值溢出標志位over2,其輸入輸出的邏輯關系為c2=c_out&over_bit+add_c2;over2=c_out&over_bit&add_c2。
8.根據權利要求7所述的用于維特比譯碼器的加比選單元電路,其特征在于,所述簡單邏輯電路(46)的輸入有所述兩個加法器(41A、41B)的進位位c1、c2,溢出標志位over1、over2和所述比較器CMP(42)的輸出結果x;輸出有所述選擇電路MUX(43)的選擇信號a1和最高位的選擇結果a2,其輸入輸出的邏輯關系為a1=over1+over2‾c1x+over2‾c1c2‾+over2‾xc2‾;]]>a2=over1+over2‾c1c2]]>所述最高位的選擇結果a2輸入所述最高位積累單元,在將上一列的所有2m-1個狀態的最高位搜集全之后從所述最高位積累單元輸出本列溢出控制位over_bit。
9.根據權利要求8所述的用于維特比譯碼器的加比選單元電路,其特征在于,所述的維特比譯碼器為并行結構;所述最高位積累單元的輸入為上一列2m-1個ACS單元的PM值最高位(m是約束長度),進行2m-1輸入的與操作,輸出為本列的over_bit位。
10.根據權利要求8所述的用于維特比譯碼器的加比選單元電路,其特征在于,所述的維特比譯碼器為串行/混合型結構;所述最高位積累單元的輸入為上一列n(n為采用的ACS單元個數)個ACS單元的PM值最高位以及上一列已經積累的over_bit值,進行n+1輸入的與操作,將上一列的所有2m-1個狀態的最高位都搜集全之后將本列的over_bit位輸出。
全文摘要
本發明涉及一種維特比譯碼器以及其中的加比選單元電路的改進,本發明在確定加比選單元的位寬的基礎上提出一種改進的ACS電路,從而減小維特比譯碼器硬件實現面積以及加比選單元關鍵路徑的延遲時間;可以有效地解決PM值溢出問題,并且能普遍適用于Viterbi的并行/串行/混合型結構。本發明公開的維特比譯碼器,包括順序處理接收到的數據的分支度量單元BMU、加比選單元ACS、幸存路徑存儲器和回溯單元TBU,以及將所述ACS選出的PM值在后繼的步驟中再送回ACS單元的路徑度量存儲單元,在所述加比選單元ACS后端設置最高位積累單元。加比選單元電路,包括順序處理輸入數據的兩個加法器A、B、比較器CMP、和多路選擇器MUX,各個加法器的最高位單獨處理的進位處理邏輯電路A和B、以及簡單邏輯電路。
文檔編號H03M13/41GK1731686SQ20051003637
公開日2006年2月8日 申請日期2005年8月8日 優先權日2005年8月8日
發明者王一, 王新安, 張國新, 肖高發, 洪波, 趙騰飛 申請人:北京大學深圳研究生院, 華為技術有限公司