主要内容

带数据链路层的分组调制解调器

这个例子展示了如何实现一个数据链路层的分组调制解调器[1使用MATLAB®和通信工具箱™。调制解调器具有基于分组的物理层和基于aloha的数据链路层。你可以模拟系统或者使用无线电通信工具箱支持包的USRP®无线电金宝app

必需的硬件和软件

要模拟系统性能,您需要以下软件:

要用无线电测量系统性能,你还需要以下硬件:

  • USRP®收音机(B2xx, N2xx,或X3xx)

以及以下软件

有关通信工具箱支持的SDR平台的完整列表,请参阅的支持硬件部分金宝app软件定义无线电(SDR)发现页面

介绍

分组无线调制解调器是一种通信系统,通过无线信道以分组的方式发送信息。每个调制解调器,也称为一个节点,具有一个物理层,其中的数据包在一个共享的频带上调制、发送和接收,并解调。由于所有节点使用相同的频带,因此需要一种媒体访问控制(MAC)算法来减少由于冲突(即同时传输)而造成的包丢失。数据链路层包括MAC子层和逻辑链路控制子层,用于共享同一信道,并提供两个节点之间的无错误链路。数据链路层又称第二层,位于网络层(第3层)和物理层(第1层)之间。

运行示例

示例代码创建三个分组调制解调器节点对象,并通过一个通道对象将它们连接起来。每个节点都可以向其他两个节点发送数据包。ACKTimeout确定节点确定数据包传输不成功之前的超时时间。ACKTimeout必须大于DATA-ACK交换的往返时间,在本例中为0.21秒。仿真是基于时间的,模拟了完整的物理层处理和数据链路层。

设置仿真参数

runDuration = 10;%秒numPayloadBits = 19530;%比特packetArrivalRate = 0.2;%数据包/秒ackTimeOut = 0.25;% ACK超时,以秒为单位maxBackoffTime = 10;% ackTimeOut中最大回退时间mmaxdataretries = 5;%最大数据重试次数queueSize = 10;%数据包中的数据链路层队列大小samplesPerFrame = 2000;%每次迭代处理的样本数verbose = true;%将数据包活动打印到命令行sampleRate = 200年e3;

修复可重复模拟的随机数生成种子。

rng (12345)

使用。创建分组调制解调器节点HelperPacketizedModemnode.对象。

node1 = helperPacketizedModemNode (“地址”,1,...“DestinationList”(2、3),“NumPayloadBits”numPayloadBits,...“PacketArrivalRate”packetArrivalRate,“ACKTimeOut”ackTimeOut,...“MaxBackoffTime”maxBackoffTime,“MaxDataRetries”mMaxDataRetries,...“QueueSize”,排队,“CarrierDetectorThreshold”1 e-5...“AGCMaxPowerGain”, 65,“SamplesPerFrame”samplesPerFrame,...“详细”详细的,“SampleRate”, sampleRate);node2 = helperPacketizedModemNode (“地址”2,...“DestinationList”,[1 3],“NumPayloadBits”numPayloadBits,...“PacketArrivalRate”packetArrivalRate,“ACKTimeOut”ackTimeOut,...“MaxBackoffTime”maxBackoffTime,“MaxDataRetries”mMaxDataRetries,...“QueueSize”,排队,“CarrierDetectorThreshold”1 e-5...“AGCMaxPowerGain”, 65,“SamplesPerFrame”samplesPerFrame,...“详细”详细的,“SampleRate”, sampleRate);node3 = helperPacketizedModemNode (“地址”3,...“DestinationList”,[1 2],“NumPayloadBits”numPayloadBits,...“PacketArrivalRate”packetArrivalRate,“ACKTimeOut”ackTimeOut,...“MaxBackoffTime”maxBackoffTime,“MaxDataRetries”mMaxDataRetries,...“QueueSize”,排队,“CarrierDetectorThreshold”1 e-5...“AGCMaxPowerGain”, 65,“SamplesPerFrame”samplesPerFrame,...“详细”详细的,“SampleRate”, sampleRate);

属性配置传播通道helperMultiUserChannel对象。

频道= helperMultiUserChannel (...“NumNodes”3,“EnableTimingSkew”,真的,“DelayType”“三角形”...“TimingError”, 20岁,“EnableFrequencyOffset”,真的,...“PhaseOffset”47岁的'surformoffset', 2000,“EnableAWGN”,真的,...“EbNo”25岁的“BitsPerSymbol”2,“SamplesPerSymbol”,4,...“EnableRicianMultipath”, 真的,...“PathDelays”[0 node1.SamplesPerSymbol / node1.SampleRate],...“AveragePathGains”(15 0),“KFactor”15岁的“MaximumDopplerShift”10...“SampleRate”, node1.SampleRate);

主要模拟循环

radioTime = 0;nodeInfo = info (node1);frameDuration = node1.SamplesPerFrame / node1.SampleRate;[rcvd1, rcvd2 rcvd3] =交易(复杂(0 (node1.SamplesPerFrame, 1)));< runDuration trans1 = node1(rcvd1, radioTime);trans2 = node2(rcvd2, radioTime);trans3 = node3(rcvd3, radioTime);%多用户信道[rcvd1, rcvd2 rcvd3] =通道(trans1、trans2 trans3);%更新无线电时间。radioTime = radioTime + frameDuration;结束
# | | | | |联系时间行动Seq倒扣(节点1 ) ----------------------------------------------------------- | 时间| | |联系行动Seq # |倒扣(节点2 ) ----------------------------------------------------------- | 时间| | |联系行动Seq # |倒扣(节点3 ) ----------------------------------------------------------- | 4.46000秒| 3 - > >1 |数据| # 0 | | 4.67000 | 1 < < - 3数据| # | 0 | | 4.67000 | 1 - > > 3 | ACK | # 0 | | 4.68000 | 3 < < - 1 | ACK | # 0 | | 5.04000 | 1 - > > 3 |数据| # 0 | | 5.16000 | 2 - > > 3 |数据| # 0 | | 5.30000 | 1 - > > 3 |退出| # 0 | 1.00000 | | 5.42000 | 2 - > > 3 |退出| # 0 | 1.00000 | | 6.31000 | 1 - > > 3 |数据| # 0 | |6.43000 s | 2 - > > 3 |数据| # 0 | | 6.57000 | 1 - > > 3 |退出| # 0 | 2.25000秒| | 6.69000 | 2 - > > 3 |退出| # 0 | 1.75000秒| | 8.45000 | 2 - > > 3 |数据| # 0 | | 8.66000 | 3 < < - 2数据| # | 0 | | 8.66000 | 3 - > > 2 | ACK | # 0 | | 8.67000 | 2 < < - 3 | ACK | # 0 | | 8.83000 | 1 - > > 3 |数据| # 0 | | 9.09000 | 1 - > > 3 |后退| # 0 | 2.25000秒| | 9.52000 | 3 - > > 2 |数据| 1 | | 9.73000 | 2 < < - 3 |数据| 1 | | 9.73000 | 2 - > > 3 | ACK | 1 | | 9.74000 | < < 3 - 2 | | # 1 |消

结果

分组调制解调器节点对象对数据链路层算法的性能进行统计。调用信息方法来访问这些统计信息。这里显示了10秒模拟时间下的数据包到达率为0.2包/秒的示例结果。每个数据包的长度为200毫秒。

显示统计信息

nodeInfo (1) = info (node1);nodeInfo (2) = info (node2);nodeInfo (3) = info (node3);p = 1:长度(nodeInfo)流(“\ nNode % d: \ n”,p);fprintf(“\ tNumGeneratedPackets: % d \ n”nodeInfo (p) .NumGeneratedPackets)流(“\ tNumReceivedPackets: % d \ n”nodeInfo (p) .NumReceivedPackets)流(“\ tAverageRetries: % f \ n”nodeInfo (p) .Layer2.AverageRetries)流(“\ tAverageRoundTripTime: % f \ n”...nodeInfo (p) .Layer2.AverageRoundTripTime)流(“\ tNumDroppedPackets: % d \ n”...nodeinfo(p).layer2.numdroppedpackets)fprintf('\tNumDroppedPackets (Max retries): %d\n'...nodeInfo (p) .Layer2.NumDroppedPacketsDueToRetries)流(“\ tThroughput: % d \ n”...numPayloadBits / nodeInfo(p).Layer2.AverageRoundTripTime)“\ tLatency: % d \ n”nodeInfo (p) .Layer2.AverageLatency)结束
节点1:NumGeneratedPackets: 2 NumReceivedPackets: 1 AverageRetries:南AverageRoundTripTime:南NumDroppedPackets: 0 NumDroppedPackets (Max重试):0吞吐量:南延迟:正节点2:NumGeneratedPackets: 1 NumReceivedPackets: 1 AverageRetries: 2.000000 AverageRoundTripTime: 3.509844 NumDroppedPackets: 0 NumDroppedPackets (Max重试):0 Throughput: 5.564350e+03 Latency: 2.104687e-01 Node 3: NumGeneratedPackets: 2 NumReceivedPackets: 1 AverageRetries: 0.000000 AverageRoundTripTime: 0.220254 NumDroppedPackets: 0 NumDroppedPackets (Max retries): 0 Throughput: 8.867039e+04 Latency: 1.749922e+00

数据链路层(第2层)

这个例子实现了一个基于ALOHA随机访问协议的数据链路层[2].下面的流程图展示了ALOHA协议如何传输和接收数据包。

当数据链路层有一个第三层包要传输时,它开始一个新的会话,并立即使用一个数据包发送该包。算法等待一个确认(ACK)包。如果在超时时间之前没有收到ACK,它将返回一个随机的时间量,并再次发送数据包。如果在多次重试后未能接收到ACK,则丢弃数据包。如果在此会话期间,收到一个新的第三层数据包,则将该第三层数据包放入FIFO队列中。如果FIFO队列满,则丢弃报文。

算法在helperPacketizedModemDataLinkLayer辅助系统对象™。的helperPacketizedModemDataLinkLayer系统对象定义了一个有三种状态的状态机:IDLE、ACK_WAIT和BACKOFF。下面的状态机描述了数据链路层算法在该对象中是如何实现的。括号中的语句,[…]]、大括号、{…}分别为条件和动作。小圆是用来表示多种情况的传递状态。

原始的ALOHA协议使用hub/star拓扑结构。上行和下行链路使用两个独立的频带。下面的示例采用网状网络拓扑,其中节点使用相同的频带发送和接收。

调制解调器的结构

调制解调器的代码结构执行以下六个主要的处理部分:

  1. 源控制器

  2. 消息生成器

  3. PHY译码器

  4. 数据链路层

  5. 消息解析器

  6. PHY编码器

数据链路层处理信息生成器和PHY解码器的输出,因此它必须在这两个操作之后运行。信息解析器和PHY编码器处理数据链路层的输出。这个序列确保调制解调器可以接收数据包并在相同的时间间隔内对它们作出响应。的HelperPacketizedModemnode.对象实现调制解调器。

源控制器

源控制器基于用户选择的分组到达分布生成使能信号和随机目的地地址。

消息生成器

消息生成器在源控制器启用时启动创建第3层数据包。数据包包含数字化的文本消息。如果消息不适合一个数据包,则生成器会创建多个数据包。数据包结构如下:

  • To Address: 8位

  • From Address: 8位

  • Packet Number: 16比特

  • 有效载荷:M比特

PHY译码器

PHY解码器接收基带I/Q样本并创建第2层包。PHY解码器可以纠正振幅变化使用AGC,频率偏移与频率偏移估计器和补偿器,和定时歪斜和多径使用分数间隔的判决反馈均衡器(DFE)。物理层(layer 1)接收机框图如下:

当数据有效载荷大小设置为19530位时,调制解调器的总包长度为39956个样本。现代过程SamplesPerframe.每次迭代的示例,即本例的2000个示例。一个更小的SamplesPerframe.结果在较小的延迟,但增加调制解调器算法的开销。增加的开销可能会增加处理时间,使调制解调器不再实时运行。

数据链路层

数据链路层提供两个相邻节点之间的链路。它采用了基于aloha的协议数据链路层(第2层)部分。数据包结构包含以下字段:

  • 类型:4位

  • 版本:2位

  • 保留:2位

  • To Address: 8位

  • From Address: 8位

  • 序列号:8位

  • 时间戳:32位

  • 有效载荷:N (= M+32)位

数据链路层还会收集以下统计信息:

  • 成功传输报文数,定义为成功接收到的ACK报文数

  • 平均重试

  • 平均往返时间(秒)

  • 由于三层包队列满而导致的丢包数

  • 由于重试而丢失的报文数

  • 吞吐量定义为成功的数据传输速率,单位为比特/秒

  • 平均延迟时间(以秒为单位)定义为从产生第三层数据包到目的节点接收它之间的时间

消息解析器

消息解析器解析收到的第2层负载并创建第3层包。消息解析器会收集以下统计信息:

  • 接收报文数

  • 接收到的重复报文数

PHY编码器

PHY编码器通过将第2层包调制成基带I/Q样本来创建物理层包。这里显示了数据包结构。

虚拟符号用于AGC训练和载波检测。同步符号是一个调制pn序列。报头有以下字段:

  • 有效载荷长度:16位

  • CRC: 16位

这幅图像显示了物理层(第1层)发射机的框图。

通道模型

此示例模拟三节点网络,但可以模拟任意数量的节点。每个节点的输出都传递给通道模拟器。信道将所有三个节点的基带信号累加在这些信道损伤之后:

  • 时间倾斜

  • 频率偏移

  • Rician多路径

  • 情况下

除了这些损伤外,来自相邻节点的信号的路径损耗为20 dB,而自干扰则直接加入。

运行使用收音机

您还可以使用无线电而不是模拟信道来运行这个示例。SDR硬件和运行MATLAB会话的主机的组合包括一个节点。以下步骤展示了如何设置三节点网络。本例使用USRP®B200和B210收音机。

1)将USRP®收音机连接到主机a,我们称之为节点1。按照下面的说明安装和设置USRP无线电通信工具箱支持包金宝app安装和设置您的主机使用USRP®无线电。启动一个MATLAB会话。

2)将节点1设置为发射机进行初始化。的helperPacketizedModemInitializeRadio初始化连接的USRP®无线电。运行helperPacketizedModemInitializeRadio('tx',平台,地址,FC, RT),其中PLATFORM是USRP®收音机的类型,ADDRESS是序列号或IP地址,FC是中心频率,RT是以秒为单位的运行时间。本例使用915mhz作为中心频率。假设您的收音机是一个序列号为“ABCDE”的B200,函数调用将为helperPacketizedModemInitializeRadio('tx', 'B200', 'ABCDE', 915e6, 120).这个功能将使发射机运行120秒。如果您需要更多的时间来完成初始化,请使用更长的运行时间重新运行命令。

3)对第二台收音机和主机重复步骤1,并将此节点称为节点2。

4)将节点2设置为初始化的接收器。运行[CDT, MAXGAIN, RXGAIN] = helperpacketizedmodeminitializerradio ('rx',平台,地址,FC, RT).假设您的收音机是一个序列号为“12345”的B210,该函数调用将是[CDT1, MAXGAIN1, RXGAIN1] = helperPacketizedModemInitializeRadio('rx', 'B210', '12345', 915e6, 120).该函数将一直运行,直到它确定载波检测器阈值(CDT)、最大AGC增益(MAXGAIN)和无线电接收增益(RXGAIN)的最佳值,或者直到RT秒已经过去。如果初始化算法不能确定合适的参数,它可能建议增加或减少发射机功率并重新尝试初始化。

5)以节点1为接收机,节点2为发射机,进行相同的实验,确定节点1的最佳接收机参数。在大多数情况下,通道应该是双的,参数将非常接近。

6)对所有其他无线电对重复步骤1-5,即节点1和节点3,节点3和节点2。获取每个节点的CDT、MAXGAIN和RXGAIN值。如果在初始化不同链接时获得相同节点的不同值,则为MAXGAIN和RXGAIN选择最大值,为CDT选择最小值。

7)通过运行HelperPacketizedModemradio.helper函数。使用命令helperPacketizedModemRadio (P,风湿性关节炎,NA,哒,FC, CDT, MAXG, RGAIN, D),其中P为平台,RA为无线电地址,NA为节点地址,DA为目的地址列表,FC为中心频率,CDT为载波检测阈值,MAXG为最大AGC增益,RGAIN为无线电接收机增益,D为持续时间。例如,运行为helperPacketizedModemRadio (' B200 ', '中的',1 2 3,915 e6, CDT1, MAXGAIN1, RXGAIN1,120)

8)通过运行启动节点2helperPacketizedModemRadio (' B210 ', ' 12345 ', 2、3 [1],915 e6, CDT2, MAXGAIN2, RXGAIN2,120)

9)通过运行启动节点3helperPacketizedModemRadio(‘B200’,‘A1B2C 3 [1 - 2], 915 e6, CDT3, MAXGAIN3, RXGAIN3,120)

10)一旦会话结束,每个节点打印出自己的统计信息。

三个网络设置运行了两个小时。根据泊松分布,每个节点以0.2包/秒的速率生成数据包。节点放置的距离大致相等。其中一个链接有视线,而另外两个没有。以下是在所有三个节点上收集的结果。往返时间以来DATA-ACK交换使用B2xx无线电连接USB可以高达800毫秒,网络的平均往返时间大于3秒。该算法最小化包丢失和提供一个公平的访问向所有节点共享信道。

Node 1: NumGeneratedPackets: 1440 NumReceivedPackets: 1389 AverageRetries: 0.533738 AverageRoundTripTime: 3.725093 NumDroppedPackets: 95 NumDroppedPackets (Max retries): 23 Throughput: 5.242823e+03
Node 2: NumGeneratedPackets: 1440 NumReceivedPackets: 1340 AverageRetries: 0.473157 AverageRoundTripTime: 3.290775 NumDroppedPackets: 31 NumDroppedPackets (Max retries): 9 Throughput: 5.934772e+03
Node 3: NumGeneratedPackets: 1440 NumReceivedPackets: 1385 AverageRetries: 0.516129 AverageRoundTripTime: 3.558408 NumDroppedPackets: 107 NumDroppedPackets (Max retries): 29 Throughput: 5.488410e+03

讨论

的模拟代码HelperPacketizedModemradio.Helper函数都利用HelperPacketizedModemnode.系统对象实现调制解调器节点。在此示例中,相同的代码用于评估系统,首先使用模拟通道,然后使用SDR硬件和超空气通道。

即使使用模拟通道的代码是基于时间的,调制解调器节点对象也可以用于运行基于事件的模拟。此示例不提供基于事件的模拟内核。

进一步的探索

您可以改变这些参数来研究它们对数据链路层性能的影响:

  • packetarrialrate.

  • ACKTimeOut

  • MaxBackoffTime

  • MaxDataRetries

  • QueueSize

您还可以探索实现算法的实现细节的辅助功能:

属性只能检查物理层的性能PacketizedModemPhysicalLayerTxRxExample脚本。

选定的参考书目

版权声明

Universal Software RadioPerizalal®和USRP®是国家仪器公司的商标。