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