摘要:詳細闡述一種利用交錯編碼的思想,來改遠距離通信質量的新設計。設計由FPGA芯片實現,能很方便加載到各種單片機有線或無線通信系統的收發接口中。通過對發、收信息的編、解碼處理,增強信息在傳輸過程的抗干擾能力,以達到遠距離高精度傳輸目的。
關鍵詞:FPGA 遠距傳輸 高精度 交錯 編碼 解碼
1 意義
簡單的多機間數據通信在我們的設計中很普遍,一般情況下數據傳輸距離很短,不會超過百十m,因此僅采用雙絞線加RS232或RS485標準就可以有效傳輸。但有時多機之間的距離也會很遠,如我們所設計的一個氣象項目,就要求子站遍布在基站1km范圍內。因此在考慮成本、不增加很多設備的前提下,有效防止噪聲干擾,保證子站與基站的數據高精確傳輸就很重要。
圖1 方案框圖
通常多機短距通信中,可以在收發端加入奇校驗、累加和校驗等出錯就重發的防噪聲措施;但以上措施都只能檢錯,不能糾錯,也就是說傳輸過程中不能容錯。在遠距離、干擾大、出錯概率非常高的情況下,單純的出錯就重發措施會失去工作效率和意義。因此,我們需要一種能容錯的數據傳輸方式,就要對數據編碼。因此,不同傳輸環境的噪聲性質不相同,對應的編碼方式也不一樣,所以我們設計編碼時強調更多位的糾錯冗余,以適合較多的環境,但相應地就降低了傳輸速率。另外,出于通用性和簡易性的考慮,我們的設計應可直接加載于原有的有線或無線通信系統上,除數據連線外,不需對原有系統做任何改變。 在此,我們采用了交錯編碼技術來增加數據傳輸過程的容錯能力。編解碼設備插入加載到通信系統原來的數據收發端口。因此,微處理器要發送的數據由原先的直接經發送端(無線通信為調制器和發送器)發送,變為先經編碼設備編碼,然后再經原有的發送端發送;同理,接收端(無線通信為接收器和解調器)收到信息,經解碼設備解碼出數據,再傳送給微處理器。
2 設計方案
為適應多種信道,要求我們的設計能同時糾隨機錯和突發錯,并且能有多位的糾錯冗余。因此,我們基于常用的卷積碼和循環碼特性,自定義一種簡單的線性分組碼作為糾錯編碼,以便我們刻意去提高糾錯的位數。同時我們采用交錯發送技術來提高糾突發錯能力,并利用FPGA去實現該方案。
(1)方案的應用范圍
我們所設計的方案用于遠距離的多機通信。根據實際經驗,本方案默認微處理器收發的數據為8位并行數據+1位同步時鐘,因此提供8位數據線和1位同步線。對于串口,則可增加串行轉換的移位寄存器來轉化。
圖3 解碼器仿真圖
(2)方案的實現
方案的實現如圖1所示。
①在子站、基站的收發端口與微處理器之間分別加入相應的編解碼設備,使得子站與基站間傳輸的數據先經過編解碼再傳輸,以達到增強容錯的能力。
②用幀結構實現碼字的交錯。
③遠距離傳輸,收發端最好選用同步方式,但這不是本設計的內容,不予以討論。
(3)基于精度,對數據的每一位單獨編碼
實際應用中,對數據精確的定義并非數據的完全重合,而是要求某一個精度。完全重合只對用做標志的數據有意義,對單純計算用的數據并沒有必要?;诰纫?,顯然一個數據信息的高位對精度影響遠比低位大(如:FFH,當最高位出錯變為7FH時,精度變化最大,而最低位出錯變為FEH時,精度變化最小)。因此,我們并沒有對8位數據信息進行整體編碼,而是逐位分開進行編碼:高數據位,采用更長的編碼,以保證更高的正確率;低數據位,則可采用較短的編碼,兼顧效率和設備容量。具體編碼如表1所列。
表1
8位數據最低位(3,1)碼 | 0對應010,1對應101,漢明距3,糾1錯 |
8位數據第二位(3,1)碼 | 0對應010,1對應101,漢明距3,糾1錯 |
8位數據第三位(5,1)碼 | 0對應01010,1對應10101,漢明距5,糾2錯 |
8位數據第四位(5,1)碼 | 0對應01010,1對應10101,漢明距5,糾2錯 |
8位數據第五位(7,1)碼 | 0對應0101010,1對應1010101,漢明距7,糾3錯 |
8位數據第六位(7,1)碼 | 0對應0101010,1對應1010101,漢明距7,糾3錯 |
8位數據第七位(9,1)碼 | 0對應010101010,1對應101010101,漢明距9,糾4錯 |
8位數據最高位(9,1)碼 | 0對應010101010,1對應101010101,漢明距9,糾4錯 |
?
表2
第1位 | 第2位 | 第3位 | 第4位 | 第5位 | 第6位 | 第7位 | 最高位 | |
0 | 010 | 010 | 01010 | 01010 | 0101010 | 0101010 | 010101010 | 010101010 |
1 | 101 | 101 | 10101 | 10101 | 1010101 | 1010101 | 101010101 | 101010101 |
對8個位遠逐位編碼,8個生成矩陣為1維矢量。因此用FPGA實現編碼時,采用查表法更方便,如表2所列。
之所以選用010等作為碼字,是因為01相間在組合為幀發送時,可以減少連0或連1的出現概率。
?
(4)幀結構實現交錯發送技術
為糾突發錯,碼字要按交錯格式發送。因此,用幀實現碼字的交錯,數據發端按幀發送,數據收端按幀解碼。8個碼字共48位(6字節),加幀頭2字節,所以,幀為8字節。為說明幀結構,暫以字母表示碼字各位:
碼字0:a2a1a0; 碼字3:d4d3d2ed1d0;
碼字1:b2b1b0; 碼字4:e6e5e4e3e2e1e0;
碼字2:c4c3c2c1c0; 碼字5:f6f5f4f3f2f1f0;
碼字7:h8h7h6h5h4h3h2h1h0;
幀結構如表3所列。
圖5 糾突發錯仿真圖
利用幀頭1和幀頭2的重合特點來檢測幀頭,因為碼字交錯發送時相鄰兩字節對應位基本01相間的。由表3可得,第3字節到第8字節,相鄰字節至少有6位不相同。因此可借用漢明距的糾錯思想,認為幀頭1和2不重合的位在2位以內,則表示正確收到幀頭。
表3
幀頭1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
幀頭2 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
第3字節 | a0 | c0 | e0 | f6 | f0 | g0 | g6 | h0 |
第4字節 | a1 | c1 | e2 | d0 | f1 | g1 | g7 | h1 |
第5字節 | a2 | c2 | e2 | d1 | f2 | g2 | g8 | h2 |
第6字節 | b0 | c3 | e3 | d2 | f3 | g3 | h6 | h3 |
第7字節 | b1 | c4 | e4 | d3 | f4 | g4 | h7 | h4 |
第8字節 | b2 | e6 | e5 | d4 | f5 | g5 | h8 | h5 |
?
?
3 FPGA實現設計
(1)單工條件下的實現
用兩塊FPGA分別實現編碼器和解碼器。按前面的編解碼原理,編碼器接收子站8位信息和1位同步,輸出8字節×8位幀結構編碼作遠程傳輸,解碼器收到幀結構編碼,輸出8位信息和1位同步給基站。(在實際應用中,子基站兩MPU還要加入通常的累加和檢錯或偶校驗檢錯。因不屬編解碼內容,不作討論。)
單工電路原理如圖2。
為檢驗電路設計,假設輸入信號為11001010,編碼輸出的幀結構為表4。
表4
幀頭1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | =D4 |
幀頭2 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | =D4 |
第3字節 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | =07 |
第4字節 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | =FB |
第5字節 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | =07 |
第6字節 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | =FA |
第7字節 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | =05 |
第8字節 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | =BA |
?
編碼器仿真圖如圖3。
同步信號clk_in上升沿到來時,編碼器讀入數據信息11001010,并按內部的波特率clk;在下降沿產生正確的幀格式編碼輸出(D4、D4、07、FB、07、FA、05、BA)。
解碼器的仿真圖如圖4所示。
當解碼器判斷收到幀頭(兩個D4),則將同步信號clk_out置高,再按內部波特率clk在上升沿收6字節的幀結構碼字,在同步信號的下降沿輸出譯碼(11001010)。
糾突發錯仿真圖如圖5所示。
當傳輸過程出現突發錯時,第5字節改為FF,第7字節改為00,譯碼器給出信息11001010。
?
因為信息最低位的編碼能糾1位錯,最高位能糾4位錯,所以,當第3~5字節、第6~8字節分別出現一個8位的突發錯,譯碼器均能完全糾正。出現多個突發錯時,相應的信息低位將出錯,但信息高位因具有更多位的糾錯能力而仍能保持準確性。我們設計的目標也正是盡可能保證高位的正確,以保證精度。
?
(2)基于單工的雙工通信
此時一片FPGA內集成了編碼器和解碼器,與MPU相連的數據通信接口仍為8位數據線,由MPU發W/R寫讀信號來控制編解碼,因此同一時間只能單向傳送數據,編解碼不能同時進行。準確地說,為半雙工通信。(要改為全雙工,須將MPU的數據線接口翻倍,非常占資源。)
雙工電路原理如圖6所示。
雙工編、解碼器的內部電路如圖7所示。(編碼器,解碼器與單工的相同。)
實際上,我們對編碼器和解碼器的輸出分別加了一個傳輸門(transfer_X器件)。該傳輸門由W/R信號控制,一旦傳輸門關閉,則將傳輸門的輸出置于高阻態?quot;Z"),因此,編解碼器的輸入輸出不會相互干擾,從而能在同一數據線上進行半雙工傳輸。
MPU向FPGA寫信息,FPGA編碼輸出。W/R=0,信息為11001010。
MPU讀FPGA的信息,FPGA收幀結構并解碼。W/R=1,解碼得11001010。
?
4 總結
①我們的設計目的主要在于增加數據的容錯能力。FPGA設備加載于MPU的數據接口與數據通信芯片接口之間,數據仍按原系統的發送方式遠距離傳輸,如圖8所示。因此原有的通信設備不必作改動,就能很方便地加載我們的設計。同時,因為編碼采用的分組碼的位數可以根據實際應用場合再做簡單調整,因而能夠提供更大的噪聲冗余。
②FPGA內部提供統一的編解碼波特率,最高由FPGA時鐘頻率決定,仿真圖中采用100ns(10MHz)。MPU收發信息的波特率最高為編碼波特率的1/8,因為1字節的數據信息要轉換為8字節幀結構。也就是說,我們是以降低通信的最高速率為代價來換取數據的高精度的。因此,我們的設計主要應用于不要求過高速率的通信場合。
評論