802.11b协议的直接序列扩频的DSP实现
摘要:阐述802.11b协议的直接序列扩频的特点及其在不同传输速率下的扩频原理。针对在DSP上如何实现扩频功能、如何针对DSP的架构优化程序,减少硬件开销,提出改进的方法。
关键词:802.11b;直接序列扩频:DSP
1 引言
近年来,计算机无线网络的逐渐成熟和飞速发展使之迅速地渗透和普及到社会的各个领域.并在许多方面改变了人们原有的生活方式和生活观念。IEEE 早在1999年就推出802.11b标准,目前主流的无线网卡均能够支持802.11b标准。
IEEE802.11b协议[11(Higher—Speed Physical Layer Extension in the 2.4 GHz Band)是对802.11协议的修改和补充,其物理层部分在原来的1Mb/s 和2Mb/s传输速率之外,增加了5.5Mb/s和11Mb/s的高速率DSSS的方案。研究表明,DSSS系统比FHSS系统具有更好的误码性能和传输距离.但因QPSK 不具有恒包络特性,需要用线性功率放大器。故适用于高性能系统。
2 802.1lb协议中的直接序列扩频
80211b的DSSS系统在1Mb/s和2Mb/s时采用长度为11的Barker码扩频,1Mb/s采用DBPSK调制,2Mb/s采用DQPSK调制。5.5Mb/s和11Mb/s
则采用了CCK调制,CCK调制即C0mplelTIentary Code Keying(补码键控)调制。
对于一对由二个元素组成的等长度序列,如果它们对于任何给定的分割,一个序列中相同的元素对和另外一个序列中不同的元素对的数量相等,那么这二个序列就是补码序列。补码序列有很强的位置对称性,自相关性强,互相关性很弱,非常适于作为扩频通信中的伪随机序列码。如果补码序列的元素具有相位参数的复数,那么构成的补码序列就是多相补码序列。IEEE802.11b中的CCK调制采用的就是多相补码序列,其定义的码组就是一个包含4种相位0、π/2、π、-π/2的复数码组。也就是说它的元素是{1,-1,j,-j}其中之
一。
IEEE802.11b所采用的CCK码字最早是由Richard van Nee[2]定义的。以一个互补对作为核(kernel),其他互补序列都是由这个核推演出来的。长度为N的二个不同的互补码之间的最小距离为N/2(N=8)个符号。如果N/2个符号最小相位旋转是2π/M,其中M是可能的相位的数量。那么最小欧式距离为
CCK码字在多径信道下的距离也是比较大的,这说明它是一种适合用于多径信道的分组码[3]。
下面列出的公式是802.11b协议所规定的CCK调制中所使用的补码序列的产生公式:
根据这个公式得到的一个长度为8的序列就是用来调制载波进行扩频的补码序列。
图1是对这4种调制方式的总结和比较[4]。
3 基于DSP的扩频功能的实现及优化
3.1测试环境的搭建
笔者采用上海正诺电子的专用指令集DSP来实现基带的处理,其运算速度可以达到160MI/s,能进行矢量的乘累加。调试开发的环境便是基于这种DSP 的实验板,采用DSP+单片机的结构。单片机是Atmel公司的。megal28型机,用来管理系统级事务,包括DSP代码加载、参数传递、上位PC的RS232通信、键盘和显示界面的管理。DSP专司基带信号的处理。此外,通过泰克公司的TLA721型逻辑分析仪(加载了TLA7PG2码型发生器模块)来直接向DSP提供信号和接收处理完的信号。
3.2具体过程的实现
按照802.11b协议中对Long PLCP PPDU格式帧结构的定义,preamble中包含128bit的同步码,preamble和header都以1Mb/s的速率发送。Payload 数据的发送速率由signal决定。
通过逻辑分析仪向DSP发送MPDU数据包,经过I)SP处理后变成PPDU发送.发送的PPDU由逻辑分析仪接收并传给DSP。最后,DSP能够正确完成接收功能,将一开始发送的数据准确地还原出来。
发送和接收的具体程序流程如图2所示。
3.3Barker序列针对该DSP的改进
如果直接按照协议来做,对于lMb/s,2Mb/s速率时的扩频,是直接乘以一组11个chip的barker序列,即+1,一1,+1,+1,一1,+1,+l,+1,一1,一l,一1,那么,就应该把.barkei·序列直接存放在DSP的Flash 中,然后将要发送的数据经过DBPSK或者DOPSK编码之后再和barker序列相乘,来完成信号的扩频。
在实现802.11b协议功能的时候,笔者针对这种DSP在程序上作了改进。因为它是一块fractional类型的定点DSP,小数点在符号位的后面,所以在存储barker序列的时候,将+1改为+0.5即0x00004000(高16位代表虚部,低16位代表实部,下同),将-1改为-0.5,即Ox0000C000进行存储。这样,仍然保留了barker-序列的扩频特性,又不用不断地进行移位定标和截尾操作以防止溢出。
图2
3.4 CCK调制表的压缩
对于5.5Mb/s和11Mb/s采用的CCK调制,不是直接通过和barker序列相乘来实现扩频,而是在CCK调制的过程中完成扩频。5.5Mb/s时,1个symbol发送4个bit,前2位bit(d0,d1)是DQPSK调制,后2位bit(d2,d3)是CCK调制,那么2位bit对应的CCK调制结果就有4组码字:11Mb/s时,1个symbol发送8个bit,前2位bit(d0,d1)是DCQPSK调制,后6位
bit(d2,d3,d4,d5,d6,d7)是CCK调制,那么6位bit对应的CCK调制结果就有64种码字。每一组码字有8个chip,而每个chip占用一个单元的:Flash空间.那么5.5Mb/s和11Mb/s时CCK调制表就将占用(64+4)×8=544个单元的:Flash空间,对于紧张的DSP片内Flash来说无疑显得很大。
本设计采用了一种比较巧妙的办法来解决空间问题:最后CCK调制表中的每组chip无非都是由+1,-1,+j,-j组成的,对应Flash中的存储形式为
Ox00004000,Ox0000C000,Ox40000000.OxC0000000。先将这4组数依次存在Flash中,寻址方式采用相对寻址,那么地址偏移量只需要2个bit:00,01,10,1l。以1lMbps的CCK调制为例,{d2,d3,d4,d5,d6,d7}对应64个数,比如要发送{0,l,1,0,1,0},对应的CCK调制结果为{j,1,-j,1,-j,-l,-j,1},共8个数据,每个数据需要2个bit来进行相对寻址。这一组共需要16个bit,只需要Flash的一个单元的实部就可以存下。{0,1,1,0,1,0}即为十进制的22,那么,可以先设定一个地址基准,然后把对应的16个bit 存放在偏移量为22的那个Flash单元中,在调制时,只需把需要发送的数作为相对寻址的偏移量.找到对应的Flash单元里的16个bit,然后再解压缩出对应的那组CCK码字,就可以完成CCK的调制了。这样,就用64个Flash单元而不是512个Flash单元完成了CCK调制表的存储。
采用了这些简化、优化措施及编程技巧,占用了更少的Flash空间,实现了更高的精度和稳定性。当然,本设计仅仅完成了802.11b最基本的发送和接收功能,可以再加入信道均衡和信道编码等功能,通信质量就可进一步提高。