莊浩宇
(東南大學 信息科學與工程學院,江蘇 南京 211189)
GSM系統是當前全球最廣泛使用的語音通信系統。它憑借覆蓋范圍廣、可靠性強以及設備價格低廉的特點,即使在3G和4G網絡大范圍開展業務的條件下,依然在端對端通話服務中占據一席之地。
但是,由于較早設計的局限[1],GSM語音通信對系統保密性沒有保證。針對這一缺陷,基于GSM語音信道設計端對端的保密通話系統十分必要[2]。同時,利用它的傳輸能力,可以在僅有GSM語音通信服務覆蓋的特殊地區,實現可靠的低速率網絡接入。
針對GSM語音信道的特性,已有多項傳輸方式和信號結構的設計[3-5]。本文針對數據傳輸這一特殊場景,考慮在低成本條件下,設計了一種能夠利用GSM語音信道的信號同步和傳輸方式,并在硬件平臺實現了該解決方案。
本文設計了一種能夠通過GSM語音信道傳輸、由對端捕獲的信號組織結構,并根據該信號結構設計了生成算法和一種功率自適應的捕獲算法,能夠穩定對信號進行捕獲,并在歷經信號盲區后有重同步能力,從而在通信兩端建立一條穩定可靠的全雙工數據傳輸通路。
包含本系統的整個數據通信系統,如圖1所示。相對于數據源和數據宿設備——即用戶設備來說,本系統充當這兩部分設備的數據調制解調器,信息以純二進制數據流形式收發。相對于GSM移動電話來說,本系統(包含相連的AD/DA)充當通話的麥克風和揚聲器,在源端向移動電話提供音頻源,在對端對移動電話的音頻輸出進行采樣和處理,信息以音頻線上的模擬信號形式傳輸。

圖1 數據通信系統
為了消除移動電話設備中的MELPe聲碼器和GSM信道給信號帶來的畸變影響,為信號設置了如圖2所示的幀結構。

圖2 信號幀結構
其中,每一數據幀包括幀同步頭和幀載荷部分。幀同步頭是一段固定的信號,幀載荷由數據源發送的數據調制得到。相鄰的兩幀信號間插入可變長度的信號空隙,向信道插入靜音,使移動電話的MELPe聲碼器重啟語音判決算法,避免較長的調制信號被MELPe聲碼器屏蔽[6]。經過仿真測試和信號質量評估,信號空隙的長度最短設置為32 ms。實際系統中,通過調整信號空隙的長度,平衡調制系統的數據吞吐速率。
發送部分將數據源傳輸的數據調制為一定形式的通帶信號,并將其分段封裝在音頻幀結構中。考慮二進制偽隨機序列的自相關特性[7],基于該序列生成音頻幀的幀頭同步信號。
二進制偽隨機序列的一個典型生成方法是利用線性反饋移位寄存器。利用階數為k的線性反饋移位寄存器,可以生成長度為N=2k-1的偽隨機序列。一個典型的16階線性反饋移位寄存器的結構,如圖3所示。

圖316 階線性反饋移位寄存器
為了滿足GSM信道的通帶特性,采用如下的編碼和調制方案,控制幀頭信號的主要頻率分布在750~1 500 Hz范圍。
(1)產生長度為N的二進制偽隨機序列BN;
(2)用Miller編碼方式對BN編碼;
(3)用帶通濾波器對上述編碼信號進行帶通濾波,控制頻率成分。其中,N取值為31,調制符號長度16,采樣率fs為24 kHz。
在仿真和評估過程中發現,對Miller編碼中連續相同的位的部分即信號中的倍頻部分進行高頻預加重處理,能更好地抵抗GSM信道的高頻衰減,即高頻預加重。在幀載荷部分,對數據采用0.3~3 kHz通帶內的任意數據調制方案。控制整幀長度在400~600 ms范圍,保證周期性地用幀空隙重啟MELPe聲碼器。
在接收端,對音頻幀結構的捕獲主要包含以下技術要求:
(1)捕獲每一幀的幀頭同步信號;
(2)避免錯誤地在幀載荷位置進行同步;
(3)經過GSM信號盲區產生一段時間的無內容信號后,能夠正確地重新獲得同步的能力。
根據該技術要求,設計的算法流程如圖4所示。

圖4 加密端算法流程
同步頭的檢測采用離散信號相關算法,即:

其中,s是接收端獲得的信號采樣序列,長度為S;m是兩端共有的幀同步頭信號采樣序列,長度為M;C即為相關性函數。實際上,在嵌入式系統中,可以使用數字濾波器結構實現上述相關性計算,濾波器系數即為同步消息m的倒序序列。當C超過某個閾值時,即認為檢測到了同步頭,同步點的精確位置,取過閾值區間內的極大值位置。
為了在接收端接入的不同通話設備和音量設置下能夠正常工作,將閾值設置為自適應,根據輸入信號的平均功率自動調節,即:

其中kT是某個預置的系數,n是參與計算的序列長度。既避免了需要手動根據設備和音量設置調整閾值,也防止了信道變化帶來的誤判。自適應的閾值設置如圖5所示。

圖5 自適應閾值設置的結果
在空隙檢測的步驟中,檢測信號采樣序列連續處于靜音的信號長度,直到連續靜音信號長度大于最小的幀空隙,再開始下一幀的檢測與解調。
STM32是ST公司(STMicroelectronics,意法半導體)設計的一系列32位微控制器集成電路的總稱。STM32芯片根據不同的32位ARM處理器核心歸類, 包 含 Cortex-M7F、Cortex-M4F、Cortex-M3、Cortex-M0+和Cortex-M0等[8]。除處理器核心外,微控制器還集成RAM、Flash、調試接口和許多處理器外圍原件。
STM32F405芯片是一塊集成Cortex-M4處理核心的微控制器芯片,支持浮點運算,運行于168 MHz主頻。該產品還集成了512~1 Mb可選的Flash和192 kb的SRAM空間,可供程序存儲和運行使用。
此外,與本實驗項目相關的外設設備包括:2路全雙工的I2S通道和PLL電路,6路USART通道,3路SPI通道,3路I2C通道,最多17只定時器。
作為一部向模擬信道發送和捕獲模擬信號并參與調制解調的全雙工設備,與上位機(即數據源)使用SPI接口傳遞數據,與下位機(AD/DA或藍牙模塊)使用I2S傳遞數據,使用USART接口進行程序燒寫和調試信息輸出。其中,SPI接口通信速率656 kb/s,采用主模式全雙工方式;I2S接口采樣率8 kHz,采用Philips標準32位幀長16位數據;I2C接口采用從模式;USART接口波特率設置為115 200。需要注意的是,由于上位機的硬件實現要求,SPI數據流需依據如圖6所示的幀格式發送或接收,且每組4字節的數據須連續傳輸,否則上位機的32位SPI外設將會定時清除收到的未滿4字節的數據內容。

圖6 SPI數據幀格式
3.3.1 中斷配置與中斷服務
使用STM32系統提供的搶斷優先級中斷配置,使配置序號較低,即優先級更高的中斷能打斷優先級較低的中斷處理函數的執行,使系統能夠響應不同優先程度外設通信設備的需求,保證系統長時間穩定運行。各中斷配置和完成的主要功能如表1所示。
全雙工I2S接口的進入兩路分別配置一個DMA控制器進行數據緩存和收發。DMA控制器可以在每次寫寄存器配置后,不需CPU干預的情況下,獨立完成內存塊之間或內存塊與外設之間的數據搬運,以節省CPU運行時間。以DMA控制器配置為從內存塊向I2S外設搬運數據為例,在程序初始化配置完成后,CPU屏蔽I2S外設中斷,而由DMA控制器代為響應,從配置好的內存地址以遞增的方式取數據向I2S外設發送并自動置I2S外設的標志位;在預設大小的內存塊發送完畢后,由DMA控制器向CPU發送一次中斷,以提示CPU重新配置內存塊區域和重新使能DMA控制器。若DMA控制器被配置為自動使能模式,則其會自動重新從上次設置的起始地址繼續發送相同長度的數據。

表1 中斷優先級配置和主要功能
使用定時器Timer0控制SPI外設勻速收發數據。根據介紹的上位機處理要求,在一次Timer0定時完成時需要連續收發4字節。為了防止在SPI外設收發數據期間影響其他外設中斷,Timer0的中斷處理函數只啟動SPI外設一次即退出,剩余的3字節在三次接連產生的SPI中斷里啟動發送。
3.3.2 系統處理流程
系統處理流程,如圖7所示。

圖7 全雙工系統處理流程
3.3.3 發送端的處理流程
發送端的處理在發送DMA控制器的中斷處理函數內完成。在DMA控制器發送完最后一個數據并產生中斷后,如果在一個I2S數據周期后的下一次I2S中斷到來時,DMA控制器未得到重新使能,I2S總線上將會得到一個無效數據。發送信號產生一個采樣點的延時,影響接收端對信號的捕獲和解調。為了使I2S總線始終保持有有效數據,在中斷處理函數中需要立即為DMA控制器設置起始地址、數據塊長度并使能。因此,需要在一塊新的內存塊內準備好下一次中斷使用的數據,以備下一次的立即使用。
為了減少DMA控制器帶來的塊延時,同時簡化數據準備過程的復雜度,每次為DMA控制器設置的塊長度根據其中的數據類別而有所不同,如圖8所示。

圖8 發送端DMA控制器判別流程
其中,固定長度和內容的數據塊1、數據塊2和數據塊3,均在系統初始化時完成。數據塊1和數據塊2內全部填充零數據。數據塊1的發送時間為滿足最小幀空隙的時長;數據塊2的發送時間為5 ms,用于在平衡數據吞吐速率過程的等待期間重復發送;數據塊3為程序初始化過程中預先計算好的固定幀同步頭信號。在I2S接口的采樣率設置為8 kHz的情況下,需要對生成的幀頭序列進行1/3的抽取,同時在數據載荷的調制部分也需要進行1/3抽取。
由于幀間空隙的存在,幀載荷部分傳送的數據速率一定大于上位機的數據速率,以在穩定工作中達到吞吐平衡。因此,在啟動幀頭信號發送前,需要對上位機的數據進行一定的緩存。緩存的數據量取決于實際幀載荷和整幀時間的比值。
3.3.4 接收端的處理流程
與發送端類似,也使用DMA控制器輔助I2S收入數據。DMA控制器在兩塊相同長度的內存塊間交替使用,保證CPU正在處理的數據不會被覆寫,這一配置通常被成為“Ping-PongBuffer”。為了最大限度地減少DMA緩存過程帶來的延時,同時兼顧CPU響應中斷的頻率,將DMA控制器的存儲塊長度配置為幀頭信號的長度,即496采樣點。由于在相關性計算的操作中,需要同時涉及連續兩塊信號的數據,需要設置兩倍長,即992點的存儲塊用于計算。
綜上所述,在每次DMA控制器中斷時的處理流程為:
(1)在“Ping-PongBuffer”中本次未使用的一塊內存地址重新使能DMA控制器;
(2)將992點的計算存儲塊向前移位496點;
(3)將“Ping-PongBuffer”中本次使用的內存塊中的數據搬入計算存儲塊的后496點的位置;
(4)如果當前為解調過程,進入(8);如果當前為空隙檢測過程,進入(9);
(5)計算相關性函數C;
(6)計算閾值函數T;
(7)判決是否捕獲到幀同步頭;
(8)解調當前內存區域中的幀載荷部分,并寫入SPI異步發送緩存。如果數據量達到該信號幀的全部載荷數量,進入空隙檢測過程,進入(9);
(9)對低于靜音閾值的信號點進行計數,若連續長度大于最小空隙長度,則進入幀頭檢測過程。
測試設備使用載有上述STM32F405芯片的WaveShare公司的Open405R-C開發板、CSR8670(藍牙)和兩部華為G660移動電話搭建測試環境。用戶硬件操作使用正常通話中手動切入加密傳輸模式,提高系統的適用能力[9]。
調制系統設計的最大數據速率為1 348B/s,幀長設置為490 ms。
依據使用的數字/模擬信號收發通路和信道情況,對系統進行測試,獲得的誤碼性能如表2所示。

表2 誤碼以及重同步性能
通過對數據的分析表明,在實際使用中,系統的誤碼率可低至2%以下。使用軟/硬件MELPe聲碼器作為數字數據源,并在對端解調設備后使用MELPe聲碼器譯碼,可以獲得較高質量的音頻通話信道。
通過對錯誤數據的分布位置進行分析發現,通常集中式的出現在某個信道衰落區,如圖9所示。若降低對數據實時性和速率的要求,對數字信號使用糾錯和交織等抗干擾技術,能夠進一步降低誤碼率,提升傳輸性能,使其能夠用作低速率秘密物理數據傳輸通道。

圖9 集中式誤碼區域
本文設計了一種能夠在GSM信道中,進行數據傳輸的物理層信號結構,并研究了在STM32單片機硬件開發平臺上的幀同步的設計與實現方案。
在對信源數據進行直接傳輸時,能夠獲得2%以下的誤碼率,并可以直接用作一些實時性的、對誤碼容忍度較高的數據傳輸,如傳輸壓縮語音數據進行保密通話。
由于其集中誤碼的特性,對編碼系統加入糾錯和交織等技術,可以進一步提高傳輸性能,以進行低速率、高可靠性的數據傳輸。