基于Atmega16的FEC設(shè)計與實現(xiàn)
對于工業(yè)級通信系統(tǒng),監(jiān)測數(shù)據(jù)與控制命令傳輸?shù)臏蚀_性顯得尤為重要。尤其是某些重要的監(jiān)測數(shù)據(jù)(例如煤礦安全監(jiān)控系統(tǒng)中的瓦斯監(jiān)測數(shù)據(jù)等),原則上要求達到100%的準確率,但在實際通信中這是不可能做到的,通常只能要求誤碼率在10-6或更低,這就要求系統(tǒng)具有高效的糾錯功能[1]。本文基于Atmel公司的MEGA系列高性能單片機Atmega16,通過采用(12,8,4)漢明碼與交織技術(shù)相結(jié)合的方法實現(xiàn)了前向糾錯編碼(FEC)方案,并利用TI公司的CC1100芯片構(gòu)建無線通信平臺,在實際工業(yè)環(huán)境中進行了測試。在不加任何FEC編碼的情況下,調(diào)制方式為GMSK,發(fā)射功率為-30 dBm,接收靈敏度為-105 dBm,通信波特率為9.6 kb/s,可靠通信距離為10 m;加入FEC編碼方案,其他條件不變的情況下,可靠通信距離提高到12 m,可見經(jīng)過FEC信道編碼的通信系統(tǒng)可以有效提高無線信號可靠傳輸?shù)木嚯x。
1 漢明碼與交織技術(shù)
漢明碼(Hamming Code)由Richard Hamming于1950年提出,它屬于線性分組編碼方式。設(shè)原代碼的碼長為k bit,附加糾錯編碼部分為r bit,當碼字長度n=2r-1,r=n-k,r=1,2,…時就稱這種線性分組碼為漢明碼[2-3]。其基本原理是將信息碼元與監(jiān)督碼元通過線性方程式聯(lián)系起來,每一個監(jiān)督位被編在傳輸碼字的特定比特位置上。系統(tǒng)對于錯誤的數(shù)位無論是原有信息位中的,還是附加監(jiān)督位中的都能把它分離出來[4]。
信息傳輸中,信道噪聲干擾不僅使原代碼的每一位可能出錯,而且附加糾錯位也可能出錯,故具有“一個差錯”的情況共有k+r種,加上“正確”狀態(tài)共有k+r+1種狀態(tài),而r比特附加糾錯位要能分辨這k+r+1種狀態(tài)。
對k位碼字的漢明碼進行編碼,所需步驟如下:
(1)確定最小的監(jiān)督位數(shù)r,將它們記成D1,D2,…,Dr,每個監(jiān)督位符合不同的奇偶測試規(guī)定;
(2)原有信息和r個監(jiān)督位一起編成長為r+k位的新碼字,選擇r監(jiān)督位(0或1)以滿足必要的奇偶條件;
(3)對所接收的信息作所需的r個奇偶檢查;
(4)如果所有的奇偶檢查結(jié)果均正確,則認為信息無誤;如果發(fā)現(xiàn)有一個或多個錯了,則錯誤的位由這些檢查的結(jié)果來唯一地確定。
漢明碼是一種能糾一位錯的線性分組碼, 由于它的編譯碼簡單,在數(shù)據(jù)通信和計算機存儲系統(tǒng)中廣泛應(yīng)用。然而漢明碼只能糾正一個錯誤,因此,為了使糾錯碼能更好地抵抗由噪聲和干擾引起的突發(fā)錯誤,避免突發(fā)的長干擾或者深衰落,在實際應(yīng)用中往往結(jié)合數(shù)據(jù)交織技術(shù)。交織技術(shù)是指一個數(shù)據(jù)序列在一一對應(yīng)的條件下進行數(shù)據(jù)的位置重排過程。它可以使信道中的突發(fā)錯誤分散開來,將原來屬于突發(fā)錯誤的信道改成獨立的隨機差錯信道,從而充分發(fā)揮糾錯編碼的作用,交織技術(shù)實際上是一種信道改造技術(shù)。本文所采用的交織技術(shù),其交織度達到400 bit。
2 通信系統(tǒng)平臺設(shè)計
本文采用ATmega16芯片與一款基于CC1100的無線模塊構(gòu)建無線通信系統(tǒng)的硬件平臺,系統(tǒng)框圖如圖1所示。
如圖1所示,Atmega16通過串口RS232與CC1100無線模塊進行數(shù)據(jù)交互,無線模塊實現(xiàn)數(shù)據(jù)的透明傳輸。實現(xiàn)方案如圖2所示。在發(fā)送端,Atmega16實現(xiàn)數(shù)據(jù)的打包,利用C語言實現(xiàn)FEC編碼和數(shù)據(jù)的交織處理,并通過RS232發(fā)送到CC1100無線模塊,然后經(jīng)過GMSK調(diào)制方式經(jīng)天線將信號發(fā)射出去;在接收端,經(jīng)天線首先通過GMSK解調(diào)信號,然后對數(shù)據(jù)包進行解交織和FEC解碼,然后進行數(shù)據(jù)解包。
3 FEC編碼方案及測試
3.1 FEC編解碼
FEC接收端不僅能在收到的信碼中發(fā)現(xiàn)錯誤,還能糾正錯誤。對于二進制系統(tǒng),如果能夠確定錯碼的位置,就能實現(xiàn)糾正。這種方法不需要反向信道(傳遞重發(fā)指令),也不會由于反復(fù)重發(fā)而延誤時間,實時性很好。在使用FEC編碼方式時,糾正的錯誤個數(shù)應(yīng)根據(jù)具體情況而定。本文采用了(12,8,4)漢明碼,能糾正一位錯誤。
在發(fā)送方,根據(jù)式(1)的編碼邏輯,可以將數(shù)據(jù)進行FEC編碼:
接收方將FEC編碼接收進來,并根據(jù)式(2)的編碼邏輯形成接收端的FEC編碼,
然后再對接收的數(shù)據(jù)進行FEC譯碼,譯碼表如表1所示。
3.2 交織方案
考慮到實際的通信環(huán)境中會存在電火花等瞬間的強干擾,而且有時持續(xù)時間較長,因此在進行交織編碼時采用較長的交織深度,這樣能避免上述情況造成的不利影響。設(shè)計方案為:以400 B為一組,并對其進行FEC后得到200 B,再將這400+200=600 B進行交織并發(fā)送出去,如表2所示。
、
評論