專利名稱:收縮型Viterbi解碼系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信系統(tǒng)中的編解碼技術(shù),更具體地說(shuō),涉及一種收縮型 Viterbi解碼系統(tǒng)和方法,該方法可大幅提高基于DSP平臺(tái)應(yīng)用的解碼速度。
背景技術(shù):
RCPC(Rate Compatible Punctured Convolution Code:速率兼容收縮型巻積 編碼)碼是巻積f馬的一種,因?yàn)槠渚幋a器相對(duì)簡(jiǎn)單、編碼增益高以及具有很強(qiáng) 的糾正隨機(jī)錯(cuò)誤的能力,可以在不改變編碼器結(jié)構(gòu)的前提下就能實(shí)現(xiàn)不同碼率 輸出,在現(xiàn)代數(shù)字通信系統(tǒng)中得到了廣泛的應(yīng)用。對(duì)于編碼器長(zhǎng)度小于10的 RCPC編碼,收縮型Viterbi算法則是目前最優(yōu)的解碼算法。其基本原理是通過(guò) 比較搜索網(wǎng)格圖中與輸入數(shù)據(jù)最相關(guān)的(碼距最小)的路徑,此路徑即是對(duì)輸入 編碼器數(shù)據(jù)的最佳估計(jì)。然后根據(jù)保存的最相關(guān)路徑狀態(tài)進(jìn)行回溯譯出數(shù)據(jù)。 收縮型Viterbi解碼實(shí)際上與常規(guī)Viterbi解碼器的基本結(jié)構(gòu)是一樣的,主要區(qū) 別在于增加了對(duì)收縮部分的數(shù)據(jù)處理(反收縮)和支路量度(即碼距)的計(jì)算 方式不同。為實(shí)現(xiàn)收縮型Viterbi解碼,可釆用ASIC(專用集成電路)、FPGA(現(xiàn)場(chǎng)可 編程邏輯門陣列)、或DSP(數(shù)字信號(hào)處理器)來(lái)實(shí)現(xiàn)。采用DSP靠軟件來(lái)實(shí)現(xiàn) 是速度較慢的一種,但其是最靈活的,符合近年來(lái)興起的軟件無(wú)線電技術(shù)要求。 對(duì)信道編解碼來(lái)講,用DSP來(lái)實(shí)現(xiàn)的好處是只需少量改動(dòng)程序,就可適應(yīng)不 同的編碼速率以及各種通信系統(tǒng)所要求的不同的編解碼方法,然而速度的瓶頸 限制了 DSP解碼在實(shí)時(shí)系統(tǒng)中的應(yīng)用。收縮型Viterbi解碼作為無(wú)線通信網(wǎng)絡(luò)信道解碼的核心部分,其運(yùn)算時(shí)間占 了整個(gè)信道級(jí)聯(lián)解碼的一半以上。收縮型Viterbi解碼的關(guān)鍵運(yùn)算是每級(jí)中每個(gè) 狀態(tài)都要進(jìn)行的收縮型支路量度計(jì)算、ACS (Add Compare Select:力Q-比-選) 處理、狀態(tài)轉(zhuǎn)移表的更新,其中后兩者實(shí)現(xiàn)簡(jiǎn)單, 一般可用DSP匯編指令來(lái)實(shí) 現(xiàn)。根據(jù)實(shí)際測(cè)試。這類關(guān)鍵運(yùn)算占了整個(gè)解碼時(shí)間的近80%。如果待解碼的 數(shù)據(jù)長(zhǎng)度為L(zhǎng)比特,而編碼器約束長(zhǎng)度為N,則執(zhí)行總數(shù)為I^2^"次。顯然,
其執(zhí)行次數(shù)與狀態(tài)數(shù)2^"和L成正比,隨N的增加而按指數(shù)增長(zhǎng)。如果解碼數(shù) 據(jù)很大的話,則運(yùn)算時(shí)間是非常大的。其中收縮型支路量度的計(jì)算方法對(duì)解碼 效率影響很大。'同時(shí),對(duì)接收數(shù)據(jù)的反收縮處理方式不同,也將直接影響支路 量度的計(jì)算和解碼質(zhì)量?,F(xiàn)有的收縮型Viterbi解碼方法中,在對(duì)接收數(shù)據(jù)的反收縮處理和收縮型支 路量度計(jì)算上缺乏效率。具體體現(xiàn)在以下兩個(gè)方面(1) 由于數(shù)據(jù)經(jīng)過(guò)RCPC編碼后,其輸出已按照收縮表進(jìn)行了部分收縮(舍 棄部分編碼數(shù)據(jù))操作,在解碼時(shí)必須恢復(fù)被收縮數(shù)據(jù)的數(shù)據(jù)率,并且恢復(fù)位 置要與編碼一致,才能正確解碼,所以在接收端解碼之前要對(duì)接受數(shù)據(jù)進(jìn)行預(yù) 處理,也就是對(duì)接收數(shù)據(jù)的反收縮處理。現(xiàn)有技術(shù)的反收縮處理主要是對(duì)接收 數(shù)據(jù)的量化取值不同和被收縮部分?jǐn)?shù)據(jù)恢復(fù)時(shí)的取值不同。其取值對(duì)量度計(jì)算 的效率影響很大。其對(duì)接收數(shù)據(jù)的量化取值一般都使用較大的數(shù)值,如為土250 時(shí),則-250做為最接近1,而+250做為最接近0的接收數(shù)據(jù)來(lái)量化。被收縮 部分?jǐn)?shù)據(jù)恢復(fù)時(shí)一般通過(guò)補(bǔ)0來(lái)恢復(fù)數(shù)據(jù)率。(2) 現(xiàn)有技術(shù)中,收縮型支路量度計(jì)算流程是先判斷網(wǎng)格圖中的當(dāng)前編 碼值,然后據(jù)此對(duì)接收數(shù)據(jù)進(jìn)行符號(hào)更新,將更新符號(hào)后的數(shù)據(jù)與基準(zhǔn)值(一 般取16位最大負(fù)值的一半)進(jìn)行累加,由于采用上述較大的量化取值,還需 要進(jìn)行累加越界判定及修正。這樣得到當(dāng)前狀態(tài)其中一條支路的網(wǎng)格圖編碼序 列與接收數(shù)據(jù)序列的第1個(gè)比特的量度值。然后按同樣的方法計(jì)算下一個(gè)比特 量度。直到完成從1到n (編碼效率為1/n)比特的計(jì)算,最后得到當(dāng)前狀態(tài) 的其中一條支路量度值。 一個(gè)狀態(tài)包括兩條支路,然后再用同樣的方法計(jì)算另 一條支路。可見,現(xiàn)有技術(shù)中,受接收數(shù)據(jù)反收縮處理方式的限制,不能有效利用DS P的指令并行特點(diǎn);在收縮型支路量度計(jì)算上很費(fèi)時(shí),效率低,由于是最基本 的重復(fù)執(zhí)行單元,基于DSP平臺(tái)應(yīng)用時(shí),對(duì)整個(gè)解碼時(shí)間影響很大;如果選 用更高速度的DSP或用FPGA等實(shí)現(xiàn),帶來(lái)的是成本的提高和功耗加大等新 問(wèn)題。發(fā)明內(nèi)容針對(duì)現(xiàn)有收縮型Viterbi解碼方法中存在的解碼耗時(shí)長(zhǎng)、難以滿足實(shí)時(shí)性要 求的問(wèn)題,本發(fā)明旨在采用更簡(jiǎn)化的反收縮的處理和改進(jìn)的收縮型支路量度計(jì)算方法,來(lái)提高在基于DSP平臺(tái)應(yīng)用的解碼速度。本發(fā)明解決其技術(shù)問(wèn)題所采用的技術(shù)方案是提供一種收縮型Viterbi解 碼方法,其中包括以下步驟-(51) 對(duì)接收數(shù)據(jù)進(jìn)行初始化處理,以生成解碼網(wǎng)格圖和編碼器狀態(tài)檢索表;(52) 對(duì)所述初始化處理后的接收數(shù)據(jù)進(jìn)行反收縮處理,其中,當(dāng)接收數(shù) 據(jù)為1時(shí)接收端取正值,為0時(shí)則取負(fù)值,對(duì)于被收縮部分的數(shù)據(jù)則用補(bǔ)0 來(lái)恢復(fù),從而得到三類數(shù)據(jù)值;(53) 采用并行單比特正負(fù)乘累加的方法,對(duì)所述反收縮處理后的接收數(shù) 據(jù)進(jìn)行收縮型支路量度計(jì)算;(54) 對(duì)所述步驟(S3)的結(jié)果進(jìn)行量度累加、兩兩比較、選擇存儲(chǔ)幸存量度 的處理,即ACS處理;(55) 對(duì)狀態(tài)轉(zhuǎn)移表進(jìn)行更新;(56) 回溯解碼,得到解碼結(jié)果。本發(fā)明的優(yōu)選方案中,在所述步驟(S2)中當(dāng)接收到數(shù)據(jù)為1時(shí)接收端取 1,為O時(shí)則取-l。本發(fā)明的優(yōu)選方案中,在所述步驟(S3)中每個(gè)狀態(tài)都有兩個(gè)引出支路, 其中一條是編碼輸入為的,約定為A支路,另一條是編碼輸入為'0' 的,約定為B支路,對(duì)于編碼效率為1/n的接收數(shù)據(jù),則每解碼出1比特需要 輸入n比特當(dāng)前接收數(shù)據(jù)和n比特網(wǎng)格圖編碼值,以完成從1到n的并行單比 特正負(fù)乘累加;當(dāng)計(jì)算A支路時(shí),通過(guò)査網(wǎng)格圖表找到在當(dāng)前狀態(tài)下編碼輸 入為'1,時(shí)的第l比特編碼值,然后直接與經(jīng)過(guò)反收縮處理的接收數(shù)據(jù)當(dāng)前 狀態(tài)下的第1個(gè)比特進(jìn)行相加,得到一個(gè)加值;接著將第1個(gè)加值作為累加值 參與第2個(gè)比特計(jì)算,計(jì)算方式與第1比特相同,如此直到計(jì)算到n比特為止; 然后用同樣的方法計(jì)算B支路,從而完成一個(gè)狀態(tài)的支路量度計(jì)算?;谏鲜龇桨福景l(fā)明還可提供一種收縮型Viterbi解碼系統(tǒng),其中包括 初始化處理模塊,用于對(duì)接收數(shù)據(jù)進(jìn)行初始化處理,以生成解碼網(wǎng)格圖和 編碼器狀態(tài)檢索表;
反收縮處理模塊,用于對(duì)所述初始化處理后的接收數(shù)據(jù)進(jìn)行反收縮處理,其中,當(dāng)接收數(shù)據(jù)為1時(shí)接收端取正值,為o時(shí)則取負(fù)值,對(duì)于被收縮部分的數(shù)據(jù)則用補(bǔ)O來(lái)恢復(fù),從而得到三類數(shù)據(jù)值;支路量度計(jì)算模塊,其中采用并行單比特正負(fù)乘累加的方法,對(duì)所述反收 縮處理后的接收數(shù)據(jù)進(jìn)行收縮型支路量度計(jì)算;ACS處理模塊,用于對(duì)所述支路量度計(jì)算模塊的輸出結(jié)果進(jìn)行量度累加、 兩兩比較、選擇存儲(chǔ)幸存量度的處理,即ACS處理;狀態(tài)轉(zhuǎn)移表更新模塊,用于對(duì)狀態(tài)轉(zhuǎn)移表進(jìn)行更新;回溯解碼模塊,用于實(shí)現(xiàn)回溯解碼得到解碼結(jié)果。由于采取了上述技術(shù)方案,本發(fā)明具有以下優(yōu)點(diǎn)(1)采用改進(jìn)的接收數(shù)據(jù)的反收縮處理方法后,可以利用DSP通用的 MAC (乘累加)指令來(lái)計(jì)算量度;同時(shí)省去了累加前的判斷和對(duì)接收數(shù)據(jù)的 符號(hào)更新,也無(wú)須進(jìn)行累加越界修正。(2) 收縮型支路量度計(jì)算采用并行單比特正負(fù)乘累加法實(shí)現(xiàn),大大簡(jiǎn)化了 計(jì)算方法,這種結(jié)構(gòu)也非常有利于DSP的指令并行性能的發(fā)揮,可以并行同 時(shí)計(jì)算一個(gè)狀態(tài)中兩條支路的量度,在保證解碼質(zhì)量的前提下,提高解碼速度, 比改進(jìn)前的量度計(jì)算效率提高了近100倍。(3) 上述解碼速度的提高并不需要增加硬件成本、功耗。
下面將結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明,附圖中 圖l是巻積編碼過(guò)程的網(wǎng)格圖;圖2是收縮率為2/3、收縮周期為8的收縮表示意圖;圖3所示為收縮型Viterbi解碼的執(zhí)行流程圖;圖4是CACS模塊的執(zhí)行流程圖;圖5是OMAP5910平臺(tái)的簡(jiǎn)易測(cè)試框圖;圖6是RCPC碼數(shù)據(jù)原始波形與被加性高斯白噪聲干擾后的波形截圖。
具體實(shí)施例方式
由于收縮型Viterbi算法主要是用于解RCPC碼的,也是目前效果最好的 對(duì)于長(zhǎng)度小于10的RCPC碼解碼算法。為了更好的理解Viterbi算法,先介紹 RCPC編碼的基本原理。RCPC碼是巻積編碼的一種。巻積碼的基本形式為(n, k, N),例如(2, 1, 3)碼,則表示輸入l比特?cái)?shù)據(jù),編碼輸出2比特,即編碼效率為1/2。編 碼器約束長(zhǎng)度為3,說(shuō)明編碼時(shí)輸入寄存器的長(zhǎng)度為3位,包括2個(gè)狀態(tài)位和 l個(gè)輸入位。描述上述巻積編碼的過(guò)程可以采用圖表的方式,叫網(wǎng)格圖,如圖 1所示。由于編碼器約束長(zhǎng)度為3,則編碼輸入寄存器包含2個(gè)狀態(tài)位和1個(gè) 輸入位,圖中共有SO、 Sl、 S2、 S3這四個(gè)狀態(tài)。圖中實(shí)線箭頭表示編碼輸入 為《r,虛線箭頭表示編碼輸入為'0';箭頭上的數(shù)字就是當(dāng)前編碼輸出。在 解碼時(shí)要用到這個(gè)網(wǎng)格圖。RCPC編碼分兩步,先對(duì)數(shù)據(jù)進(jìn)行上述的巻積編碼,然后根據(jù)一個(gè)收縮表 對(duì)巻積編碼結(jié)果有選擇地輸出。不同的收縮表可得到不同的編碼速率,如圖2 所示是一個(gè)收縮率為2/3、收縮周期為8的收縮表,意思是每輸入2個(gè)數(shù)據(jù)得 到3個(gè)編碼輸出,每輸入8個(gè)數(shù)據(jù)為一個(gè)周期。巻積編碼的結(jié)果按周期輸入收 縮表,收縮表值為l表示該編碼數(shù)據(jù)保留輸出,為0則舍棄。常規(guī)Viterbi解碼的基本原理是在每個(gè)時(shí)刻,將接收到的當(dāng)前數(shù)據(jù)與上 述網(wǎng)格圖中的當(dāng)前編碼輸出數(shù)據(jù)比較,計(jì)算二者間的碼距即支路量度;每個(gè)時(shí) 刻到達(dá)的每個(gè)狀態(tài)(共2^—1〗個(gè))都有兩條支路引出,分別計(jì)算兩條支路與接 收到的當(dāng)前值的量度,并取其中較小的支路量度做為幸存路徑保存;每個(gè)時(shí)刻 每個(gè)狀態(tài)的支路量度與這條路徑上前面所有的支路量度累加,得到路徑量度 值;同時(shí),每深入一級(jí)網(wǎng)格表要計(jì)算并更新狀態(tài)轉(zhuǎn)移表;經(jīng)過(guò)一個(gè)解碼延時(shí)(一 般是固定為N*6級(jí)的解碼深度)后,在網(wǎng)格表中就可得到一條量度值最小的 路徑,這條路哮就是對(duì)解碼的最佳估計(jì);最后通過(guò)回溯解碼即依據(jù)狀態(tài)轉(zhuǎn)移表 反向跟蹤找到相應(yīng)的編碼輸入,就可得到解碼輸出。本發(fā)明的收縮型Viterbi解碼,是在常規(guī)Viterbi解碼的基礎(chǔ)上加入了對(duì)接 收數(shù)據(jù)的反收縮處理,且支路量度的計(jì)算方式不同。本發(fā)明收縮型Viterbi解 碼可依次分為六個(gè)模塊初始化部分、改進(jìn)的接收數(shù)據(jù)反收縮處理、改進(jìn)的收 縮型支路量度計(jì)算單元、ACS處理、狀態(tài)轉(zhuǎn)移表更新、回溯解碼。這里首先 對(duì)要用到的符號(hào)進(jìn)行約定編碼器約束長(zhǎng)度為N、編碼效率為k/n、解碼深度 為M、接收序列長(zhǎng)度為L(zhǎng)。為了敘述的方便,均設(shè)定k-l (大多數(shù)實(shí)際應(yīng)用中 k=l),則編碼效率為1/n;每一級(jí)狀態(tài)數(shù)為2寧力也即2^力,解碼執(zhí)行流程 圖如圖3所示,下面將依次敘述。一、 初始化部分本部分對(duì)應(yīng)于圖3中的步驟S31、 S32。初始化主要包括兩個(gè)常數(shù)表格的 生成。(a) 計(jì)算生成解碼網(wǎng)格圖。也就是圖l所示的巻積碼網(wǎng)格圖,根據(jù)編碼器 編碼效率k/n、'約束長(zhǎng)度N和生成式G,預(yù)先計(jì)算所有可能的巻積編碼輸出序 列,并將輸出值為^的用、l'代替,并將之存于網(wǎng)格圖表中。解碼時(shí)要 用這個(gè)網(wǎng)格表中的序列與實(shí)際接收到的序列進(jìn)行量度(量度即碼距)計(jì)算。(b) 生成狀態(tài)轉(zhuǎn)移表的編碼器狀態(tài)檢索表。這張表用于在更新狀態(tài)轉(zhuǎn)移表 時(shí)查找當(dāng)前N-l位編碼器狀態(tài)。存儲(chǔ)的是分別在編碼輸入W和'r時(shí)的 N-l位編碼器狀態(tài)值,表大小為2^" *2。二、 改進(jìn)的接收數(shù)據(jù)的反收縮處理 本部分對(duì)應(yīng)于圖3中的步驟S33。由于數(shù)據(jù)經(jīng)過(guò)RCPC編碼后,其輸出按照收縮表已進(jìn)行了部分收縮(舍棄部分編碼數(shù)據(jù))操作,在解碼時(shí)必須恢復(fù)被 收縮數(shù)據(jù)的數(shù)據(jù)率,并且恢復(fù)位置要與編碼一致,才能正確解碼。本發(fā)明中,在接收端解碼之前要對(duì)接收到的數(shù)據(jù)進(jìn)行預(yù)處理(反收縮)的 原則是接收到數(shù)據(jù)為1時(shí)接收端取正值,為0時(shí)則取負(fù)值,具體絕對(duì)值為多 少依據(jù)方法差異有不同的定義。為了在保證解碼質(zhì)量前提下提高量度計(jì)算效 率,可定義正值取l,負(fù)值取-1。這種取值后的解碼質(zhì)量是經(jīng)過(guò)了反復(fù)測(cè)試的, 實(shí)際結(jié)果表明,與取其他大值的結(jié)果相比較,沒(méi)有帶來(lái)解碼誤比特率的影響。對(duì)于被收縮部分的數(shù)據(jù),則用補(bǔ)0來(lái)恢復(fù)。顯然即使補(bǔ)O也只能還原數(shù)據(jù) 率而不能恢復(fù)原來(lái)被收縮前的RCPC編碼數(shù)據(jù)。以上組成三類數(shù)據(jù)值輸入解碼器,這樣取值的最大好處在于,可以利用 DSP通用的MAC (乘累加)指令來(lái)計(jì)算量度;同時(shí)省去了累加前的判斷和對(duì) 接收數(shù)據(jù)的符號(hào)更新,也無(wú)須進(jìn)行累加越界修正。三、 改進(jìn)的收縮型支路量度計(jì)算單元本部分對(duì)應(yīng)于圖4中的步驟S341。收縮型支路量度計(jì)算作為最基本的處 理單元,需要頻繁調(diào)用。每完成一次解碼需要的單元執(zhí)行總數(shù)為!^2^"次。
如果待解碼的數(shù)據(jù)長(zhǎng)度l為1000個(gè)比特,而編碼器約束長(zhǎng)度n為5,則單元 計(jì)算的總次數(shù)是16000次。顯然,其執(zhí)行次數(shù)與狀態(tài)數(shù)2^"和l成正比,隨 n的增加而按指數(shù)增長(zhǎng)。本發(fā)明中,通過(guò)改進(jìn)收縮型支路量度的計(jì)算方式,可 以很大程度上提高其運(yùn)行效率,提高整個(gè)解碼速度。由于接收數(shù)據(jù)經(jīng)過(guò)前述的收縮預(yù)處理,其值有'正(1)'、'負(fù)(-1),和'o,三種可能,并且'o,的原值既可以是'r也可以是'-r ,而網(wǎng)格 圖中的編碼值只有'r和、r兩種,所以要有效計(jì)算兩者的量度(碼距) 是比較困難的。'通過(guò)實(shí)際測(cè)試,收縮型量度計(jì)算可以采用并行單比特正負(fù)乘累 加的方法來(lái)高效實(shí)現(xiàn)。圖i所示的網(wǎng)格圖中,每個(gè)狀態(tài)都有兩個(gè)引出支路,其 中一條是編碼輸入為'r的,約定為a支路;另一條是編碼輸入為'o'的, 約定為b支路;因此每級(jí)的每個(gè)狀態(tài)都要與當(dāng)前輸入數(shù)據(jù)進(jìn)行兩條分支的支路量度計(jì)算。對(duì)于編碼效率為1/n的接收數(shù)據(jù),則每解碼出1比特需要輸入n 比特當(dāng)前接收數(shù)據(jù)和n比特網(wǎng)格圖編碼值,以完成從1到n的并行單比特正負(fù) 乘累加。當(dāng)計(jì)算a支路時(shí),通過(guò)查網(wǎng)格圖表找到在當(dāng)前狀態(tài)下編碼輸入為'r時(shí) 的第i比特編碼值(只有"r禾n '-r兩種取值),然后,直接與經(jīng)過(guò)反收 縮處理的接收數(shù)據(jù)當(dāng)前狀態(tài)下的第i個(gè)比特進(jìn)行相加,得到一個(gè)加值。接著將 第i個(gè)加值作為累加值參與第2個(gè)比特計(jì)算,計(jì)算方式與第i比特相同,如此 直到計(jì)算到n比特為止,當(dāng)前狀態(tài)下a支路的量度計(jì)算就完成了。用同樣的方法計(jì)算b支路,即完成了一個(gè)狀態(tài)的支路量度計(jì)算。上述結(jié)構(gòu)非常有利于dsp的指令并行性能的發(fā)揮,可以并行同時(shí)計(jì)算a、 b兩條支路的量度。可以利用dsp通用的mac指令,兩條mac指令并行一 次可完成兩條支路的并行單比特正負(fù)乘累加,則當(dāng)編碼效率為1/n時(shí),完成一 個(gè)狀態(tài)中兩支路的收縮型量度計(jì)算只需n個(gè)時(shí)鐘周期,是改進(jìn)前計(jì)算效率的約 100倍。另外,支路量度的計(jì)算采用并行單比特正負(fù)乘累加的方式,可以有效地保證碼距分辨率動(dòng)態(tài)范圍,避免數(shù)據(jù)恢復(fù)時(shí)補(bǔ)o操作所帶來(lái)的解碼失誤,提高解碼速度。并且,由于接收數(shù)據(jù)的量化取值限定在士l范圍,從很大程度上簡(jiǎn)化 了改進(jìn)前的計(jì)算方式。四、acs處理
本部分對(duì)應(yīng)于圖4中的步驟S342。所謂ACS處理實(shí)際,就是完成量度累 加、兩兩比較、選擇存儲(chǔ)幸存量度的處理。ACS模塊實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,但它 跟收縮型支路量度計(jì)算單元一樣,也是最基本的處理單元,需要頻繁調(diào)用,其 執(zhí)行次數(shù)也是!^2^'"。每個(gè)狀態(tài)都有兩條支路量度分別與前一時(shí)刻對(duì)應(yīng)狀態(tài) 的幸存量度累加,得到當(dāng)前時(shí)刻當(dāng)前狀態(tài)的兩條路徑量度值。然后比較這兩條 量度值,保存具有較小量度的那條,這條保存的支路即是幸存支路。這樣就完 成了一個(gè)狀態(tài)的ACS處理?;贒SP平臺(tái)應(yīng)用時(shí),對(duì)于ACS模塊一般采用 匯編指令來(lái)實(shí)現(xiàn),以達(dá)到最少執(zhí)行時(shí)間的效果。具體的匯編實(shí)現(xiàn)方法各異,結(jié) 果各異,但均屬于公共技術(shù)范疇。五、 狀態(tài)轉(zhuǎn)移表的更新本部分對(duì)應(yīng)于圖4中的步驟S343、 S344。狀態(tài)轉(zhuǎn)移表在每個(gè)時(shí)刻每個(gè)狀 態(tài)都要進(jìn)行更新,如果每次都是通過(guò)計(jì)算來(lái)更新會(huì)很麻煩。本發(fā)明中,通過(guò)當(dāng) 前狀態(tài)和幸存支路所代表的編碼輸入值('0'或'l')以查表的方式,來(lái)更 新狀態(tài)轉(zhuǎn)移表。這樣實(shí)際就是以空間換時(shí)間,提高效率。其中,査表用到的常數(shù)表是在解碼初始化時(shí)就計(jì)算好了的,即編碼器狀態(tài)檢索表,它存儲(chǔ)的是分別在編碼輸入^o'和'r時(shí)的編碼器狀態(tài)值,表大小為2^'" *2。狀態(tài)轉(zhuǎn)移表大小為固定深入(W6)級(jí),每級(jí)有2^'"個(gè)狀態(tài)。存 入表中的是在當(dāng)前狀態(tài)下移入幸存的編碼輸入值的4位巻積編碼器狀態(tài)。在代碼實(shí)現(xiàn)過(guò)程中一般將第三、四、五這三個(gè)單元合為一個(gè)模塊(對(duì)應(yīng)于 圖3中的步驟S34),并且每次執(zhí)行2^"狀態(tài)的運(yùn)算即執(zhí)行2^'"次模塊,稱 為CACS模塊,采用DSP匯編指令實(shí)現(xiàn),具體流程如圖4。六、 回溯解碼本部分對(duì)應(yīng)于圖3中的步驟S36、 S37。編碼器從全O狀態(tài)開始,解碼時(shí) 從具有最佳量度的狀態(tài)回溯,在第1個(gè)解碼比特出來(lái)之前,會(huì)有1^*6級(jí)解碼 延時(shí)。Viterbi解碼從理論上說(shuō)1幀數(shù)據(jù)多大,則解碼深度也要多大,顯然會(huì) 付出很大的運(yùn)聳時(shí)間和存儲(chǔ)器開銷。實(shí)際應(yīng)用證明,當(dāng)解碼深度取編碼器約束 長(zhǎng)度N的4 6倍時(shí),即可滿足要求,高于此值對(duì)解碼的精度影響甚微,此處 取6。當(dāng)2^"" (N*6)大小的狀態(tài)轉(zhuǎn)移表固定深入(N*6)級(jí)后,則開始進(jìn)行 回溯解碼,以后只需每次取1次輸入數(shù)據(jù)進(jìn)行2^力狀態(tài)的量度計(jì)算、ACS處
理、更新狀態(tài)轉(zhuǎn)移表,就可解出一個(gè)比特?cái)?shù)據(jù)。第1個(gè)解碼數(shù)據(jù)就是第一個(gè)輸 入編碼器的數(shù)據(jù)?;厮莸倪^(guò)程中,通過(guò)找到具有最佳量度的狀態(tài)作為開始回溯點(diǎn)在狀態(tài)轉(zhuǎn)移表中固定(N*6)級(jí)的反方向路徑跟蹤,解出1比特?cái)?shù)據(jù),直到 全部解完?;谏鲜鲆恢亮母鱾€(gè)部分,可構(gòu)成一種收縮型Viterbi解碼系統(tǒng),其中 包括依次連接的初始化處理模塊、反收縮處理模塊、支路量度計(jì)算模塊、ACS 處理模塊、狀態(tài)轉(zhuǎn)移表更新模塊、以及回溯解碼模塊。其中,初始化處理模塊 用于對(duì)接收數(shù)據(jù)進(jìn)行初始化處理,以生成解碼網(wǎng)格圖和編碼器狀態(tài)檢索表;反 收縮處理模塊用于對(duì)所述初始化處理后的接收數(shù)據(jù)進(jìn)行反收縮處理,其中,當(dāng) 接收數(shù)據(jù)為1時(shí)接收端取正值,為0時(shí)則取負(fù)值,對(duì)于被收縮部分的數(shù)據(jù)則用 補(bǔ)O來(lái)恢復(fù),從而得到三類數(shù)據(jù)值;支路量度計(jì)算模塊中采用并行單比特正負(fù) 乘累加的方法,對(duì)所述反收縮處理后的接收數(shù)據(jù)進(jìn)行收縮型支路量度計(jì)算; ACS處理模塊用于對(duì)所述支路量度計(jì)算模塊的輸出結(jié)果進(jìn)行量度累加、兩兩 比較、選擇存儲(chǔ)幸存量度的處理,即ACS處理;狀態(tài)轉(zhuǎn)移表更新模塊用于對(duì) 狀態(tài)轉(zhuǎn)移表進(jìn)行更新;回溯解碼模塊用于實(shí)現(xiàn)回溯解碼得到解碼結(jié)果。為檢驗(yàn)上述收縮型Viterbi解碼方法的效果,如圖5所示,在TI公司的 CCS和OMAP5910軟硬件平臺(tái)上搭建了簡(jiǎn)易測(cè)試環(huán)境。相關(guān)測(cè)試主要是對(duì)解 碼速度和誤碼率這兩個(gè)指標(biāo)進(jìn)行驗(yàn)證。測(cè)試的思路是(1) 在編碼端,首先在DSP端生成塊大小為2000比特的隨機(jī)數(shù)據(jù),通過(guò) 編碼效率為1/3和收縮率為2/3的RCPC編碼后,得到4000比特編碼輸出數(shù) 據(jù)。再對(duì)編碼輸出數(shù)據(jù)進(jìn)行同樣大小的加性高斯白噪聲干擾,以模仿加性高斯 白噪聲(AWGN : Additive White Gaussian Noise)《言道。(2) 在解碼端,對(duì)已經(jīng)過(guò)加性高斯白噪聲干擾的信號(hào)直接進(jìn)行收縮Viterbi 解碼;最后對(duì)解碼結(jié)果計(jì)算其誤碼率,通過(guò)CCS的實(shí)時(shí)性分析工具得到解碼 時(shí)間。其中,AWGN是最基本的噪聲和干擾模型,無(wú)線通信系統(tǒng)中遇到的多數(shù)
噪聲和干擾都符合這個(gè)模型。我們通過(guò)MATLAB通信工具箱的內(nèi)置函數(shù)完 成2000點(diǎn)的隨+幾數(shù)據(jù)生成和對(duì)RCPC編碼后的4000點(diǎn)信號(hào)進(jìn)行加性高斯白噪 聲干擾;外部按鍵可以控制加性噪聲的能量。本次測(cè)試用到的SNR為8dB, RCPC碼數(shù)據(jù)波形與被加性高斯白噪聲干擾后的波形截圖,如圖6所示。圖上 半部分為RCPC碼數(shù)據(jù)波形,下半部分為經(jīng)過(guò)加性高斯白噪聲干擾后的波形。經(jīng)過(guò)測(cè)試,大塊經(jīng)過(guò)加性高斯白噪聲干擾的RCPC編碼數(shù)據(jù),通過(guò)收縮Viterbi解碼后,計(jì)算其誤碼率,也就是解碼誤比特?cái)?shù)與解碼輸出比特?cái)?shù)之比;其輸出數(shù)據(jù)誤碼率為O,誤比特總數(shù)為0。通過(guò)CCS環(huán)境中的代碼運(yùn)行的時(shí)鐘周期計(jì)數(shù)工具計(jì)算,采用DSP匯編編寫, 一個(gè)狀態(tài)的兩條收縮型支路量度計(jì)算采用MAC指令并行實(shí)現(xiàn),僅需要3個(gè)時(shí)鐘周期;完成2000比特解碼輸出需 要L^(N力-32ooo次收縮型支路量度計(jì)算。而改進(jìn)前的現(xiàn)有技術(shù)中,由于計(jì)算方式復(fù)雜,并且只能串行計(jì)算,完成一個(gè)狀態(tài)的兩條收縮型支路量度計(jì)算消耗 的時(shí)間近300個(gè)時(shí)鐘周期,對(duì)比可見,效率提高近100倍。
權(quán)利要求
1、一種收縮型Viterbi解碼方法,其特征在于,包括以下步驟(S1)對(duì)接收數(shù)據(jù)進(jìn)行初始化處理,以生成解碼網(wǎng)格圖和編碼器狀態(tài)檢索表;(S2)對(duì)所述初始化處理后的接收數(shù)據(jù)進(jìn)行反收縮處理,其中,當(dāng)接收數(shù)據(jù)為1時(shí)接收端取正值,為0時(shí)則取負(fù)值,對(duì)于被收縮部分的數(shù)據(jù)則用補(bǔ)0來(lái)恢復(fù),從而得到三類數(shù)據(jù)值;(S3)采用并行單比特正負(fù)乘累加的方法,對(duì)所述反收縮處理后的接收數(shù)據(jù)進(jìn)行收縮型支路量度計(jì)算;(S4)對(duì)所述步驟(S3)的結(jié)果進(jìn)行量度累加、兩兩比較、選擇存儲(chǔ)幸存量度的處理,即ACS處理;(S5)對(duì)狀態(tài)轉(zhuǎn)移表進(jìn)行更新;(S6)回溯解碼,得到解碼結(jié)果。
2、 根據(jù)權(quán)利要求l所述的收縮型Viterbi解碼方法,其特征在于,在所述 步驟(S1)中根據(jù)編碼器編碼效率k/n、約束長(zhǎng)度N和生成式G,預(yù)先計(jì)算所有可能的 巻積編碼輸出序列,將輸出值為'0'的用代替,并將之存于網(wǎng)格圖表 中,從而生成所述解碼網(wǎng)格圖;所述編碼器狀態(tài)檢索表存儲(chǔ)的是分別在編碼輸入W和時(shí)的N-l 位編碼器狀態(tài)值,表大小為2^'" *2。
3、 根據(jù)權(quán)利要求2所述的收縮型Viterbi解碼方法,其特征在于,在所述 步驟(S2)中當(dāng)接收到數(shù)據(jù)為l時(shí)接收端取l,為0時(shí)則取-l。
4、 根據(jù)權(quán)利要求3所述的收縮型Viterbi解碼方法,其特征在于,在所述 步驟(S3)中每個(gè)狀態(tài)都有兩個(gè)引出支路,其中一條是編碼輸入為的, 約定為A支路,另一條是編碼輸入為'0'的,約定為B支路,對(duì)于編碼效率 為1/n的接收數(shù)據(jù),則每解碼出1比特需要輸入n比特當(dāng)前接收數(shù)據(jù)和n比特 網(wǎng)格圖編碼值,以完成從1到n的并行單比特正負(fù)乘累加; 當(dāng)計(jì)算A支路時(shí),通過(guò)査網(wǎng)格圖表找到在當(dāng)前狀態(tài)下編碼輸入為時(shí) 的第1比特編碼值,然后直接與經(jīng)過(guò)反收縮處理的接收數(shù)據(jù)當(dāng)前狀態(tài)下的第1 個(gè)比特進(jìn)行相加,得到一個(gè)加值;接著將第1個(gè)加值作為累加值參與第2個(gè)比 特計(jì)算,計(jì)算方式與第l比特相同,如此直到計(jì)算到n比特為止;然后用同樣 的方法計(jì)算B支路,從而完成一個(gè)狀態(tài)的支路量度計(jì)算。
5、 根據(jù)權(quán)利要求4所述的收縮型Viterbi解碼方法,其特征在于,在所述 步驟(S4)中每個(gè)狀態(tài)有兩條支路量度分別與前一時(shí)刻對(duì)應(yīng)狀態(tài)的幸存量度累 加,得到當(dāng)前時(shí)刻當(dāng)前狀態(tài)的兩條路徑量度值;然后比較這兩條量度值,保存 具有較小量度的那條作為幸存支路,從而完成一個(gè)狀態(tài)的ACS處理。
6、 根據(jù)權(quán)利要求5所述的收縮型Viterbi解碼方法,其特征在于,在所述 步驟(S5)中通過(guò)當(dāng)前狀態(tài)和幸存支路所代表的編碼輸入值<0'或,以 查表的方式來(lái)更新所述狀態(tài)轉(zhuǎn)移表;所述狀態(tài)轉(zhuǎn)移表大小為固定深入(N*6) 級(jí),每級(jí)有2^"個(gè)狀態(tài);存入表中的是在當(dāng)前狀態(tài)下移入幸存的編碼輸入值 的4位巻積編碼器狀態(tài)。
7、 根據(jù)權(quán)利要求6所述的收縮型Viterbi解碼方法,其特征在于,在所述 步驟(S6)中解碼深度為編碼器約束長(zhǎng)度N的4 6倍。
8、 根據(jù)權(quán)利要求7所述的收縮型Viterbi解碼方法,其特征在于,在所述 步驟(S6)中解碼深度為編碼器約束長(zhǎng)度N的6倍,當(dāng)2^"" (N*6)大小的 狀態(tài)轉(zhuǎn)移表固定深入(N*6)級(jí)后,則開始進(jìn)行回溯解碼。
9、 一種收縮型Viterbi解碼系統(tǒng),其特征在于,包括 初始化處理模塊,用于對(duì)接收數(shù)據(jù)進(jìn)行初始化處理,以生成解碼網(wǎng)格圖和編碼器狀態(tài)檢索表;反收縮處理模塊,用于對(duì)所述初始化處理后的接收數(shù)據(jù)迸行反收縮處理, 其中,當(dāng)接收數(shù)據(jù)為1時(shí)接收端取正值,為0時(shí)則取負(fù)值,對(duì)于被收縮部分的 數(shù)據(jù)則用補(bǔ)0來(lái)恢復(fù),從而得到三類數(shù)據(jù)值;支路量度i+算模塊,其中采用并行單比特正負(fù)乘累加的方法,對(duì)所述反收 縮處理后的接收數(shù)據(jù)進(jìn)行收縮型支路量度計(jì)算;ACS處理模塊,用于對(duì)所述支路量度計(jì)算模塊的輸出結(jié)果進(jìn)行量度累加、 兩兩比較、選擇存儲(chǔ)幸存量度的處理,即ACS處理;狀態(tài)轉(zhuǎn)移表更新模塊,用于對(duì)狀態(tài)轉(zhuǎn)移表進(jìn)行更新;回溯解碼模塊,用于實(shí)現(xiàn)回溯解碼得到解碼結(jié)果。
全文摘要
本發(fā)明涉及通信系統(tǒng)中的編解碼技術(shù),特別是一種基于DSP的收縮型Viterbi解碼系統(tǒng)和方法。針對(duì)現(xiàn)有收縮型Viterbi解碼方法中存在的解碼耗時(shí)長(zhǎng)、難以滿足實(shí)時(shí)性要求的問(wèn)題,本發(fā)明的方法中,在對(duì)所述初始化處理后的接收數(shù)據(jù)進(jìn)行反收縮處理時(shí),當(dāng)接收數(shù)據(jù)為1時(shí)接收端取正值,為0時(shí)則取負(fù)值,對(duì)于被收縮部分的數(shù)據(jù)則用補(bǔ)0來(lái)恢復(fù),從而得到三類數(shù)據(jù)值;然后采用并行單比特正負(fù)乘累加的方法,對(duì)所述反收縮處理后的接收數(shù)據(jù)進(jìn)行收縮型支路量度計(jì)算;再通過(guò)ACS處理、狀態(tài)轉(zhuǎn)移表進(jìn)行更新、回溯解碼等步驟,即可得到解碼結(jié)果。本發(fā)明采用更簡(jiǎn)化的反收縮的處理和改進(jìn)的收縮型支路量度計(jì)算方法,在不需要增加硬件成本和功耗的前提下,大幅提高了基于DSP平臺(tái)應(yīng)用的解碼速度。
文檔編號(hào)H03M13/41GK101399555SQ20071012365
公開日2009年4月1日 申請(qǐng)日期2007年9月28日 優(yōu)先權(quán)日2007年9月28日
發(fā)明者楊朝俊 申請(qǐng)人:深圳市好易通科技有限公司