基于無線數(shù)傳技術(shù)的話音擾頻模塊設(shè)計
由于擾頻信令的信息非常重要,而且要求有實時性,只有檢錯重發(fā)并不能滿足要求。針對單片機系統(tǒng)的特點和編解碼的復(fù)雜度,糾錯編碼采用Golay碼。 Golay碼是一種特殊的非本原BCH碼,屬于前向糾錯編碼FEC(Forward Error Correction),也是目前為止發(fā)現(xiàn)的惟一能糾正多個錯誤的完備碼,因其在噪聲環(huán)境下具有良好的糾錯性能而獲得了廣泛應(yīng)用,尤其適合短碼字長和短處理時延的應(yīng)用場合。
本文引用地址:http://m.butianyuan.cn/article/83748.htm本方案選用的Golay(24,12)碼最小距離為8,能糾正3個隨機錯誤同時檢測4個錯誤。針對8位單片機的特點,將信息位縮短為8bit,并在最后添加0101進行幀同步碼的提取,最終構(gòu)成3個字節(jié)的完整結(jié)構(gòu),提高了單片機編碼的效率。編解碼的程序全部用C語言實現(xiàn),程序復(fù)雜度適中,Atmega8單片機的運算能力完全可以勝任。Golay碼結(jié)構(gòu)如表2所示。
2.2.3 數(shù)據(jù)幀結(jié)構(gòu)的設(shè)計
MSM6882接收的數(shù)據(jù)是與時鐘同步的比特流,為了從所接收的數(shù)據(jù)中提取時鐘信號,首先發(fā)送6字節(jié)即48bit“1”和“0”交替出現(xiàn)的位同步碼。為了按字節(jié)接收數(shù)據(jù),確定每一幀的起始位,需要在比特流中添加幀同步信息,以避免幀同步圖案與數(shù)據(jù)中內(nèi)容相同而導(dǎo)致的誤判。根據(jù)所選用的糾錯編碼特點,每組Golay碼三個字節(jié)的最后4個 bit為0101,即不會出現(xiàn)三個字節(jié)以上的連續(xù)0或者連續(xù)1,所以幀起始碼選用31bit1和1bit0,幀結(jié)束碼采用32bit連0。在接收中斷處理程序中,檢測到31bit1和1bit0就開始按字節(jié)接收數(shù)據(jù),此后每3個字節(jié)一組進行糾錯解碼,同時開始對接收到的連續(xù)0進行計數(shù),超過32個就認為一幀接收完畢。幀結(jié)構(gòu)如表3所示。
2.2.4 數(shù)傳模塊程序的設(shè)計
數(shù)傳程序主要實現(xiàn)編碼和發(fā)送數(shù)據(jù)、接收數(shù)據(jù)和解碼的功能。發(fā)送時,Golay編碼由一個字節(jié)變?yōu)槿齻€字節(jié),把待發(fā)送數(shù)組先全部編碼再進行發(fā)送;接收時,先將三個字節(jié)一組的字節(jié)流存儲為數(shù)組,再進行Golay解碼,這樣,將占用大量RAM空間和時間。為了節(jié)省單片機資源,提高程序執(zhí)行效率,把編碼與發(fā)送數(shù)據(jù)、接收數(shù)據(jù)與解碼結(jié)合起來同時進行。
首先,定義全局變量作為接收發(fā)送的計數(shù)器和狀態(tài)標志位,主函數(shù)中循環(huán)查詢系統(tǒng)工作狀態(tài)確定是否進行編碼或者解碼和啟動發(fā)送字節(jié)的子函數(shù);在中斷處理函數(shù)中每接收和發(fā)送完一個字節(jié),就改變相應(yīng)的計數(shù)器和狀態(tài)標志位,供主函數(shù)查詢。這樣把編解碼與收發(fā)結(jié)合起來,提高了程序的執(zhí)行效率,縮短了程序運行的時間。
其次,接收和發(fā)送都設(shè)置雙緩沖區(qū),結(jié)構(gòu)定義代碼如下:
typedef struct
{
unsigned char rc; /*信息字節(jié)*/
unsigned int r1; /*校驗字*/
}Golay;
Golay RecvBuffer[2];
Golay SendBuffer[2];
在中斷處理函數(shù)中發(fā)送一個緩沖區(qū)數(shù)據(jù)的同時,在主函數(shù)里編碼填充另一緩沖區(qū);在中斷處理函數(shù)中接收數(shù)據(jù)、填充一個緩沖區(qū)時,在主函數(shù)里對另一個緩沖區(qū)中接收的上一組數(shù)據(jù)進行解碼。在中斷處理函數(shù)中改變?nèi)值臓顟B(tài)標志位,在主函數(shù)里進行緩沖區(qū)間的切換。通過設(shè)置雙緩沖區(qū),收發(fā)分別只需占用兩組編碼空間,節(jié)省了單片機的RAM資源。
2.3 擾頻信令的設(shè)計
每次通話之前,即按下PTT之后,首先延時一段時間,這個時間由中繼臺的最大延時決定;再發(fā)送擾頻信令,確定此次通話是否擾頻以及擾頻的次序和時間間隔,為了與未加擾頻模塊的手持臺通信,需要保留不擾頻的功能,即CMX264在Clear模式下工作;同時增加地址選項,通過地址進行分組,可以實現(xiàn)組呼和單呼;通話完畢時發(fā)送結(jié)束幀,使手持臺恢復(fù)到Clear 模式。根據(jù)上述要求,設(shè)計擾頻信令格式如表4所示。
結(jié)構(gòu)定義代碼如下:
typedef struct
{
unsigned char ScrambleFrameType; /*幀類型*/
unsigned char RecvAddress[2]; /*接收地址*/
unsigned char ScrambleSeq[4]; /*擾頻次序*/
unsigned char HopCyc; /*時間間隔*/
}Scramble;
本文介紹的方案主要針對使用模擬集群的專用網(wǎng)絡(luò),調(diào)度通話內(nèi)容需要保密以避免竊聽和干擾。本方案通過電臺的話音信道進行無線數(shù)據(jù)傳輸,對傳統(tǒng)擾頻方式進行了改進,提高了系統(tǒng)的安全性和應(yīng)用范圍。
參考文獻
1 MORELOS-ZARAGOZA R.H. The art of error correcting coding. Wiley, 2002
2 OKI Semiconductor. MSM6882 MSK Modem User's Manual.
3 CML Microcircuits.Wireless Modem Troubleshooting Guide
4 CML Microcircuits.CMX264 Frequency Domain Split Band Scrambler datasheet.
5 Atmel Corporation. ATmega8 AVR 8-bit microcontroller datasheet.
6 張宗橙.糾錯編碼原理和應(yīng)用.北京:電子工業(yè)出版社,2003
評論