1、认知无线电 MAC 层与应用层仿真软件 v1.0 1第一章 认知无线电 MAC 层与应用层仿真软件1.1 技术背景随着无线通信技术的飞速发展,频谱资源变得越来越紧张。目前的频谱分配制度为固定频谱分配,将频谱分为授权频段(LFB)和非授权频段(UFB)两类。大部分的频谱资源被用作授权频段(如电视广播频段) ,得到授权频段的团体或个人长期独占该频谱使用权;非授权频段的频谱资源要少的多,一般采用竞争方式接入使用。随着无线通信业务的迅猛发展,非授权频段的业务量已趋于饱和。另一方面,授权频段的频谱资源利用率却非常低,美国联邦通信委员会频谱策略任务工作报告给出的时间和空间上的统计结果表明,各种无线系统的总
2、频谱利用率在 10以下。目前的频谱管理存在的主要矛盾在于:频谱使用是动态的,但频谱分配是固定的;频谱是稀有资源,但频谱利用率不高,且存在大量空闲;可分配频谱少,但频谱需求量大。导致这些矛盾的根本原因在于固定分配频谱方案和独占频谱使用权(即业务接入权或频谱准入权)原则,因此,现阶段最实际的办法是改变业务接入权或频谱准入权,以开放频谱使用,提高频谱使用效率和充分利用空闲频谱。认知无线电(Cognitive Radio, CR)技术就是在这样一种背景下出现的。它由J.Mitola 博士在 1999 年提出,被认为是解决当前频谱缺乏现状的一个有效手段。认知无线电提供了一种“机会方式(Opportuni
3、stic Way)”共享和利用频谱的手段,可以有效地解决问题。认知无线电的核心思想就是使无线通信设备具有发现“频谱空穴”并合理利用的能力,所谓“频谱空穴(Spectrum Holes)”就是在空域、时域和频域中出现的可以被利用的频谱资源。认知无线电自出现伊始,就受到国内外的强烈关注。IEEE 专门组织了两个重要的国际学术会议 IEEE CrownCom 和 IEEE DySPAN 交流认知无线电方面的成果,许多国际期刊如IEEE 的重要刊物也都组织了关于认知无线电、动态频谱接入的专辑。此外,对于实验验证系统的开发,目前已有多个实验系统正在开发之中,例如:德国 Karlsruhe 大学提出的频谱
4、池系统、欧盟的 E2R 项目和 DRiVE/OverDRiVE 项目,美国加州大学伯克利分校研究组开发的 CORVUS 系统、美国乔治亚理工学院宽带和无线网络实验室提出的 OCRA 项目 、美国军方 DARPA 的 xG 项目以及正在标准化的全球首个基于认知无线电技术的无线区域网标准IEEE802.22 等。这些系统的开发,能够很好的验证认知无线电的基本理论,推动认知无线电关键技术的发展,并对在认知无线理论、频谱感知、数据传输、网络架构和协议设计等方面技术问题的进一步地完善提供宝贵的研究成果。国内关于认知无线电的研究从 2002 开始,电子科技大学、北京邮电大学、北京交通大学等多所高校及一些科
5、研机构纷纷投入到该项目的研究中。2005 年,国家“863”面向“十一五”快速启动引导课题资助了“认知无线电技术研究”项目,电子科技大学、西安电子科技大学和西安交通大学联合开展了对认知无线电技术的研究并取得了一些成果。2009 年初,国家高技术研究发展计划 (863 计划) 在信息技术领域设置了 “频谱资源共享无线通信系统”重点项目,北京交通大学和国内的其它一些高校、科研机构及生产厂商都参与到这个项目,电子科技大学等四家单位正在联合研制原型系统。国家 863 计划“频谱资源共享无线通信系统”重点项目的研究目的,是突破频谱资源共享无线通信系统的关键技术,研究与现有系统共存的宽带无线通信系统;进行
6、频谱资源共享无线通信系统的应用研究,并在 698806MHz 频段进行演示验证;建立动态频谱共享认知无线电 MAC 层与应用层仿真软件 v1.0 2系统的测试评估体系和相应的测试方法,并进行系统级关键技术的测试评估。为无线通信多系统的融合与创新发展奠定技术基础,并为我国参与相关技术的国际标准化,特别是参加 WRC 2011 提前做好准备。整个项目的研发分为六个课题:课题 1 为动态频谱资源共享宽带无线通信系统验证网络开发;课题 24 为支撑动态频谱资源共享的新技术研究;课题5 为动态频谱资源共享技术评估与测试研究;课题 6 为动态频谱资源共享技术标准与应用研究。项目中的子课题 5:“动态频谱资
7、源共享技术评估与测试”为上海无线通信研究中心负责,北京交通大学协作研究的课题。本软件平台设计的总体目标是建立动态频谱共享系统 MAC 层和应用层优化算法的测试评估体系和测试方法,并提供可视化的操作界面,方便用户进行仿真测试,为我国无线通信多系统的融合与创新发展奠定技术基础。1.2 平台设计目的认知无线电 MAC 层与应用层仿真平台提供用户可自定义的外部参数(各个节点的感知能力;接收信噪比;误警概率、漏警概率;主用户行为等)和所嵌入算法的运行参数接口,用户可以在界面上输入相应的运行参数。在所有的数据输入和外部条件完全一致的情况下,比较不同优化算法在仿真平台的 MAC 层及应用层上的运行情况,对这
8、些算法的各项性能指标进行比较,评价各种算法在不同仿真环境下的优劣及性能。1.3 平台设计环境:GUI 操作界面:采用 QT4 及 Eclipse+JDK 在 Ubuntu 下开发MAC 层及应用层模块:采用 ns-2.31 和 VC+6.0 开发 第二章 MAC 层仿真系统设计方案2.1 集中式 MAC 层仿真平台集中式 MAC 层平台的基本特点是小区中心有一个固定基站或者叫固定节点,其他移动节点分布在基站周围。中心节点负责各种信息的管理和调度以及通信中转,移动节点可能会负责收集信息、执行指令,也会有自己的通信需求。集中式网络类似与蜂窝网络,就是利用基站控制节点的通信及各种信息。这种网络管理方
9、便,用户节点构造也相对简单且入网灵活。本仿真平台中的集中式 MAC 层仿真平台的系统模型如下:认知无线电 MAC 层与应用层仿真软件 v1.0 3LQueMACWirlsPHYut-chanel LQueMACWirlsPHYut-chanel LQueMACWirlsPHYut-chanelLQueMACWirlsPHYut-chanel LQueMACWirlsPHYut-chanel可 用 信 道 列 表正 在 利 用 列 表未 知 信 道 列 表信 道 信 息 表ACK表信 道 申 请 与答 复数 据 数 据图 1 集中式 MAC 层仿真平台系统模型这是一个典型的次用户小区,其中有一个
10、基站节点和五个 CR 移动节点。如果节点之间想要通信,必须首先向基站节点发送信道请求。在基站返回可用信道之后,使用该信道与目标节点通信。基站定期的根据感知调度算法向周围节点广播感知任务,告知每个节点所要感知的信道。节点在执行信道检测之后,将相应的感知结果返回给基站。基站会集中对信道的可用性进行判决,并根据结果维护可用信道列表,未知信道列表等表项。在下一个感知阶段开始时,根据这些表项重新发送感知任务。如果某节点有通信请求,基站就会通过指令给这个节点指派一个可用信道。从细节上看,集中式 MAC 层仿真环境必须建立一下几个功能模块:2.1.1 基站 MAC 层模块基站部分 MAC 主要有三方面的主要
11、功能,即数据传递、信道分配和感知调度。相应地,就有三个功能模块来实现这些功能。认知无线电 MAC 层与应用层仿真软件 v1.0 4Que数 据 传 送 信 道 分 配 感 知 调 度WirelsPHY图 2 仿真平台 MAC 层基站部分功能模块各个模块的具体功能详述如下: 数据传递模块 :负责上下层普通数据包和路由等信息的传递与处理。 信道分配模块 :负责从感知调度模块中获取可用信道列表。如果通信节点有与其他节点的通信需求并向基站发送信道申请,该模块负责分配可用信道。如果检测到主用户出现,则向正在利用该信道的通信节点重新发送信道分配指令,使通信节点进行信道切换。基站的信道分配模块会从所维护的可
12、用信道列表中选取新的可用信道分配给通信节点节点。 感知调度模块 :在一个时隙内,根据特定的感知调度算法算法给每个待检测信道分配检测节点个数和节点 ID。2.2.2 节点 MAC 层模块CR 节点部分的 MAC 层平台主要的功能也有三项:数据传送、信道切换和感知信息交互,分别由以下三个功能模块实现,见图 3: Que数 据 传 送 信 道 分 配 感 知 信 息 交 互WirelsPHY图 3 检测节点部分功能模块各个模块的具体功能详述如下:认知无线电 MAC 层与应用层仿真软件 v1.0 5 数据传递模块:负责上下层普通数据包的传递与处理。 信道切换:同基站进行交互。第一次通信时会向基站发送信
13、道申请,然后进行通信。如果收到基站的信道切换执行,则会向物理层发出信道切换指令,指示做出信道切换动作。 感知信息交互模块:该模块有两个功能:第一,从基站接收感知调度指令。第二,根据感知调度指令,指示 PHY 进行实际感知,然后将物理层反馈回来的感知结果告知基站。2.2.3 定时器模块在任何一个仿真平台中,定时器模块是必不可少的。在离散事件驱动式仿真器 NS2 中,它负责在固定的时间之后启动或终止某个事件等。一个很明显的应用定时器的例子就是上文提到的感知任务分发事件。在本平台中,每隔 5s,基站的感知任务分发定时器就会启动,向小区内的所有节点广播感知任务,如图 4 所示:BJTUmac初 始 化
14、启 动 Sensiger周 期 广 播 感 知 信 息BJTUmac:SendIfoDwn()反 馈 感 知 信 息BJTUmac:sendIfoUp() 反 馈 感 知 信 息BJTUmac:sendIfoUp() 反 馈 感 知 信 息BJTUmac:sendIfoUp()基 站节 点 1 N图 4 感知任务分发与上交过程当定时器到时,将会启动感知任务分发程序,基站节点使用 sendInfoDown 函数定时的向各个节点广播各自的感知任务(需感知的信道) 。在 CR 节点接受到任务信道以后,各个节点开始感知目标信道,使用 sendInfoUp 函数将相应的感知结果返回基站。认知无线电 MA
15、C 层与应用层仿真软件 v1.0 62.2 平台具体实现2.2.1 集中式 MAC 层平台的 C+类有了仿真平台的功能描述,我们可以来详细设计 MAC 仿真平台的 C+代码部分。我们针对基站式 MAC 仿真平台设计了一个 C+类,下面是一些主要的函数和变量:class BJTUmac : public Macpublic :BJTUmac();BJTUmac();void sendInfoUp();void sendInfoDown();void sendChanRA();void sendACK();void send();void recv(Packet* p, Handler* h);i
16、nt UnknownChanAllo(int i); int ChanAllo(int i); double ChanSNRGenerate(); void AvailJudge(int i); int GetChanSNR();protected:BsAckTimer BsAckTimer_;AsAckTimer AsAckTimer_;SensingTimer SensingTimer_;void BsAckTimerHandler();void AsAckTimerHandler();void SensingTimerHandler();int NodeID;int ChanToSens
17、e_NODE_NUM; int AvailChanTableCHAN_NUM; int UnknownChanTableCHAN_NUM; int BusyChanTableCHAN_NUM; double ChanSNRCHAN_NUM; private:int First; int mytaskchanid; int chansnr; int SsAckFlag; int CommChan; 认知无线电 MAC 层与应用层仿真软件 v1.0 7;该类是 MAC 层平台的主类,位于 BJTUmac.cc 文件中。定时器和其他辅助类在这里就不再赘述。2.2.2 模块主要函数和应用样例上一节中所
18、提到的六个功能模块,在这里用多个函数组合实现,其中:数据处理模块:send()函数和 Recv()函数信道分配模块:ChanAllo()函数感知调度模块:UnknownChanAllo(),AvailJudge(int i),CalculateUn(), CalculateChanLR()函数 信道切换模块:BJTUmac:Recv()函数 ,Channel:Recv()函数 感知交互模块:SendInfoUp(),SendInfoDown()函数 假如某个信源节点已经和信宿节点连接成功,并开始发送数据包。则其数据下行过程传输如下: L上 层 数 据BJTUmac:rev()数 据 流 向 ?
19、 UPdowntarget-rcv()DOWN首 次 发 送 ?向 基 站 发 送 信 道 请 求BJTUmac:SendChaRA()基 站 返 回 可 用 信 道ChanRetur=XYES给 发 送 信 道 赋 值hdr-canelidx_=ChanReturNOWirelsPHY:send()Chanel:rcv()转 至 信 宿 节 点 接 收图 5 某节点的数据下行过程数据包具体的下行过程是这样的:1. BJTUmac:recv()函数从 LL 层获取到数据包,并判断数据流向。2. 如果发现数据包的“流向”一栏关键字表示流向向上,则返回 LL 层。否则调用Downtarget-re
20、cv()函数,以使 PHY 层进行接收。3. 此时系统需要判断这次通信是否是首次发送。如果是,则向基站发送信道请求认知无线电 MAC 层与应用层仿真软件 v1.0 8(BJTUmac:sendChanRA()并将基站反馈回来的的信道存储。如果不是,则使用存储的信道,调用 WirelessPHY:recv()/wirelessPHY:send()函数发送至信道 Channel:recv(),通过该函数将数据包发送出去。再假如,如果需要对某感知调度算法进行评估,可以将感知调度算法具体成代码指令,填充到 UnknownChanAllo() ,AvailJudge(int i), CalculateU
21、n(), CalculateChanLR()等几个函数:然后进行下面这个流程:v o i d B J T U m a c : : r e c v ( P a c k e t * p , H a n d l e r * h )v o i d B J T U m a c : : s e n d I n f o D o w n ( )v o i d B J T U m a c : : s e n d I n f o U p ( )主用户行为模型v o i d B J T U m a c : : r e c v ( P a c k e t * p , H a n d l e r * h )v o i
22、d B J T U m a c : : C a l c u l a t e C h a n L R ( )v o i dB J T U m a c : : A v a i l J u d g e ( i n t i )v o i dB J T U m a c : : C a l c u l a t e U n ( )i n t B J T U m a c : : U n k n o w n C h a nA l l o ( i n t c h a n i d e x )节点 基站某一时隙图 6 MAC 层平台下感知调度算法的函数调用流程下面是具体的流程说明1. BJTUmac:UnknownC
23、hanAllo()函数根据基站维护的未知信道列表选择所有未知信道 ID 和对应的责任 CR 检测用户表项,交给 BJTUmac:SendInfoDown()2. BJTUmac:SendInfoDown()函数把收到的表项通过广播的形式下发。3. CR 节点通过 BJTUmac:recv()函数接收到表项以后提取自己 ID 对应的目标检测信道。通过对主用户模型的对应查找(模拟感知行为)到目标信道的能量值。将该能量值通过 BJTUmac:SendInfoUp()函数4. BJTUmac:SendInfoUp()函数把目标检测信道的能量值反馈给基站。5. 基站的 BJTUmac:recv()函数负
24、责接收能量值并传递给BJTUmac:CalculateChanLR()函数。6. BJTUmac:CalculateChanLR()函数通过收集到的各个节点反馈回的能量值计算对应信道的信道似然比,交予 BJTUmac:AvailJudge()函数进行可用性判断。7. BJTUmac:CalculateUn( )函数根据信道似然必计算下一轮感知所需的具体信息,供下一轮的 BJTUmac:UnknownChanAllo()函数调用。认知无线电 MAC 层与应用层仿真软件 v1.0 9第三章 应用层仿真系统设计方案3.1 应用层实时视频传输仿真平台架构如图 7 所示:JM 编码器读入 YUV 视频测
25、试序列并进行编码,将编码后得到的发送的帧序号,包序号,包类型,包大小,AMC 模式送入 NS2 传输层 TFRC 模块,再由传输层发送到MAC 层。发送节点的 MAC 层在发送数据包前读取接口子层信息,将当前信道的信噪比和发送速率通过接口发送给传输层,再由传输层发送给 JM 编码器,编码器收到传输层发送的底层信息后进行下一帧的编码。接收节点的 MAC 层接收到数据分组后再通过接口将确认的帧序号,确认的包序号,对应序号包的接收情况发送至 JM 解码器。JM 解码器就可以进行实时解码。待整个测试序列都传输完毕后,将测试序列和解码后的恢复序列送至评估模块进行主客观的评价(PSNR 和 MOS 比较)
26、 。误码率和延时这两个仿真输出参数通过 NS2 仿真的输出文件*.tr 中分析得出。J M 1 6 . 1 编 码器数 据 交 换 接 口T F R CM A C 层认 知 接 口 子 层T F R C - S i n kM A C 层信道J M 1 6 . 1 解 码 器( 重 建 修 复 序 列 )Y U V 视 频源 序 列性 能 评 估 模 块播 放客 观 评 价 主 观 评 价P S N R 、M D I 计 算N S 2 仿真网络图7 认知无线电应用层仿真平台框架图3.2 NS2 中实时视频传输的实现原理在 NS2 中传输的数据是一个被标记了长度的抽象数据分组,因此仿真需要将视频数
27、据中的包长度信息提取出来,并且按照视频帧率的时间要求定时将这些抽象分组单元发送到传输层及下面的网络中。故在将视频源引入认知网络前首先让视频源文件通过解析程序变成抽象分组(在编码器中实现):因为虽然选用了编码形成 RTP 包的形式,但在 JM 软件编码器中形成的是视频编码文件,为了区分分组与分组的间隔,在每个封装的 RTP 分组前面提供 8 字节的 NAL 封装头,其中 4 个字节指示了该数据分组的长度,另外 4 字节指示时间戳信息。这样依据这 8 个字节就能区分出数据分组之间的隔断(如图 8 所示),认知无线电 MAC 层与应用层仿真软件 v1.0 10N A L 封装头R B S PN A
28、L 封装头R B S PN A L 封装头封包长度 ( 4 字节 )时间戳 ( 4 字节 )图 8 RTP 包格式在 NS2 中,根据外部的跟踪文件 traffictrace 类产生业务,跟踪文件的每一个记录应包含两个 32 位的信息:第一个信息是产生下一个包的间隔时间;第二个信息是下一个包的字节数。因此,为了实现 H.264 数据在仿真的认知网络中传输,首先要从视频中解析出包长和包产生时间两种信息,并依据提取信息生成符合 traffictrace 类要求格式的跟踪文件,依照文件信息在应用层上相应产生数据分组。根据上面叙述的原理,以编码器编码后的输出*.264 为解析源,在 Visual C+环境平台下修改编码器,编写基于 H.264 的解析程序,提取 NS2 传输需要的信息,解析程序流程图如图 9 所示。开始读 N A L 封装头 ( 8 字节 )读 R T P 头信息 ( 8 字节 )读入帧类型( 数据首字节低 5 位 )读起始宏块位置( 第 2 字节开始的 U V L C 单元 )该字节值是否为 0C u r r e n t f r a m e + +计算 p k t t i m e输出到跟踪文件设置帧类型参数P k t s i z e = 包字节数否是图 9 视频解析程序流程图