2.2 无线数传模块设计
2.2.1 MODEM的设计
电台内部针对话音频带进行了带通滤波,因此对MODEM调制后的信号有频率限制,不能超出话音频率范围。MSM6882是OKI公司推出的MSK全双工调制解调器,MSK信号包络恒定,具有最小功率谱占用率,在码元转换瞬间没有相位突变,数据传输波特率可以在1 200/2 400进行选择,载波频率600~2400Hz,因此完全可以通过电台的话音信道进行传输。
MSM6882内部提供接收时钟RT和发送时钟ST,通过同步串口与单片机通信,单片机使用外部中断模拟实现同步串口的功能。
发送数据时,单片机输出的数据SD在ST上升沿被锁存,因此将ST与单片机的外部中断INT0相连,INT0设置为下降沿触发,单片机在中断处理程序中改变SD电平,数字信号经过内部调制后产生MSK信号输出AO,发送时序如图3所示。

接收数据时,输入AI的MSK信号经过内部滤波器后可恢复为串行数据输出,同时从接收的数据中还可恢复出同步时钟RT,将RT与单片机的外部中断INT1相连,中断设置为上升沿触发,单片机在中断处理程序中读取RD电平值。接收时序如图4所示。

2.2.2 纠错编码的设计
移动通信时必然要受到无线信道传输特性的不理想以及加性噪声的影响,要在这样的传播条件下保持可以接受的传输质量,就必须采取各种技术措施来抵消衰落的不利影响,信道纠错编码就是其中一种有效的抗衰落技术。
由于扰频信令的信息非常重要,而且要求有实时性,只有检错重发并不能满足要求。针对单片机系统的特点和编解码的复杂度,纠错编码采用Golay码。 Golay码是一种特殊的非本原BCH码,属于前向纠错编码FEC(Forward Error Correction),也是目前为止发现的惟一能纠正多个错误的完备码,因其在噪声环境下具有良好的纠错性能而获得了广泛应用,尤其适合短码字长和短处理时延的应用场合。
本方案选用的Golay(24,12)码最小距离为8,能纠正3个随机错误同时检测4个错误。针对8位单片机的特点,将信息位缩短为8bit,并在最后添加0101进行帧同步码的提取,最终构成3个字节的完整结构,提高了单片机编码的效率。编解码的程序全部用C语言实现,程序复杂度适中,Atmega8单片机的运算能力完全可以胜任。Golay码结构如表2所示。

2.2.3 数据帧结构的设计
MSM6882接收的数据是与时钟同步的比特流,为了从所接收的数据中提取时钟信号,首先发送6字节即48bit“1”和“0”交替出现的位同步码。为了按字节接收数据,确定每一帧的起始位,需要在比特流中添加帧同步信息,以避免帧同步图案与数据中内容相同而导致的误判。根据所选用的纠错编码特点,每组Golay码三个字节的最后4个 bit为0101,即不会出现三个字节以上的连续0或者连续1,所以帧起始码选用31bit1和1bit0,帧结束码采用32bit连0。在接收中断处理程序中,检测到31bit1和1bit0就开始按字节接收数据,此后每3个字节一组进行纠错解码,同时开始对接收到的连续0进行计数,超过32个就认为一帧接收完毕。帧结构如表3所示。

2.2.4 数传模块程序的设计
数传程序主要实现编码和发送数据、接收数据和解码的功能。发送时,Golay编码由一个字节变为三个字节,把待发送数组先全部编码再进行发送;接收时,先将三个字节一组的字节流存储为数组,再进行Golay解码,这样,将占用大量RAM空间和时间。为了节省单片机资源,提高程序执行效率,把编码与发送数据、接收数据与解码结合起来同时进行。
首先,定义全局变量作为接收发送的计数器和状态标志位,主函数中循环查询系统工作状态确定是否进行编码或者解码和启动发送字节的子函数;在中断处理函数中每接收和发送完一个字节,就改变相应的计数器和状态标志位,供主函数查询。这样把编解码与收发结合起来,提高了程序的执行效率,缩短了程序运行的时间。
其次,接收和发送都设置双缓冲区,结构定义代码如下:
typedef struct
{
unsigned char rc; /*信息字节*/
unsigned int r1; /*校验字*/
}Golay;
Golay RecvBuffer[2];
Golay SendBuffer[2];
在中断处理函数中发送一个缓冲区数据的同时,在主函数里编码填充另一缓冲区;在中断处理函数中接收数据、填充一个缓冲区时,在主函数里对另一个缓冲区中接收的上一组数据进行解码。在中断处理函数中改变全局的状态标志位,在主函数里进行缓冲区间的切换。通过设置双缓冲区,收发分别只需占用两组编码空间,节省了单片机的RAM资源。