葉新生,劉國(guó)忠
(山西科泰航天防務(wù)技術(shù)有限公司,山西 太原 030006)
信道編碼是無(wú)線通信系統(tǒng)中的重要組成部分[1],而Turbo乘積碼不僅具有良好的糾錯(cuò)性能,而且其編碼算法簡(jiǎn)單,使用的資源較少,較為適合遙測(cè)領(lǐng)域的應(yīng)用環(huán)境[2]。
信道編碼技術(shù)會(huì)在遙測(cè)數(shù)據(jù)中增加糾錯(cuò)碼,利用糾錯(cuò)碼可對(duì)傳輸過(guò)程中的錯(cuò)誤位進(jìn)行糾錯(cuò),可有效地降低遙測(cè)數(shù)據(jù)誤碼率。
使用信道編碼可在不加大發(fā)射功率、不增加接收天線尺寸的情況下獲得更遠(yuǎn)的遙測(cè)距離。
信道編碼雖好,但需要遙測(cè)發(fā)射機(jī)與遙測(cè)接收機(jī)匹配使用,以及遙測(cè)發(fā)射機(jī)在發(fā)射數(shù)據(jù)時(shí)需要進(jìn)行信道編碼,遙測(cè)接收機(jī)在接收數(shù)據(jù)時(shí)需要進(jìn)行信道解碼。
遙測(cè)接收機(jī)一般屬于接收設(shè)備,其更新?lián)Q代的速度遠(yuǎn)不及遙測(cè)發(fā)射機(jī)。本文擬基于VC++研發(fā)一種TPC解碼算法,基于算法可構(gòu)建事后TPC解碼軟件,也可構(gòu)建實(shí)時(shí)解碼軟件。通過(guò)這些方式可使原本不具備TPC解碼的遙測(cè)接收站實(shí)現(xiàn)TPC解碼能力,且可在不增加任何預(yù)算的情況下提高原遙測(cè)站的接收能力。
TPC為分組乘積碼,常用的結(jié)構(gòu)為二維結(jié)構(gòu),分別進(jìn)行縱向和橫向編碼。利用此種結(jié)構(gòu),可在2個(gè)維度上進(jìn)行糾錯(cuò),相比1維糾錯(cuò)碼可極大地提高糾錯(cuò)能力。
Turbo乘積碼是由兩個(gè)或兩個(gè)以上的短分組碼C(n,k,δ)構(gòu)成,其中n,k,δ分別表示分組碼的長(zhǎng)度、信息長(zhǎng)度和最小漢明距離[3-4]。
本文使用目前應(yīng)用最為廣泛的二維乘積碼,采用(64,57)×(64,57)擴(kuò)展?jié)h明乘積碼[4],即在漢明碼的基礎(chǔ)上增加一位奇偶校驗(yàn)位,該編碼可糾錯(cuò)一位,發(fā)現(xiàn)二位錯(cuò)誤,兩個(gè)維度均使用相同的分組碼。二維乘積碼的結(jié)構(gòu)如圖1所示。
圖1 二維乘積碼的結(jié)構(gòu)
在進(jìn)行TPC編碼時(shí),先對(duì)信息位逐行編碼,生成57×64的行編碼矩陣。然后對(duì)行編碼矩陣進(jìn)行逐列編碼,最終生成64×64的編碼矩陣。
在完成編碼后,輸出時(shí)一個(gè)編碼塊為一幀,每幀前面添加4字節(jié)同步字1ACFFC1D,編碼塊輸出時(shí)按先行后列順序輸出。
TPC解碼算法有2類,一類為軟解碼,一類為硬解碼。
其中軟解碼常用算法為ChaseII算法,其基本原理為將位同步輸出的軟信息(判決前信息)向量,作為TPC解碼輸入,根據(jù)信息的幅值,選取最不可靠的N位(一般N=2),形成錯(cuò)誤樣本集合,從錯(cuò)誤樣本集合中找出與接收向量歐氏距離最小的子碼為判決子碼,同時(shí)將距離次小的子碼為候選子碼。同時(shí)利用外信息向量記錄各位的軟判決可靠度,進(jìn)行迭代。經(jīng)過(guò)多輪次(一般3次即可)迭代后完成解碼[5-6]。
硬解碼使用判決后的信息,利用漢明糾錯(cuò)算法直接進(jìn)行糾錯(cuò),根據(jù)擴(kuò)展?jié)h明碼可以發(fā)現(xiàn)2位錯(cuò)位糾錯(cuò)1位的特性。當(dāng)發(fā)現(xiàn)2位錯(cuò)位時(shí),可不進(jìn)行糾錯(cuò),而是等下一輪次再行糾錯(cuò),可在一定程度上提高糾錯(cuò)性能。
相對(duì)來(lái)說(shuō)軟解碼要比硬解碼具備更好的性能表現(xiàn)[7],但是軟解碼需要更多的信息。如在接收機(jī)內(nèi)部實(shí)現(xiàn),可以使用軟解碼信息。本文是在接收機(jī)外部實(shí)現(xiàn),接收機(jī)一般只輸出判決后的信息,因此無(wú)法使用軟解碼算法,只能使用硬解碼算法實(shí)現(xiàn)。
硬解碼算法在FPGA中實(shí)現(xiàn)時(shí),一般使用邏輯電路實(shí)現(xiàn)[7];在VC上實(shí)現(xiàn)時(shí),為加快軟件的運(yùn)行速度,本文采用查表法以加快解碼速度。在計(jì)算前提前計(jì)算好每一位置對(duì)應(yīng)的校驗(yàn)值數(shù)組(X1~X57),在解碼時(shí)對(duì)每一位進(jìn)行歷遍,當(dāng)該位為1時(shí)將該位置對(duì)應(yīng)的校驗(yàn)值與校驗(yàn)位進(jìn)行異或計(jì)算,具體原理見圖2所示。
圖2 查表法譯碼原理
當(dāng)最后計(jì)算值為0則校驗(yàn)正確,如計(jì)算值不為0則說(shuō)明數(shù)據(jù)有錯(cuò)位。
尋找錯(cuò)位位置方法的原理是,當(dāng)數(shù)據(jù)無(wú)錯(cuò)位時(shí)其校驗(yàn)和應(yīng)為0;當(dāng)某位出現(xiàn)錯(cuò)誤時(shí),整個(gè)校驗(yàn)和必然會(huì)多異或了一次該位對(duì)應(yīng)的校驗(yàn)值,下面推導(dǎo)該結(jié)論。
對(duì)數(shù)據(jù)位進(jìn)行校驗(yàn)計(jì)算的公式如下,其中求和符號(hào)實(shí)際中為模二相加(同異或),式中ai為數(shù)據(jù)位(取值為0或1)。
(1)
又,基于異或的原理有:
1=0⊕1,0=1⊕1
.
從上式可以看出,任何數(shù)(0或1)取反(誤碼相當(dāng)于,原數(shù)據(jù)位取反),均可看為其原值與1異或。
結(jié)合式(1),可以得出如下結(jié)論,當(dāng)某位am出現(xiàn)錯(cuò)位時(shí),可以將表達(dá)式寫成如下形式:
(2)
又根據(jù)原編碼信息,有:
(3)
所以有:
y=Xm
.
(4)
從中可以看出,根據(jù)式(1)對(duì)編碼數(shù)據(jù)進(jìn)行計(jì)算,其計(jì)算結(jié)果非零時(shí),其對(duì)應(yīng)值為某位對(duì)應(yīng)的校驗(yàn)值。因此在實(shí)際中,可以根據(jù)校驗(yàn)計(jì)算結(jié)果反查是哪位出錯(cuò),即在{X1~X57}集合中查找Xm,當(dāng)查到時(shí)其下標(biāo)即為錯(cuò)誤位的位置。
上節(jié)給出了查表法實(shí)現(xiàn)TPC譯碼的基本原理,下面根據(jù)原理進(jìn)行具體設(shè)計(jì)實(shí)現(xiàn)。
實(shí)際數(shù)據(jù)傳輸時(shí),發(fā)射機(jī)會(huì)在數(shù)據(jù)幀中間插入同步字節(jié),接收機(jī)利用同步字節(jié)識(shí)別數(shù)據(jù)幀,TPC解碼程序同樣要利用同步字節(jié)識(shí)別TPC數(shù)據(jù)幀,在識(shí)別完成后,按行列依次進(jìn)行糾錯(cuò)處理,處理流程如圖3所示。整個(gè)糾錯(cuò)流程包括行糾錯(cuò)及列糾錯(cuò),整個(gè)糾錯(cuò)過(guò)程包括3輪,分別進(jìn)行行糾錯(cuò)和列糾錯(cuò)。在糾錯(cuò)時(shí)如果確認(rèn)是一位錯(cuò)則修正,若是兩位錯(cuò)或無(wú)錯(cuò)位則不進(jìn)行任何處理。
在糾錯(cuò)時(shí),需要按位取出數(shù)據(jù)進(jìn)行處理,為便于取數(shù)據(jù)位,使用了一個(gè)位模板數(shù)組。
m[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
在實(shí)際運(yùn)行時(shí),需要對(duì)字節(jié)中不同數(shù)據(jù)位進(jìn)行判定操作,取位模板數(shù)組中不同數(shù)進(jìn)行判定與操作,即可取出對(duì)應(yīng)位信息,具體見公式(5)所示。
a=x∧m[i]
.
(5)
因此測(cè)試某位是否為1時(shí),只要按公式(5)計(jì)算,取其結(jié)果,當(dāng)結(jié)果非0時(shí),即可判定該位為1,否則為0,使用該方法可實(shí)現(xiàn)數(shù)據(jù)位的快速判定。
本文使用的是擴(kuò)展型漢明碼,即在編碼時(shí),除漢明糾錯(cuò)碼外,還有一位表示全部的奇偶校驗(yàn),因此可以利用該特性實(shí)現(xiàn)發(fā)現(xiàn)2位錯(cuò)的能力,其判定方式可參考表1。
圖3 數(shù)據(jù)解碼流程
序號(hào)漢明糾錯(cuò)奇偶校驗(yàn)判定1111位錯(cuò)2102位錯(cuò)301奇偶位錯(cuò)400無(wú)錯(cuò)位
從表1可以看出綜合漢明糾錯(cuò)信息和奇偶校驗(yàn)信息,可實(shí)現(xiàn)1位錯(cuò)的判定及2位錯(cuò)的發(fā)現(xiàn),在實(shí)現(xiàn)時(shí)僅當(dāng)判定位1位錯(cuò)時(shí)進(jìn)行糾錯(cuò)。通過(guò)該方式可有效避免錯(cuò)誤糾錯(cuò)。
在實(shí)際實(shí)現(xiàn)時(shí)還需要考慮行列數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),本文采用二維數(shù)組來(lái)進(jìn)行數(shù)據(jù)幀的存儲(chǔ)。
因TPC數(shù)據(jù)幀結(jié)構(gòu)固定,因此實(shí)現(xiàn)時(shí)采用64行8列的數(shù)組進(jìn)行數(shù)據(jù)存儲(chǔ),具體如下:
char dat[64][8];
圖4 數(shù)據(jù)存儲(chǔ)方式
在完成TPC幀同步后,將幀數(shù)據(jù)按圖4方式整理成二維數(shù)組,需要注意的是因TPC數(shù)據(jù)每行有57位,因此TPC幀中的數(shù)據(jù)并非按字節(jié)對(duì)齊。在完成處理后還需要重新進(jìn)行對(duì)齊處理,如果TPC幀中數(shù)據(jù)本身并非按字節(jié)對(duì)齊則還要重新進(jìn)行同步處理,從其中還原出字節(jié)數(shù)據(jù)。
在糾錯(cuò)過(guò)程中,先進(jìn)行逐行糾錯(cuò)處理,然后進(jìn)行逐列糾錯(cuò)處理,總共進(jìn)行3輪次行列糾錯(cuò)即可。
利用Visual Studio平臺(tái),并基于VC++實(shí)現(xiàn)了TPC信道解碼軟件,軟件界面如圖5所示。
該軟件不僅完成了TPC信道解碼,還完成了解碼后數(shù)據(jù)幀的提取。為實(shí)現(xiàn)數(shù)據(jù)幀提取,需要設(shè)置數(shù)據(jù)幀頭、幀頭長(zhǎng)度、反碼副幀長(zhǎng)、錯(cuò)誤容量等信息。
圖5 TPC信道解碼軟件界面
為測(cè)試其性能,利用具備TPC編碼功能的發(fā)射機(jī),發(fā)射仿真數(shù)據(jù)以進(jìn)行解析驗(yàn)證,從驗(yàn)證情況看該TPC解碼算法運(yùn)行正常,從圖6可以看出,數(shù)據(jù)糾錯(cuò)正常。
打開解析完的數(shù)據(jù)幀可以看到EB90前面的幀計(jì)數(shù)連續(xù),數(shù)據(jù)幀無(wú)丟失。
經(jīng)過(guò)驗(yàn)證后,該軟件已經(jīng)在實(shí)際遙測(cè)活動(dòng)中得到推廣應(yīng)用,實(shí)際使用反饋情況良好,通過(guò)該軟件使原先不具備TPC解碼能力的遙測(cè)站,具備接收對(duì)TPC遙測(cè)幀的解析能力,還可利用TPC糾錯(cuò)算法提高數(shù)據(jù)質(zhì)量。
圖6 TPC信道解碼軟件
圖7 TPC信道解碼數(shù)據(jù)
本文利用VC++平臺(tái),實(shí)現(xiàn)了TPC信道編解碼,可在不增加預(yù)算的情況下擴(kuò)展原有遙測(cè)設(shè)備的功能,提高其接收性能,已在相關(guān)實(shí)際項(xiàng)目中得以應(yīng)用,并取得良好的實(shí)用效果。
并且實(shí)現(xiàn)時(shí)考慮了實(shí)時(shí)應(yīng)用和事后數(shù)據(jù)處理2種情況,使用簡(jiǎn)便且可以廣泛應(yīng)用,可在各遙測(cè)設(shè)備中推廣使用。
但是為適應(yīng)目前遙測(cè)設(shè)備,目前僅僅實(shí)現(xiàn)了TPC的硬解碼,為進(jìn)一步提升性能,后續(xù)考慮增加軟解碼能力,但軟解碼如要推行需要遙測(cè)設(shè)備進(jìn)行相應(yīng)改進(jìn),使其輸出可供軟解碼的額外信息。
信道編解碼,通過(guò)在遙測(cè)數(shù)據(jù)中增加校驗(yàn)信息,以實(shí)現(xiàn)信息糾錯(cuò),從而獲得編碼增益,是無(wú)線通信領(lǐng)域的一個(gè)重要技術(shù)手段,如何通過(guò)后期改造使早期遙測(cè)設(shè)備提升能力,也是一個(gè)重要課題,本文提出的思路可在此領(lǐng)域進(jìn)行推廣應(yīng)用。