GSM信道中数字信号传输的同步算法设计与实现*
2018-09-29庄浩宇
庄浩宇
(东南大学 信息科学与工程学院,江苏 南京 211189)
0 引 言
GSM系统是当前全球最广泛使用的语音通信系统。它凭借覆盖范围广、可靠性强以及设备价格低廉的特点,即使在3G和4G网络大范围开展业务的条件下,依然在端对端通话服务中占据一席之地。
但是,由于较早设计的局限[1],GSM语音通信对系统保密性没有保证。针对这一缺陷,基于GSM语音信道设计端对端的保密通话系统十分必要[2]。同时,利用它的传输能力,可以在仅有GSM语音通信服务覆盖的特殊地区,实现可靠的低速率网络接入。
针对GSM语音信道的特性,已有多项传输方式和信号结构的设计[3-5]。本文针对数据传输这一特殊场景,考虑在低成本条件下,设计了一种能够利用GSM语音信道的信号同步和传输方式,并在硬件平台实现了该解决方案。
1 系统设计
本文设计了一种能够通过GSM语音信道传输、由对端捕获的信号组织结构,并根据该信号结构设计了生成算法和一种功率自适应的捕获算法,能够稳定对信号进行捕获,并在历经信号盲区后有重同步能力,从而在通信两端建立一条稳定可靠的全双工数据传输通路。
1.1 通信系统结构
包含本系统的整个数据通信系统,如图1所示。相对于数据源和数据宿设备——即用户设备来说,本系统充当这两部分设备的数据调制解调器,信息以纯二进制数据流形式收发。相对于GSM移动电话来说,本系统(包含相连的AD/DA)充当通话的麦克风和扬声器,在源端向移动电话提供音频源,在对端对移动电话的音频输出进行采样和处理,信息以音频线上的模拟信号形式传输。
图1 数据通信系统
1.2 信号结构
为了消除移动电话设备中的MELPe声码器和GSM信道给信号带来的畸变影响,为信号设置了如图2所示的帧结构。
图2 信号帧结构
其中,每一数据帧包括帧同步头和帧载荷部分。帧同步头是一段固定的信号,帧载荷由数据源发送的数据调制得到。相邻的两帧信号间插入可变长度的信号空隙,向信道插入静音,使移动电话的MELPe声码器重启语音判决算法,避免较长的调制信号被MELPe声码器屏蔽[6]。经过仿真测试和信号质量评估,信号空隙的长度最短设置为32 ms。实际系统中,通过调整信号空隙的长度,平衡调制系统的数据吞吐速率。
2 调制与捕获算法
2.1 发送端算法
发送部分将数据源传输的数据调制为一定形式的通带信号,并将其分段封装在音频帧结构中。考虑二进制伪随机序列的自相关特性[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声码器。
2.2 接收端算法
在接收端,对音频帧结构的捕获主要包含以下技术要求:
(1)捕获每一帧的帧头同步信号;
(2)避免错误地在帧载荷位置进行同步;
(3)经过GSM信号盲区产生一段时间的无内容信号后,能够正确地重新获得同步的能力。
根据该技术要求,设计的算法流程如图4所示。
图4 加密端算法流程
同步头的检测采用离散信号相关算法,即:
其中,s是接收端获得的信号采样序列,长度为S;m是两端共有的帧同步头信号采样序列,长度为M;C即为相关性函数。实际上,在嵌入式系统中,可以使用数字滤波器结构实现上述相关性计算,滤波器系数即为同步消息m的倒序序列。当C超过某个阈值时,即认为检测到了同步头,同步点的精确位置,取过阈值区间内的极大值位置。
为了在接收端接入的不同通话设备和音量设置下能够正常工作,将阈值设置为自适应,根据输入信号的平均功率自动调节,即:
其中kT是某个预置的系数,n是参与计算的序列长度。既避免了需要手动根据设备和音量设置调整阈值,也防止了信道变化带来的误判。自适应的阈值设置如图5所示。
图5 自适应阈值设置的结果
在空隙检测的步骤中,检测信号采样序列连续处于静音的信号长度,直到连续静音信号长度大于最小的帧空隙,再开始下一帧的检测与解调。
3 算法的实现
3.1 STM32开发平台
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只定时器。
3.2 接口设计与数据格式
作为一部向模拟信道发送和捕获模拟信号并参与调制解调的全双工设备,与上位机(即数据源)使用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 控制流程与中断调度
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)对低于静音阈值的信号点进行计数,若连续长度大于最小空隙长度,则进入帧头检测过程。
3.4 测试与评价
测试设备使用载有上述STM32F405芯片的WaveShare公司的Open405R-C开发板、CSR8670(蓝牙)和两部华为G660移动电话搭建测试环境。用户硬件操作使用正常通话中手动切入加密传输模式,提高系统的适用能力[9]。
调制系统设计的最大数据速率为1 348B/s,帧长设置为490 ms。
依据使用的数字/模拟信号收发通路和信道情况,对系统进行测试,获得的误码性能如表2所示。
表2 误码以及重同步性能
通过对数据的分析表明,在实际使用中,系统的误码率可低至2%以下。使用软/硬件MELPe声码器作为数字数据源,并在对端解调设备后使用MELPe声码器译码,可以获得较高质量的音频通话信道。
通过对错误数据的分布位置进行分析发现,通常集中式的出现在某个信道衰落区,如图9所示。若降低对数据实时性和速率的要求,对数字信号使用纠错和交织等抗干扰技术,能够进一步降低误码率,提升传输性能,使其能够用作低速率秘密物理数据传输通道。
图9 集中式误码区域
4 结 语
本文设计了一种能够在GSM信道中,进行数据传输的物理层信号结构,并研究了在STM32单片机硬件开发平台上的帧同步的设计与实现方案。
在对信源数据进行直接传输时,能够获得2%以下的误码率,并可以直接用作一些实时性的、对误码容忍度较高的数据传输,如传输压缩语音数据进行保密通话。
由于其集中误码的特性,对编码系统加入纠错和交织等技术,可以进一步提高传输性能,以进行低速率、高可靠性的数据传输。