2023年华为杯数学建模竞赛A题论文和代码
WLAN网络信道接入机制建模
随着5G、6G、Wi-Fi6等无线移动通信技术的兴起,人们对无线通信传输效率的要求越来越高,而无线局域网(WLAN) 作为一种广泛应用的无线通信技术,其具有低成本、高吞吐量和便捷等优势,本文旨在研究对不同场景下无线局域网络信道接入机制的全面建模。本文首先介绍了 WLAN 的基本组成:基本服务集(BSS) 、站点(STA) 和无线接入点(AP)。接着,本文关注 WLAN中的信道接入机制,强调分布式协调功能(DCF)的运作原理,该机制通过载波侦听多址接入/退避(CSMA/CA)的方式协调节点之间的通信,以避免碰撞和冲突。此外,本文针对赛题展开,考虑隐藏节点和同频干扰问题,利用基于 Markov链的 Bianchi模型解析建模了四个不同场景。最后,为验证解析模型, 本文建立了基于有限状态机的AP 仿真模型,并利用蒙特卡洛法进行仿真,对比分析以模拟和评估WLAN 网络中信道接入机制的性能。
针对问题一,本文考虑SIR较小的2BSS互听场景,此时,仅当两个AP同时回退到0且同时发送数据包时,才会导致数据传输失败。本题中,我们首先构建了该场景下的系统模型,而后,我们采用 Bianchi模型对一个AP 节点退避随机过程进行建模,推导发送概率τ和碰撞条件概率ρₖ的解析解分别为: 0.104621、0.104621, 进一步地, 结合BSS系统模型分析,得到吞吐量S=67.174340Mbps。此外,构建了基于有限状态机的AP模型,由此生成出AP及BSS系统的仿真器,并通过蒙特卡洛法进行仿真,获得该系统碰撞率p。以及吞吐量S的仿真结果为p。=0.108623; S=65.351722Mbps, 最后, 计算解析值与仿真值之间的NMSE 进行碰撞概率与吞吐量的评估,其NMSE 值分别为0.002467、0.000912, 误差较小,得出模型精确且仿真正确的结论。
针对问题二,本文考虑SIR较大的2BSS互听场景,不考虑碰撞。首先,构建了系统模型,基于该系统模型,采用一维 Markov 链的简化 Bianchi模型对一个AP节点退避随机过程进行建模,推导得到发送概率7=0.117647,其次,结合BSS系统模型推得系统吞吐量S=70.5586Mbps。为验证 Bianchi解析模型的正确性, 构建有限状态机模型, 并采用蒙特卡洛法进行仿真,获得该系统吞吐量S的仿真结果为 S=68.9944Mbps,最后,计算解析值与仿真值之间的 NMSE 吞吐量的评估,其NMSE 值分别为0.000514,误差小,建模
且仿真正确。
针对问题三,本文考虑SIR较小的2BSS不互听场景且存在隐藏节点问题。同时,考虑数据包会因信道质量导致丢包。首先构建该场景下的系统模型,其次,考虑丢包之后,本文改进了 Bianchi模型,构造考虑丢包率的二维 Markov链,推导得到π(发送概率) 、t₂(隐藏站在易碰撞期间传输并与信道中传输的帧发生冲突的平稳概率) 以及重传概率p.的解析值分别为: 0.056152、0.296356、0.366720, 进一步结合 BSS系统模型分析, 得到吞吐量S=54.5733Mbps。构建有限状态机模型,并采用蒙特卡洛法进行仿真,获得该系统重传概率p,与吞吐量S的仿真结果为 pᵣ0.271731:S-54.7118Mbps,
计算解析值与仿真值之间的NMSE吞吐量的评估, 其NMSE值分别为0.0069、1.417e-7, 误差较小, 最后,本题尝试改变物理层速率、CW初始值以及最大重传次数,并重新进行仿真与推导解析解,NMSE都较小,由此,说明建模具有普适性且仿真正确。
针对问题四,本文考虑3BSS系统,AP1与AP3不互听但均与AP2互听且AP1与AP3之间不产生碰撞。该场景下,考虑分离 Bianchi模型,将系统分为两个子系统分别建模,推导得到AP1在随机时隙中发送的概率τ₁以及AP2在随机时隙中发送的概率τ₂的解析值分别为: 0.10673、0.089277, 进一步得到吞吐量 S102.5727Mbps
仍使用有限状态机的 AP 模型,并采用蒙特卡洛法进行仿真,构建有限状态机模型,并采用蒙特卡洛法进行仿真,获得该系统碰撞概率p。与吞吐量S的仿真结果为 pc0.271731:S=103.236599Mbps,
计算解析值与仿真值之间的NMSE 吞吐量的评估,其 NMSE值分别为1.417e-7,误差较小,说
关键词: DCF CSMA/CA 蒙特卡洛法 Bianchi模型 有限状态机 牛顿法
1.问题重述
1.1 问题背景
无线局域网(WLAN) 是一种广泛应用的无线通信技术,提供了经济实惠、高效和便捷的无线通信服务。基本服务集(BSS) 是WLAN的基本组成部分。一个BSS由一个特定覆盖区域内的站点(STA) 与一个专职管理的无线接入点(AP)组成,STA与AP建立关联以进行通信。常见的AP有无线路由器、WiFi热点等,手机、笔记本、物联设备等是STA。在通信过程中,AP给STA 发送数据称为下行方向,反之是上行方向,本文将AP 和STA统称为节点,每个节点的发送和接收不能同时发生。所有节点共享同一无线信道,通过载波侦听多址接入/退避(CSMA/CA)的机制避免冲突,这被称为分布式协调功能(DCF) 。

1.2 相关描述
1.2.1分布式信道接入和二进制指数退避
DCF 机制是一种分布式、基于竞争的信道接入方式。用于协调多个节点的数据传输,它将节点接入信道并进行数据传输的过程划分为三个主要阶段:
(1)信道可用评估(CCA):当一个节点准备发送数据时,首先进行一个固定时长的载波侦听,这个固定时长被称为DCF 帧间距(DIFS),通常为43μs。如果DIFS时段内接收到的信号能量强度(RSSI) 低于CCA门限(通常为-82dBm) ,则节点判断信道为空闲,否则,判断信道为繁忙。
(2)随机回退:当信道空闲时,可能有多个节点准备发送数据,为避免碰撞,节点从范围为[0,CW-1]的均匀分布中选取一个随机数作为回退数,回退数乘以时隙长度(slotTime,通常为9μs)得到随机回退时段的时长。CW被称为竞争窗口。节点监听信道,如果在随机回退时段内信道保持为空闲,节点开始数据传输。如果在随机回退时段内信道变得繁忙,节点暂停回退,直到信道再次变为空闲(DIFS 时长) 后再继续回退。
(3)数据传输:回退到0的节点发送一个数据帧,接收节点成功接收到数据之后等待短帧帧间距(SIFS) , 通常为16μs,然后回复ACK确认帧(通常为32μs) 。如果发送节点收到ACK,则数据传输成功。如果发送数据帧没有被接收节点成功接收,或者 ACK发
在随机回退阶段,节点采用二进制指数退避算法来确定回退时间。CW 的初始值为CWmin,每次数据传输失败后重传数据帧时,CW翻倍。如果CW达到了 CWmax,则保持此值,直到被重置为止。每次数据传输成功后,CW会进行重置,开始下一个数据帧的回退。若传输连续失败,重传次数达到r后,数据帧将被丢弃,CW将重置以传输下一个数据帧。无论数据传输成功还是失败,重传r次后,CW都会被重置。
1.2.2基于 Markov chain的DCF机制建模和系统性能分析
对于单BSS, N个STA给AP发送上行数据, Bianchi最早提出了一个基于 Markov链的模型[1]。Bianchi模型假设理想信道,即不会因信道质量差而导致数据丢失。当2个及以上节点同时回退到0并发送数据时,由于碰撞而导致数据丢包。因此,信道可以处于三种状态:空闲、成功传输、碰撞。将每个状态被视为一个虚拟时隙,信道在这三种虚拟时隙之间相互转换。Bianchi模型使用二维 Markov链来表示退避器的状态和随机回退数,然后推导节点在每个虚拟时隙的发送概率τ和发生碰撞的条件概率ρc,从而评估BSS的吞吐量。
Bianchi模型获得了很高的精确度,后续研究在此基础上进行了扩展, Chatzimisios研究了有最大重传次数限制的媒体接入控制(MAC) 层性能情况[2]。Huang和 Ivan Marsic 介绍了隐藏节点下网络模型和性能分析[3]。Chen 分析了多速率 MAC 协议的性能[4]。吞吐量是单位时间内发送数据有效载荷的比特数,单位为 bps。吞吐量S可以由信道的利用率与物理层速率(单位 bps) 的乘积表示,吞吐量表达式详见式3.14。
1.2.3 WLAN组网中的多BSS建模
在 WLAN中,当节点发送数据后,数据会通过电磁波信号在自由空间中传播。然而,随着传播距离的增加,信号的能量会逐渐衰减。其他周围的节点会接收到这个信号,并根据接收到的RSSI是否高于CCA 门限来判断信道的状态,即是繁忙还是空闲。一个节点发出信号的RSSI高于CCA门限的区域,被称为通信区域,位于该通信区域内的节点与该发送节点互听。
随着设备数量、应用类型和网络流量的不断增加,许多场景中部署了大量的AP,例如企业办公、工厂和教育场所。当这些AP在相同的频段上工作并且它们的通信区域重叠时,就会出现相互干扰的问题,被称为同频干扰。同频干扰是 WLAN组网最显著的干扰问题,题目中不考虑异频干扰的情况。在家庭或宿舍等只有一个BSS的场景中,STA通常距离AP较近,因此它们的RSSI较高,从而会互相听到对方的信号。在理想的信道条件下,这不会导致数据丢失,除非同时有两个或更多的STA尝试发送数据,这可能导致碰撞而使数据丢失。在教学区等场景中,涉及到多个BSS的情况更加复杂。
首先,需要注意并非所有节点都可以相互听到。假定AP和STA的发射功率相同,由于不同节点之间的距离不同,信号衰减不同,因此RSSI不同。节点在 DIFS 时长侦听信号的RSSI>CCA门限时,节点才认为信道繁忙,否则认为信道空闲,启动随机回退,发送数据。其次,当有多个BSS的节点同时发送数据(称为并发传输)时,数据是否成功传输与信干比(SIR) 有关,如果SIR足够高,则信号能被成功解调,相反,若SIR 很低,则信号解调失败。SIR是信号强度与干扰强度的比值,其可以通过信号的RSSI值与干扰信号RSSI的差值表示。需要强调的是,本题中不考虑环境噪声。
综上所述,发送节点间能否互听,并发传输时是否成功,这两个因素是系统建模时需要考虑的两个先决条件,前者决定了退避计数器能否回退,后者则决定了一次并发传输是否成功,从而直接影响了系统在成功、失败和空闲三种状态之间的转换。
其中n为仿真次数,S₁为每次仿真值,S为理论解析值。
表3-2 问题一仿真结果表
|
参数 |
p。 |
S |
|
解析值 |
0.104621 |
67.174340 Mbps |
|
仿真值 |
0.108623 |
65.351722 Mbps |
|
MSE |
2.700e-05 |
4.115442 |
|
NMSE |
0.002467 |
0.000912 |
从结果表分析可知,仿真结果中吞吐量S比解析值略低,而碰撞概率略高,这也符合认知,因为碰撞的概率高,说明成功传输的数据包更少,自然吞吐量也更小。
仿真时蒙特卡洛过程每一千次实验输出一次S和p.,绘制得到MSE 曲线图及NMSE 曲线图,如图3-8和图3-9所示。其中横坐标为模拟次数(×10⁵) ,紫色圆点线为吞吐量S曲线,橙色三角形线为碰撞概率p。曲线。
仿真过程中的吞吐量及碰撞概率分析
从图3-8中可以看出,因为吞吐量和碰撞概率的MSE数量级差距过大,而改用NMSE 之后,二者数量级相近,更易于观察趋势。所以之后的问题都用NMSE分析仿真与解析解的误差。
从图3-9中可以看出,随着试验次数的增加,碰撞概率的NMSE 总体呈现下降趋势,吞吐量的NMSE保持稳定。因为随着试验次数的增加,仿真器的结果逐渐稳定,而总体呈现下降趋势,且NMSE的数量级为10⁻²,说明仿真器的仿真效果好,相较于理论解析模型,误差较小。
而一开始出现的忽高忽低的异常点是因为试验次数过少,结果不具有代表性导致的,这正好说明使用蒙特卡洛法的合理性。随着时间的增加曲线产生的波动也是因为蒙特卡洛
23
关注数模加油站,助力竞赛赢满贯
法本身的随机性造成的。而次数的增加,根据中心极限定理,最终的结果会趋于稳定。

代码
class ap():
def init ( self) -> None:
self. log = {}
self. time total = difs #总时间
self. time now = 0 # 计时器
self. time backoff = 0 # 退避时间
self. cw = cw min # 退避窗口
self. r = 0 # 重传次数
self. state - 0 # 状态指示标
self. hold = 0 # hold 指示标
self. j = 0
self. k = 0
def log write( self, end):
self. log[ self. time total] = end
def enter listen( self):
self. state = 0
self. time now = difs
self. hold = 0
self. time backoff = int( self. time backoff / 9) * 9
def set backoff( self):
self. state = 1
if self. time backoff == 0:
self. time backoff = random. randint(0, self. cw-1) * slot
self. time now = self. time backoff # 计时器置为退避时间
def send data( self):
self. state = 2
self. time now = frame
def wait ack( self):
self. state = 3
self. time now = sift + ack
def send over( self):
self. state = 0
self. time now = difs
self. r = 0
self. hold = 0
self. cw = cw min
def collision( self):
self. time now += acktimeout + difs
self. r += 1
self. state = 0
self. hold = 0
if self. cw & lt; cw max:
self. cw = self. cw * 2
|
def timer( self, time): |
|
if self. hold == 0: |
|
self. time _ now = self. time _ now - time |
|
if self. state == 1: |
|
self. time _ backoff = self. time _ backoff - time |
|
self. time _ total = self. time _ total + time |
|
else: |
|
self. time _ total = self. time _ total + time |
关键代码2:仿真器系统建模
if ap1. state == 2 and ap2. state == 2 and ap1. time now != frame and ap2. time now != frame: # 碰撞
j += 2
if ap1. r & lt;= r max:
ap1. collision()
else:
ap1. log write(0)
ap1. send over()
ap1. time now += acktimeout
if ap2. r & lt;= r max:
ap2. collision()
else:
ap2. log write(0)
ap2. send over()
ap2. time now += acktimeout
min time = cul mintime([ap1, ap2])
ap1. timer( min time)
ap2. timer( min time)
timer channel = 0
continue
else:
ap now, ap other = ap decide(ap1, ap2)
if ap now. state == 3: # 发送完成
ap now. log write(1)
ap now. send over()
elif ap now. state == 0: # 上个状态为等待 difs状
ap now. set backoff()
elif ap now. state == 1: # 上个状态为退避状态
timer channel = ap now. send data( timer channel)
k += 1
elif ap now. state == 2
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)