艾 波 邢達(dá)波
漢明碼在試飛測(cè)試中的應(yīng)用
艾 波 邢達(dá)波
針對(duì)試飛測(cè)試數(shù)據(jù)傳輸中的誤碼問(wèn)題,提出了基于糾錯(cuò)碼和交織技術(shù)的試飛測(cè)試數(shù)據(jù)抗誤碼方法。介紹了漢明碼和交織技術(shù)原理,在ISE中設(shè)計(jì)實(shí)現(xiàn)了采用(7,4)漢明碼和7行7列交織器的16比特糾錯(cuò)系統(tǒng),并在ModelSim中進(jìn)行功能仿真,仿真結(jié)果表明能并行對(duì)4組連續(xù)7比特誤碼進(jìn)行糾錯(cuò)。
試飛測(cè)試是在真實(shí)飛行條件下獲取航空設(shè)備性能參數(shù)的關(guān)鍵環(huán)節(jié)。正確有效的測(cè)試數(shù)據(jù)不僅有利于分析航空設(shè)備的性能狀態(tài),縮短研發(fā)周期,也為飛行監(jiān)控提供客觀依據(jù),有利于確保飛行安全。隨著通信技術(shù)的發(fā)展,數(shù)字化、編碼及FPGA技術(shù)在試飛測(cè)試中得到廣泛地應(yīng)用。然而,實(shí)際飛行環(huán)境復(fù)雜多變,量化、編碼后的測(cè)試數(shù)據(jù)在傳輸時(shí)會(huì)受到隨機(jī)噪聲、瞬變交流電、多徑效應(yīng)、強(qiáng)電磁干擾影響等而產(chǎn)生誤碼。若誤碼出現(xiàn)在數(shù)據(jù)的高位上,會(huì)造成極大的數(shù)據(jù)誤差,不利于試飛研究和飛行安全。
為解決試飛測(cè)試中的誤碼問(wèn)題,先分析試飛測(cè)試數(shù)據(jù)錯(cuò)誤類型,提出基于糾錯(cuò)碼和交織技術(shù)的數(shù)據(jù)抗誤碼方法,然后介紹漢明碼及交織技術(shù)原理。最后,在ISE中設(shè)計(jì)實(shí)現(xiàn)了采用(7,4)漢明碼和7行7列交織器的16比特糾錯(cuò)系統(tǒng),并在ModelSim中進(jìn)行功能仿真。
數(shù)據(jù)在傳輸時(shí)有三種錯(cuò)誤類型,即隨機(jī)錯(cuò)誤、突發(fā)錯(cuò)誤和混合錯(cuò)誤。隨機(jī)錯(cuò)誤即數(shù)據(jù)誤碼零散隨機(jī)出現(xiàn),并不是連續(xù)的。突發(fā)錯(cuò)誤即數(shù)據(jù)誤碼是連續(xù)出現(xiàn)的,通常一個(gè)突發(fā)錯(cuò)誤表現(xiàn)為首尾碼元錯(cuò)誤、且中間碼元誤碼較多?;旌襄e(cuò)誤即是隨機(jī)錯(cuò)誤和突發(fā)錯(cuò)誤的組合。在飛行試驗(yàn)中,數(shù)據(jù)傳輸環(huán)境比較復(fù)雜,測(cè)試數(shù)據(jù)在遙測(cè)傳輸時(shí)會(huì)受到多徑效應(yīng)、碼間干擾等影響而產(chǎn)生隨機(jī)錯(cuò)誤。飛機(jī)交流發(fā)電機(jī)產(chǎn)生的電磁場(chǎng)及遙測(cè)天線的輻射場(chǎng)也會(huì)影響FPGA器件邏輯狀態(tài),產(chǎn)生突發(fā)錯(cuò)誤,造成數(shù)據(jù)連續(xù)誤碼。通常糾錯(cuò)碼用于對(duì)隨機(jī)誤碼進(jìn)行檢錯(cuò)與糾錯(cuò),而對(duì)連續(xù)多個(gè)誤碼的檢錯(cuò)與糾錯(cuò)性能極差。為解決連續(xù)誤碼糾錯(cuò)問(wèn)題,采用糾錯(cuò)碼和交織技術(shù)相結(jié)合的方案進(jìn)行數(shù)據(jù)抗誤碼設(shè)計(jì),通過(guò)交織、解交織將成串誤碼分散化為隨機(jī)誤碼,再采用糾錯(cuò)碼進(jìn)行糾錯(cuò)。
漢明碼糾錯(cuò)原理簡(jiǎn)介
設(shè)原信息序列長(zhǎng)度為K bit,冗余碼元長(zhǎng)度為R bit,則糾錯(cuò)碼碼字長(zhǎng)度為N=K+R bit。若該糾錯(cuò)碼能夠糾正1個(gè)誤碼碼元,則N、K和R應(yīng)滿足下式(1):
這是因?yàn)樾畔⑿蛄泻腿哂啻a元都可能發(fā)生誤碼,而R bit的冗余碼元必須要能辨別哪一位出錯(cuò),且還要能識(shí)別沒(méi)有出錯(cuò)的狀態(tài)。當(dāng)(1)式中不等式取等號(hào)時(shí),該糾錯(cuò)碼就是漢明碼,它是能糾正單個(gè)誤碼碼元的線性分組碼,亦稱為(N,K)線性分組碼。漢明碼編碼和譯碼比較簡(jiǎn)單、硬件實(shí)現(xiàn)容易,且具有抗干擾能力強(qiáng)、資源消耗少等特點(diǎn),在通信領(lǐng)域和數(shù)據(jù)存儲(chǔ)中應(yīng)用十分廣泛。
(N,K)線性分組碼編碼的本質(zhì)就是在n維線性空間中找出K個(gè)長(zhǎng)度為N的線性無(wú)關(guān)的矢量g0,g1,…gK-1,使得每個(gè)編碼碼字C都能表示成這K個(gè)矢量的線性組合,如下式(2)矩陣形式所示。
其中,M=[mK-1,mK-2,…,m0]是原信息序列,mi∈{0,1},i=0,1…k-1。G稱為生成矩陣,它是由線性無(wú)關(guān)的矢量g0,g1,…gK-1組成的K×N矩陣。生成矩陣確定后,通過(guò)(2)式可求出漢明碼字C,實(shí)現(xiàn)漢明編碼。漢明碼字C中的信息序列和冗余碼元構(gòu)成了一種校驗(yàn)關(guān)系。
每一個(gè)生成矩陣G都對(duì)應(yīng)一個(gè)校驗(yàn)矩陣H,使得G×HT=0。在二進(jìn)制數(shù)域中,若生成矩陣G=[IK,P],則校驗(yàn)矩陣H滿足下式(3):
其中,P為K×R矩陣,PT為P轉(zhuǎn)置矩陣,IK為K階單位矩陣,IR為R階單位矩陣。
若接收碼字和發(fā)送碼字分別為R、C,其差為E=R-C=[e6,e5,e4,e3,e2,e1,e0],由伴隨式定義有:
若發(fā)送碼字C在傳輸過(guò)程中有誤碼,則接收碼字R的信息序列與冗余碼元不再滿足原校驗(yàn)關(guān)系。可以根據(jù)S是否為0來(lái)判斷C在傳輸過(guò)程中是否有誤碼:若S為0,C在傳輸過(guò)程中沒(méi)有誤碼;若S不為0,C在傳輸過(guò)程中有誤碼。當(dāng)C中只有一個(gè)碼元出現(xiàn)誤碼時(shí),S在H中的位置與C中出現(xiàn)誤碼的位置一一對(duì)應(yīng),從而能確定誤碼位置、實(shí)現(xiàn)檢錯(cuò),再通過(guò)取反操作實(shí)現(xiàn)糾錯(cuò);當(dāng)C中有多個(gè)碼元出現(xiàn)誤碼時(shí),不能正確地檢錯(cuò)。
交織技術(shù)原理簡(jiǎn)介
交織器與解交織器是成對(duì)出現(xiàn)的,交織器的作用是將數(shù)據(jù)序列按一定規(guī)律重新排列輸出,解交織器的作用是將接收數(shù)據(jù)恢復(fù)為交織前的順序,它是交織的逆操作。常見(jiàn)的交織器有隨機(jī)交織器、規(guī)則交織器、偽隨機(jī)交織器這三種類型。隨機(jī)交織器和偽隨機(jī)交織器性能較好,但硬件實(shí)現(xiàn)復(fù)雜度高,而規(guī)則交織器硬件實(shí)現(xiàn)容易,在工程應(yīng)用中比較廣泛。
行列交織器是規(guī)則交織器中比較常見(jiàn)的一種,也最容易實(shí)現(xiàn)。以一個(gè)4行4列的行列交織器為例,其數(shù)據(jù)存取結(jié)構(gòu)如下圖1所示。
該交織過(guò)程可概括為兩種操作:按行寫(xiě)入和按列讀出。交織器輸入數(shù)據(jù)的順序?yàn)椋海鸻1,a2,a3,a4,b1,b2,b3,b4, c1,c2,c3,c4,d1,d2,d3,d4},交織器輸出數(shù)據(jù)的順序?yàn)椋海鸻1,b1,c1,d1,a2,b2,c2,d2,a3,b3,c3,d3,a4,b4,c4,d4}。從而實(shí)現(xiàn)數(shù)據(jù)順序重新排列。解交織器的功能與交織器相反,它是交織的逆操作。
圖1 4行4列交織器數(shù)據(jù)存取結(jié)構(gòu)
在信道糾錯(cuò)系統(tǒng)中,采用交織器和解交織器的目的是將突發(fā)錯(cuò)誤造成的成串誤碼分散開(kāi),化為隨機(jī)誤碼,以便信道譯碼器進(jìn)行糾錯(cuò)。假設(shè)上述交織器的輸出數(shù)據(jù)中a2,b2,c2,d2連續(xù)4個(gè)碼元都出錯(cuò),經(jīng)過(guò)解交織器后,這4個(gè)誤碼碼元被分散到{a1,a2,a3,a4},{b1,b2,b3,b4},{c1,c2,c3,c4},{d1,d2,d3,d4}四組數(shù)據(jù)中,且誤碼碼元a2,b2,c2,d2兩兩之間至少隔3個(gè)碼元。若信道譯碼器的輸入數(shù)據(jù)寬度為4比特,且能糾正1個(gè)誤碼碼元,則a2,b2,c2,d2將在4次譯碼中被糾正,從而保證數(shù)據(jù)的正確性。
從交織和解交織原理可知,若信道糾錯(cuò)系統(tǒng)采用m行n列的行列交織器和輸入數(shù)據(jù)寬度為Win的信道譯碼器,則能完全糾錯(cuò)的必要條件是Win≤n,且最大連續(xù)誤碼數(shù)Lmaxe≤m。因此,設(shè)計(jì)交織器和解交織器時(shí),m和n的選擇需要考慮信道譯碼器的輸入格式和數(shù)據(jù)傳輸信道的實(shí)際情況。
在Xilinx公司ISE軟件中采用Verilog編程語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)了一種最大輸入數(shù)據(jù)位寬為16比特的糾錯(cuò)系統(tǒng)。考慮試飛數(shù)據(jù)的多樣性,該系統(tǒng)支持的輸入數(shù)據(jù)位寬為1到16比特,它由四個(gè)相同的處理單元組成,各處理單元分別讀取輸入數(shù)據(jù)的不同4位并行處理。
各處理單元工作情況與輸入數(shù)據(jù)位寬有關(guān)。設(shè)輸入數(shù)據(jù)為Data_I,其位寬為Win,若Win取1、2、3、4,僅第一個(gè)處理單元工作,其輸入數(shù)據(jù)為Data_I[Win:1];若Win取5、6、7、8,第一和第二個(gè)處理單元工作,其輸入數(shù)據(jù)分別為Data_I[4:1]和Data_I[Win:5];若Win取9、10、11、12,第一、第二和第三個(gè)處理單元工作,其輸入數(shù)據(jù)分別為Data_I[4:1]、Data_I[8:5]和Data_I[Win:9];若Win取13、14、15、16,四個(gè)處理單元都工作,其輸入數(shù)據(jù)分別為Data_I[4:1]、Data_I[8:5]、Data_I[12:9]和Data_I[Win:13]。若Win不是4的倍數(shù),則對(duì)當(dāng)前工作的最后一個(gè)處理單元輸入數(shù)據(jù)高位補(bǔ)0,使其輸入數(shù)據(jù)為4比特,最后進(jìn)行數(shù)據(jù)還原時(shí),再剔除掉填充的0。
(7,4)漢明碼編譯碼簡(jiǎn)單,輸入位寬為4比特,輸出位寬為7比特,對(duì)應(yīng)行列交織器和解交織器容易實(shí)現(xiàn)。因此,每個(gè)處理單元都采用(7,4)漢明碼和7行7列的交織器與解交織器。每個(gè)處理單元的結(jié)構(gòu)見(jiàn)下圖2。
對(duì)于(7,4)漢明碼而言,冗余碼元長(zhǎng)度R=3,編碼碼長(zhǎng)N=7,信息序列長(zhǎng)度K=4。校驗(yàn)因子S與誤碼位置關(guān)系見(jiàn)下表1。
表1 校驗(yàn)因子S與誤碼位置關(guān)系
從而校驗(yàn)矩陣H和生成矩陣G分別為:
圖2 采用(7,4)漢明碼和交織技術(shù)的數(shù)據(jù)處理單元
圖3 系統(tǒng)功能仿真結(jié)果
按照(2)式則可得該(7,4)漢明碼的全部編碼碼字C。
在發(fā)送端,根據(jù)輸入數(shù)據(jù)位寬值提取其不同位數(shù)據(jù),分別輸入至各處理單元。在各處理單元中,測(cè)試數(shù)據(jù)以4比特(不足4比特的高位補(bǔ)0)格式輸入到漢明編碼器,輸出的7比特漢明碼字經(jīng)過(guò)7行7列交織器后,以7比特格式在信道中傳輸。在接收端,接收的7比特?cái)?shù)據(jù)先進(jìn)行7行7列解交織,再進(jìn)行漢明譯碼,輸出為4比特的測(cè)試數(shù)據(jù)。再對(duì)當(dāng)前工作的最后一個(gè)處理單元的輸出數(shù)據(jù)進(jìn)行剔0操作,然后按序合并各處理單元的輸出數(shù)據(jù),即得到正確完整的發(fā)送數(shù)據(jù)。
交織器和解交織器均為7行7列存取結(jié)構(gòu),數(shù)據(jù)緩存均采用內(nèi)部存儲(chǔ)器實(shí)現(xiàn),在同一時(shí)鐘下用計(jì)數(shù)器控制數(shù)據(jù)緩存的讀寫(xiě)操作。此外,由于試飛數(shù)據(jù)的數(shù)據(jù)量并不固定,當(dāng)數(shù)據(jù)個(gè)數(shù)不是7倍數(shù)時(shí),為防止交織/解交織過(guò)程出現(xiàn)數(shù)據(jù)遺漏,必須進(jìn)行邊界處理。若發(fā)送數(shù)據(jù)的個(gè)數(shù)不是7倍數(shù)時(shí),在試飛數(shù)據(jù)后以0補(bǔ)夠?yàn)?的倍數(shù);在接收端同樣進(jìn)行剔0操作。
在Mentor公司ModelSim軟件中對(duì)該糾錯(cuò)系統(tǒng)進(jìn)行功能仿真,以第一個(gè)處理單元為例,其仿真結(jié)果見(jiàn)圖3。
由圖3可知,Valid_D_I高電平有效后,漢明編碼器依次輸入(c)16,(f)16,(0)16,(5)16…,輸出漢明碼字依次為(97)10,(127)10,(0)10,(45)10…,再經(jīng)過(guò)交織器后,依次輸出(0b)16,(32)16,(6a)16,(6a)16,(32)16…。交織器每讀取7個(gè)數(shù)據(jù)后對(duì)其存儲(chǔ)器mem_jzout進(jìn)行一次寫(xiě)操作,將交織后的數(shù)據(jù)緩存。再?gòu)膶?xiě)操作的下一時(shí)鐘開(kāi)始,依次輸出該緩存數(shù)據(jù),即為信道中傳輸?shù)臄?shù)據(jù)D_enout。
為驗(yàn)證系統(tǒng)的糾錯(cuò)性能,對(duì)D_enout的第一個(gè)數(shù)(0b)16和第九個(gè)數(shù)(1c)16都制造連續(xù)7位誤碼,分別成為(74)16和(63)16。接收端接收數(shù)據(jù)de_data的第一個(gè)數(shù)為誤碼數(shù)據(jù)(74)16,第九個(gè)數(shù)為誤碼數(shù)據(jù)(63)16,經(jīng)過(guò)解交織及漢明譯碼后,該處理單元的輸出數(shù)據(jù)為(c)16,(f)16,(0)16,(5)16…,與原輸入數(shù)據(jù)一致。
可見(jiàn),該糾錯(cuò)系統(tǒng)的單個(gè)處理單元對(duì)連續(xù)7位誤碼具有一定的糾錯(cuò)能力。因此,整個(gè)糾錯(cuò)系統(tǒng)對(duì)16比特以內(nèi)數(shù)據(jù)的最多連續(xù)7位誤碼具有一定糾錯(cuò)能力。
試飛測(cè)試數(shù)據(jù)的正確性對(duì)航空設(shè)備研發(fā)與飛行安全至關(guān)重要。本文結(jié)合試飛測(cè)試數(shù)據(jù)傳輸?shù)膶?shí)際情況,提出了基于糾錯(cuò)碼和交織技術(shù)的試飛測(cè)試數(shù)據(jù)抗誤碼方法。在ISE中設(shè)計(jì)實(shí)現(xiàn)了采用(7,4)漢明碼和7行7列交織器的16比特糾錯(cuò)系統(tǒng),并在ModelSim中進(jìn)行功能仿真。仿真結(jié)果表明,對(duì)16比特以內(nèi)數(shù)據(jù)的最多連續(xù)7位誤碼具有一定糾錯(cuò)能力。這對(duì)于設(shè)計(jì)高可靠性的試飛測(cè)試數(shù)據(jù)通信系統(tǒng)、提高數(shù)據(jù)傳輸可靠性具有重要的參考價(jià)值。
10.3969/j.issn.1001-8972.2015.09.006