打包调制解调器,数据链路层

这个例子说明了如何实现与数据链路层的分组调制解调器[1]使用MATLAB®和通信工具箱™。调制解调器设有一个基于分组的物理层和基于ALOHA的数据链路层。您可以模拟系统或运行使用无线电设备的通讯工具箱支持包USRP®收音机金宝app

需要的硬件和软件

为了模拟系统的性能,你需要以下软件:

为了测量与无线电系统的性能,还需要以下硬件:

  • USRP®无线电(B2xx,N2xx,或X3xx)

和下面的软件

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

介绍

分组无线调制解调器是通信系统,在突发发送信息通过无线信道被称为分组。每个调制解调器,也被称为节点,设有其中数据包被调制,并发送在共享频带中接收和解调的物理层。由于相同的频带用于由所有节点中,介质访问控制(MAC)算法是必需的,以减少分组丢失由于碰撞(即同时传输)。数据链路层包括MAC子层和逻辑链路控制子层共享相同的信道,并提供在两个节点之间一个无差错连接。数据链路层也被称为第2层和网络层(第3层)和物理层(层1)之间位于。

运行实施例

要运行例如,键入PacketizedModemNetworkExample在MATLAB命令窗口或点击链接。示例代码创建了三个分组调制解调器节点对象,并通过信道对象连接它们。每个节点都可以发送数据包到其他两个节点。确认的超时确定超时持续时间之前的节点确定该数据分组传输未成功。确认的超时必须大于一个DATA-ACK交换,这是0.21秒这个例子的往返持续时间越大。该模拟是基于时间的,并与数据链路层模拟的完整物理层处理一起。

%设定模拟参数runDuration = 10;百分之一秒numPayloadBits = 19530;位%packetArrivalRate = 0.2;每秒%包确认的超时= 0.25;%ACK以秒超时maxBackoffTime = 10;%最大退避时间中确认的超时持续时间mMaxDataRetries = 5;%最大数据重试QUEUESIZE = 10;在分组%数据链路层队列大小samplesPerFrame = 2000;处理过的样品的%数每次迭代冗长= TRUE;%打印分组活动命令行采样率= 200e3;%修正的随机数生成种子可重复模拟RNG(12345)%创建分组调制解调器节点节点1 = helperPacketizedModemNode(...'地址'1,...'DESTINATIONLIST',[2,3],...'NumPayloadBits',numPayloadBits,...'PacketArrivalRate',packetArrivalRate,...“确认的超时”,确认的超时,...'MaxBackoffTime',maxBackoffTime,...'MaxDataRetries',mMaxDataRetries,...'QUEUESIZE',QUEUESIZE,...'CarrierDetectorThreshold',1E-5,...'AGCMaxPowerGain'65,...'SamplesPerFrame',samplesPerFrame,...“放牧”,详细,...'采样率', 采样率);节点2 = helperPacketizedModemNode(...'地址',2,...'DESTINATIONLIST'[1 3],...'NumPayloadBits',numPayloadBits,...'PacketArrivalRate',packetArrivalRate,...“确认的超时”,确认的超时,...'MaxBackoffTime',maxBackoffTime,...'MaxDataRetries',mMaxDataRetries,...'QUEUESIZE',QUEUESIZE,...'CarrierDetectorThreshold',1E-5,...'AGCMaxPowerGain'65,...'SamplesPerFrame',samplesPerFrame,...“放牧”,详细,...'采样率', 采样率);节点3 = helperPacketizedModemNode(...'地址',3,...'DESTINATIONLIST'[1 2],...'NumPayloadBits',numPayloadBits,...'PacketArrivalRate',packetArrivalRate,...“确认的超时”,确认的超时,...'MaxBackoffTime',maxBackoffTime,...'MaxDataRetries',mMaxDataRetries,...'QUEUESIZE',QUEUESIZE,...'CarrierDetectorThreshold',1E-5,...'AGCMaxPowerGain'65,...'SamplesPerFrame',samplesPerFrame,...“放牧”,详细,...'采样率', 采样率);%设置信道信道= helperMultiUserChannel(...'NumNodes',3,...'EnableTimingSkew',真实,...'DelayType''三角形'...'TimingError'20,...'EnableFrequencyOffset',真实,...'PhaseOffset'47,...“频偏”,2000年,...'EnableAWGN',真实,...'的EbNo'25,...'BitsPerSymbol',2,...'SamplesPerSymbol'4,...'EnableRicianMultipath',真实,...'PathDelays',[0 node1.SamplesPerSymbol / node1.SampleRate]...'AveragePathGains'[15 0],...“K系数”15,...'MaximumDopplerShift'10,...'采样率',node1.SampleRate);%主回路radioTime = 0;的nodeinfo =信息(节点1);frameDuration = node1.SamplesPerFrame / node1.SampleRate;[rcvd1,rcvd2,rcvd3] =交易(络合物(零(node1.SamplesPerFrame,1)));radioTime %的多用户信道[rcvd1,rcvd2,rcvd3] =信道(反-1,TRANS2,trans3);%更新无线电时间。radioTime = radioTime + frameDuration;结束
|时间|链接|动作|SEQ#|退避----------------------------------------------------------- |4.46000 S |3  -  >> 1 |数据|#0 | | 4.67000 s | 1 <<- 3 | DATA | # 0 | | 4.67000 s | 1 ->> 3 | ACK | # 0 | | 4.68000 s | 3 <<- 1 | ACK | # 0 | | 5.04000 s | 1 ->> 3 | DATA | # 0 | | 5.16000 s | 2 ->> 3 | DATA | # 0 | | 5.30000 s | 1 ->> 3 | Back Off | # 0 | 1.00000 s | | 5.42000 s | 2 ->> 3 | Back Off | # 0 | 1.00000 s | | 6.31000 s | 1 ->> 3 | DATA | # 0 | | 6.43000 s | 2 ->> 3 | DATA | # 0 | | 6.57000 s | 1 ->> 3 | Back Off | # 0 | 2.25000 s | | 6.69000 s | 2 ->> 3 | Back Off | # 0 | 1.75000 s | | 8.45000 s | 2 ->> 3 | DATA | # 0 | | 8.66000 s | 3 <<- 2 | DATA | # 0 | | 8.66000 s | 3 ->> 2 | ACK | # 0 | | 8.67000 s | 2 <<- 3 | ACK | # 0 | | 8.83000 s | 1 ->> 3 | DATA | # 0 | | 9.09000 s | 1 ->> 3 | Back Off | # 0 | 2.25000 s | | 9.52000 s | 3 ->> 2 | DATA | # 1 | | 9.73000 s | 2 <<- 3 | DATA | # 1 | | 9.73000 s | 2 ->> 3 | ACK | # 1 | | 9.74000 s | 3 <<- 2 | ACK | # 1 |

结果

节点对象在数据链路层算法的性能收集统计信息。调用信息节点对象的方法来访问这些统计信息。以下示出了用于用0.2包/秒分组到达率在10秒时间的模拟的样品的结果。每个数据分组是200毫秒长。

%统计显示的nodeinfo(1)=信息(节点1);的nodeinfo(2)=信息(节点2);的nodeinfo(3)=信息(节点3);对于P = 1:长度(的nodeinfo)fprintf中('\ nNode%d:\ N',P);fprintf中('\ tNumGeneratedPackets:%d \ n',将nodeinfo(P).NumGeneratedPackets)fprintf中('\ tNumReceivedPackets:%d \ n',将nodeinfo(P).NumReceivedPackets)fprintf中('\ tAverageRetries:%F \ N',将nodeinfo(P).Layer2.AverageRetries)fprintf中('\ tAverageRoundTripTime:%F \ N',将nodeinfo(P).Layer2.AverageRoundTripTime)fprintf中('\ tNumDroppedPackets:%d \ n',将nodeinfo(P).Layer2.NumDroppedPackets)fprintf中('\ tNumDroppedPackets(最大重试):%d \ n',将nodeinfo(P).Layer2.NumDroppedPacketsDueToRetries)fprintf中('\ tThroughput:%d \ n',numPayloadBits /的nodeinfo(P).Layer2.AverageRoundTripTime)fprintf中('\ tLatency:%d \ n',将nodeinfo(P).Layer2.AverageLatency)结束
节点1:NumGeneratedPackets:2个NumReceivedPackets:1个AverageRetries:NaN的AverageRoundTripTime:NaN的NumDroppedPackets:0 NumDroppedPackets(最大重试):0吞吐量:NaN的延迟:Inf文件节点2:NumGeneratedPackets:1个NumReceivedPackets:1个AverageRetries:2.000000 AverageRoundTripTime:3.509844 NumDroppedPackets:0 NumDroppedPackets(最大重试):0吞吐量:5.564350e + 03延迟:2.104687e-01节点3:NumGeneratedPackets:2个NumReceivedPackets:1个AverageRetries:0.000000 AverageRoundTripTime:0.220254 NumDroppedPackets:0 NumDroppedPackets(最大重试):0吞吐量:8.867039e + 04延迟:1.749922e + 00

数据链路层(第2层)

本实施例中实现了基于ALOHA的随机接入协议的数据链路层[2]。下面的流程图显示了ALOHA协议发送和如何接收数据分组。

当数据链路层的3层数据包进行传输,它开始一个新的会话,并发送数据包马上使用的数据包。该算法等待一个确认(ACK)包。如果ACK未在超时时间段之前接收到的,它回退的一个随机时间和再次发送数据包。如果失败重试次数之后接收到ACK,则丢弃该数据包。如果该会话期间,当接收一个新的第3层分组,则第3层分组被置于先入先出(FIFO)队列。如果FIFO队列已满,数据包将被丢弃。

该算法的实现helperPacketizedModemDataLinkLayer系统对象™。所述helperPacketizedModemDataLinkLayer系统对象定义具有三个状态的状态机:IDLE,ACK_WAIT,和BACKOFF。以下状态机描述了数据链路层算法是如何在该对象实现。语句在括号中,[...],和花括号{...},分别为条件和动作。小圆圈是用来表示多个条件直通状态。

原始ALOHA协议使用的轮毂/星形拓扑。上行链路和下行链路利用两个单独的频带。下面的示例使用了网状网络拓扑,其中节点发送,并使用相同的频带接收。

调制解调器结构

下面介绍调制解调器代码结构。处理已经按以下顺序六个主要部分和运行:

  1. 源控制器

  2. 消息发生器

  3. PHY解码器

  4. 数据链路层

  5. 消息解析器

  6. PHY编码器

数据链路层处理该消息发生器和PHY解码器的输出,因此它必须这两个操作后运行。数据链路层的消息解析器和PHY编码器过程输出。该序列可确保调制解调器可以接收分组,并且响应于他们在相同的时间间隔。该helperPacketizedModemNode对象实现调制解调器。

源控制器

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

消息发生器

当由源控制器使能消息产生器开始产生层3的数据分组。该数据包包含一个数字化的文字信息。如果消息不适合一个包,发电机创建多个数据包。分组结构如下:

  • 要地址:8位

  • 发件人地址:8位

  • 包数:16位

  • 有效载荷:M位

PHY解码器

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

当数据有效载荷的大小被设定为19530个比特,调制解调器的总数据包长度是39956个样本。调制解调器流程SamplesPerFrame样品,其是2000个样品用于本例中,在每一次迭代。较小SamplesPerFrame结果在较小的延迟,但增加了调制解调器算法的开销。一个增加开销可能增加使得调制解调器没有实时运行了处理时间。

数据链路层

数据链路层提供了两个相邻节点之间的联系。它采用在所描述的基于ALOHA的协议数据链路层(第2层)部分。分组结构如下:

  • 类型:4位

  • 版本:2位

  • 版权所有:2位

  • 要地址:8位

  • 发件人地址:8位

  • 序列号:8位

  • 时间戳:32位

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

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

  • 成功包传输的数目,其被定义为成功接收的ACK数据包的数目

  • 平均重试

  • 在几秒钟内的平均往返时间

  • 由于层3分组队列是满的丢弃的数据包的数

  • 由于重试丢弃报文数

  • 可以通过定义为每秒比特数成功的数据传送速率

  • 在几秒钟内平均延迟定义为在目的地节点处的它的层3数据包和接收的生成之间的时间

消息解析器

消息解析器解析的接收层2的有效载荷,并创建第3层分组。它还收集以下统计数据:

  • 接收的数据包数

  • 收到重复的报文数

PHY编码器

PHY编码器通过在到基带I / Q样本调制层2个分组创建物理层分组。分组结构如下:

伪码元被用于训练AGC和载波检测。同步码元是一个调制的PN序列。头有以下字段:

  • 有效载荷长度:16个比特

  • CRC:16位

物理层(层1)发送器是如下的框图:

信道模型

这个例子模拟一个三个节点网络,但可以模拟任何数目的节点。每个节点的输出被传递到信道模拟器。信道将来自强加以下信道损伤后所有三个节点的基带信号:

  • 时序偏差

  • 频率偏移

  • 莱斯多

  • AWGN

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

运行使用收音机

您也可以使用无线电设备,而不是一个模拟通道上运行这个例子。一个SDR硬件和运行一个MATLAB会话的主计算机的组合包含的节点。下列步骤显示了如何设置一个三节点网络。本例使用USRP®B200和B210收音机。

1)连接一USRP®无线电到主机A,我们将其称为节点1.按照该指令在安装和设置(通讯工具箱支持包USRP电台)安装和设置您的主金宝app机与USRP®收音机使用。启动一个MATLAB会话。

2)设置节点1作为用于初始化的发射机。运行helperPacketizedModemInitializeRadio(“TX”,平台,ADDRESS,FC,RT),其中平台是USRP®无线电的类型和地址是序列号或IP地址,FC是中心频率,并且RT是以秒的运行时间。这个例子使用915兆赫的中心频率。假设你的电台是有序列号的 'ABCDE' 一个B200,函数调用将helperPacketizedModemInitializeRadio( 'TX', 'B200', 'ABCDE',915e6,120)。此函数会在发射120秒。如果您需要更多的时间来完成初始化,重新运行与更长的运行时间的命令。

3)第二无线电和主机计算机重复步骤1和调用这个节点Node 2。

4)设置节点2作为用于初始化的接收机。润[CDT,MAXGAIN,RXGAIN] = helperPacketizedModemInitializeRadio( 'RX',平台,ADDRESS,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)开始节点1通过运行功能helperPacketizedModemRadio(P,RA,NA,DA,FC,CDT,MAXG,RGAIN,d),其中P是平台中,RA是无线地址,NA是节点地址,DA是目的地址列表,FC是中心频率,CDT是载波检测阈值,是MAXG最大AGC增益,RGAIN是无线电接收器增益,d是持续时间。例如,运行为helperPacketizedModemRadio( 'B200', 'ABCDE',1,[2 3],915e6,CDT1,MAXGAIN1,RXGAIN1,120)。

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

9)开始节点3通过运行helperPacketizedModemRadio( 'B200', 'A1B2C',3,[1 2],915e6,CDT3,MAXGAIN3,RXGAIN3,120)。

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

的三个网络设置了两个小时运行。每个节点第二按照泊松分布在0.2的分组的速率生成的分组/。节点置于大致相等的距离。其中一个环节了线的视线,而另外两个没有。以下是收集的所有三个节点上的结果。由于使用通过USB连接的B2xx无线电可以高达800毫秒的DATA-ACK交换的往返时间,网络的平均往返时间比3秒以上。该算法最小化分组丢失,并提供一个公平接入到共享信道的所有节点。

节点1:NumGeneratedPackets:1440个NumReceivedPackets:1389个AverageRetries:0.533738 AverageRoundTripTime:3.725093 NumDroppedPackets:95个NumDroppedPackets(最大重试):23吞吐量:5.242823e + 03
节点2:NumGeneratedPackets:1440个NumReceivedPackets:1340个AverageRetries:0.473157 AverageRoundTripTime:3.290775 NumDroppedPackets:31个NumDroppedPackets(最大重试):9吞吐量:5.934772e + 03
节点3:NumGeneratedPackets:1440个NumReceivedPackets:1385个AverageRetries:0.516129 AverageRoundTripTime:3.558408 NumDroppedPackets:107个NumDroppedPackets(最大重试):29吞吐量:5.488410e + 03

讨论

从前面的章节和仿真代码helperPacketizedModemRadio.m功能既利用helperPacketizedModemNode.m系统对象来实现调制解调器节点。在当前示例中,相同的代码用于评估的系统中,首先使用一个模拟信道,然后使用SDR硬件和过度的空气通道。

即使使用模拟信道的代码是基于时间的,则调制解调器节点对象能够用于运行基于事件的模拟。这个例子没有提供基于事件的仿真内核。

再探

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

  • PacketArrivalRate

  • 确认的超时

  • MaxBackoffTime

  • MaxDataRetries

  • QUEUESIZE

您也可以探索的算法的实现细节的功能如下:

您可以使用检查物理层唯一的表现PacketizedModemPhysicalLayerTxRxExample脚本。

选择的参考书目

版权声明

通用软件无线电Peripheral®和USRP®是国家Instruments®公司的商标。