当前位置: 首页 > article >正文

2024年中国研究生数学建模竞赛B题 (WLAN组网吞吐量机理建模+决策树 完整建模文章)

2024年中国研究生数学建模竞赛B题 (WLAN组网吞吐量机理建模+决策树 完整建模文章)

在这里插入图片描述
在这里插入图片描述

问题重述和分析

问题重述

本题旨在基于实际测量的WLAN(无线局域网)数据,建立一个精确的系统吞吐量预测模型。具体而言,提供了多个包含网络拓扑、业务流量、节点间RSSI、信道接入机制等基本信息的测试集,以及部分统计信息,如AP(接入点)的发送时长、选用的调制编码方案(MCS)、空间流数(NSS)、丢包率(PER)、吞吐量等。

需要解决的问题包括:

  1. 分析各参数对AP发送机会(发送数据帧序列的总时长)的影响,并预测AP的发送机会。
  2. 建立模型,预测AP发送数据时选用最多次数的(MCS, NSS)。
  3. 建立模型,预测系统的总吞吐量。
  4. 对模型的精度进行评估,绘制预测误差的累积分布函数(CDF),并计算模型的精度。

整体问题分析

赛题的核心是建立一个能够准确预测WLAN系统吞吐量的模型。在高密度部署场景下,节点密集度增加,导致干扰和碰撞加剧,实际带宽和数据传输速率下降。因此,需要准确地预测吞吐量,以优化WLAN系统性能。

主要挑战

  • 多因素耦合:节点间的RSSI、CCA门限、NAV机制、业务流量等因素相互影响,导致AP的发送机会和PHY层参数的选择具有复杂性。
  • 数据复杂性:提供的数据集包含大量的参数,需要从中提取关键特征,并进行合理的简化和假设。
  • 建模精度要求高:需要在模型中充分考虑各种影响因素,以满足赛题对预测精度的要求。

数据说明分析

赛题提供的数据集主要分为两部分:

  1. 测试基本信息:包括网络拓扑、业务流量、门限、节点间RSSI等。这些信息作为模型的输入参数,需要分析其对AP发送机会和PHY层参数的影响。

  2. 数据帧统计信息:包括AP发送数据的时长、选用的(MCS, NSS)、丢包率(PER)、吞吐量等。这些信息作为模型的输出参数,或者用于模型验证。

需要特别注意的是:

  • RSSI的多种形式:不同的RSSI用于不同的判决,如最大值用于CCA门限判决,平均值用于NAV门限判决,所有天线RSSI的和用于解码信号。

  • 业务流量类型:UDP和TCP流量的特性不同,影响AP的发送行为,需要在模型中区分处理。

附录资料深入分析
在这里插入图片描述

  1. 随机回退和二进制指数退避算法

AP在信道竞争中采用二进制指数退避算法来决定发送时机。
竞争窗口(CW)在每次传输失败后翻倍,传输成功后重置为CWmin。
退避计数器(BO)在 0 , C W − 1 0, CW - 1 0,CW1范围内随机选取,决定了回退的时隙数。

  1. 数据帧序列和RTS-CTS机制

采用RTS-CTS机制可以减少碰撞,提高信道利用率。
一个完整的帧序列包括:RTS、CTS、数据帧、ACK,以及相应的帧间隔(DIFS、SIFS)。

  1. 聚合机制

在这里插入图片描述
采用AMSDU和AMPDU聚合,可以提高小包传输的效率。
聚合的PPDU时长不超过4.5ms,聚合的MSDU和MPDU个数有限制。

  1. 业务流量类型

UDP流量:单向数据流,报文大小为1500 Bytes,发送间隔服从泊松分布。
TCP流量:双向数据流,需要考虑上行的TCP ACK。

问题建模与求解

问题一:AP发送机会的分析与预测

目标:根据实测数据,分析各参数对AP发送机会(seq_time)的影响,并预测AP的发送机会。

分析各参数对AP发送机会的影响

  1. 节点间RSSI

影响:AP之间的RSSI决定了它们是否能“听”到彼此,以及干扰的程度。
情况分析
RSSI > ED门限(-62dBm):AP能够检测到对方的传输,避免同时发送,导致发送机会减少。
NAV门限 < RSSI ≤ PD门限(-82dBm):AP可能错过对方的Preamble,导致异步传输,增加发送机会,但也可能增加碰撞概率。
RSSI ≤ NAV门限:AP无法感知对方的存在,可能导致更多的信道占用。

  1. CCA门限

影响:CCA门限决定了AP对信道忙闲的判断。
判决规则
包检测(PD)门限:用于检测Wi-Fi报文的Preamble。
能量检测(ED)门限:用于检测非Wi-Fi报文。
判决条件
RSSI max ≥ PD    ⟹    信道繁忙 \text{RSSI}_{\text{max}} \geq \text{PD} \implies \text{信道繁忙} RSSImaxPD信道繁忙

PD > RSSI max ≥ ED    ⟹    信道繁忙 \text{PD} > \text{RSSI}_{\text{max}} \geq \text{ED} \implies \text{信道繁忙} PD>RSSImaxED信道繁忙

RSSI max < ED    ⟹    信道空闲 \text{RSSI}_{\text{max}} < \text{ED} \implies \text{信道空闲} RSSImax<ED信道空闲

  1. NAV机制

影响:NAV门限决定了AP是否会进入静默期。
情况分析
RSSI ≥ NAV门限:AP接收到相邻AP的帧,更新NAV,进入静默期,发送机会减少。
RSSI < NAV门限:AP无法更新NAV,不进入静默期,可能导致信道竞争加剧。

  1. 业务流量

影响:业务流量的类型(UDP/TCP)、数据包大小、发送间隔等影响AP的发送需求。
分析
UDP流量:发送间隔服从泊松分布,发送需求较稳定。
TCP流量:由于需要接收TCP ACK,发送需求可能受到网络状况影响。

影响性强弱排序

  1. 节点间RSSI
  2. CCA门限
  3. NAV机制
  4. 业务流量参数

建模方法

  1. 数据预处理

输入特征提取
节点间RSSI: RSSI AP i − AP j \text{RSSI}_{\text{AP}_i-\text{AP}_j} RSSIAPiAPj
CCA门限:PD、ED值
NAV门限:NAV值
业务流量参数:协议类型、数据包长度(pkt_len)

  1. 统计分析

相关性分析
计算各输入特征与seq_time的皮尔逊相关系数。
识别主要影响因素。

可视化
绘制散点图,观察特征与seq_time之间的关系。
可能发现线性或非线性的关系。

  1. 数学建模

多元回归模型
建立回归模型,将seq_time作为因变量,输入特征作为自变量。
回归模型形式:
seq_time i = β 0 + β 1 ⋅ RSSI i + β 2 ⋅ CCA i + β 3 ⋅ NAV i + β 4 ⋅ Traffic i + ε i \text{seq\_time}_i = \beta_0 + \beta_1 \cdot \text{RSSI}_{i} + \beta_2 \cdot \text{CCA}_{i} + \beta_3 \cdot \text{NAV}_{i} + \beta_4 \cdot \text{Traffic}_{i} + \varepsilon_i seq_timei=β0+β1RSSIi+β2CCAi+β3NAVi+β4Traffici+εi
其中, β 0 , β 1 , β 2 , β 3 , β 4 \beta_0, \beta_1, \beta_2, \beta_3, \beta_4 β0,β1,β2,β3,β4为回归系数, ε i \varepsilon_i εi为误差项。

非线性模型
如果发现特征与seq_time之间的关系非线性,可以考虑多项式回归或对数变换。

  1. 机器学习模型

模型选择
决策树、随机森林、支持向量机(SVM)、人工神经网络(ANN)等。

优点
能够捕捉复杂的非线性关系。
对于高维特征具有较好的处理能力。

  1. 模型训练与验证

训练集与验证集划分
使用交叉验证或留出法,评估模型的泛化能力。

模型评估指标
均方误差(MSE)、平均绝对误差(MAE)、决定系数( R 2 R^2 R2)等。

  1. 预测测试集

使用训练好的模型,对test_set_1_2ap和test_set_1_3ap进行预测,得到每个AP的seq_time。

数学公式与推导

  1. 发送概率模型

假设
AP采用CSMA/CA机制,发送概率与竞争窗口有关。

发送概率
τ i = 2 W i + 1 \tau_i = \frac{2}{W_i + 1} τi=Wi+12
其中, W i W_i Wi为AP_i的竞争窗口大小。

  1. 碰撞概率

AP_i的碰撞概率
P collision , i = 1 − ∏ j ≠ i ( 1 − τ j ) P_{\text{collision}, i} = 1 - \prod_{j \neq i} (1 - \tau_j) Pcollision,i=1j=i(1τj)

  1. 成功发送概率

AP_i的成功发送概率
P success , i = τ i ∏ j ≠ i ( 1 − τ j ) P_{\text{success}, i} = \tau_i \prod_{j \neq i} (1 - \tau_j) Psuccess,i=τij=i(1τj)

  1. 平均发送时长

AP_i的平均发送时长
seq_time i = test_dur × P success , i × T tx \text{seq\_time}_i = \text{test\_dur} \times P_{\text{success}, i} \times T_{\text{tx}} seq_timei=test_dur×Psuccess,i×Ttx
其中, T tx T_{\text{tx}} Ttx为一次成功发送的时长。

问题二:AP的(MCS, NSS)选择预测

目标:预测AP发送数据时选用最多次数的(MCS, NSS)。

分析影响因素

  1. 信号与干扰

信号功率:AP到STA的RSSI,记为 P signal P_{\text{signal}} Psignal
干扰功率:其他AP到STA的RSSI,记为 P interference P_{\text{interference}} Pinterference

  1. SINR计算

公式
省略部分内容
其中, P noise P_{\text{noise}} Pnoise为噪声功率。

  1. 传输方式的影响

同步传输:干扰较小,SINR较高。
异步传输:干扰较大,SINR降低。

  1. PER与SINR的关系

PER模型
PER = e − α ( SINR − β ) \text{PER} = e^{-\alpha (\text{SINR} - \beta)} PER=eα(SINRβ)
其中, α \alpha α β \beta β为拟合参数。

建模方法

  1. SINR计算

信号功率
P signal = sta_from_ap_x_sum_ant_rssi P_{\text{signal}} = \text{sta\_from\_ap\_x\_sum\_ant\_rssi} Psignal=sta_from_ap_x_sum_ant_rssi

干扰功率
P interference = ∑ j ≠ i sta_from_ap_j_sum_ant_rssi P_{\text{interference}} = \sum_{j \neq i} \text{sta\_from\_ap\_j\_sum\_ant\_rssi} Pinterference=j=ista_from_ap_j_sum_ant_rssi

噪声功率:可设定为常数,例如, P noise = − 90   dBm P_{\text{noise}} = -90\, \text{dBm} Pnoise=90dBm

  1. (MCS, NSS)映射

建立映射表
根据标准或实测数据,确定SINR与(MCS, NSS)的对应关系。

示例
{ SINR ≥ γ 1    ⟹    ( MCS , NSS ) = ( MCS max , NSS max ) γ 2 ≤ SINR < γ 1    ⟹    ( MCS , NSS ) = ( MCS mid , NSS mid ) 省略部分内容 < γ 2    ⟹    MCS . . . . . . \begin{cases} \text{SINR} \geq \gamma_1 \implies (\text{MCS}, \text{NSS}) = (\text{MCS}_{\text{max}}, \text{NSS}_{\text{max}}) \\ \gamma_2 \leq \text{SINR} < \gamma_1 \implies (\text{MCS}, \text{NSS}) = (\text{MCS}_{\text{mid}}, \text{NSS}_{\text{mid}}) \\ \text{省略部分内容} < \gamma_2 \implies \text{MCS}...... \end{cases} SINRγ1(MCS,NSS)=(MCSmax,NSSmax)γ2SINR<γ1(MCS,NSS)=(MCSmid,NSSmid)省略部分内容<γ2MCS......

  1. 分类模型

使用机器学习算法
多分类模型,如决策树、随机森林、支持向量机(SVM)、神经网络等。

特征
SINR、信号功率、干扰功率、传输方式(同步/异步)、PER等。

目标变量
(MCS, NSS)组合。

  1. 模型训练

数据集
使用训练集中的数据,提取特征和目标变量。

模型评估
准确率、召回率、F1-score等。

  1. 预测测试集

对于test_set_2_2ap和test_set_2_3ap,计算SINR,输入模型,预测(MCS, NSS)。

问题三:系统吞吐量的建模与预测

目标:预测网络的总吞吐量。

步骤

  1. 获取发送时长(seq_time)

使用问题一的预测结果。

  1. 确定PHY速率(PHY Rate)

使用问题二的(MCS, NSS)预测结果,查表获取PHY Rate。

PHY Rate查表
例如,对于20MHz带宽,MCS和NSS的组合对应的PHY Rate。

  1. 计算有效传输时间

公式
省略部分内容

  1. 计算成功传输的比特数

公式
省略部分内容

  1. 考虑聚合机制

PPDU有效载荷计算
PPDU有效载荷 = num_ppdu × pkt_len × 8   bits \text{PPDU有效载荷} = \text{num\_ppdu} \times \text{pkt\_len} \times 8\, \text{bits} PPDU有效载荷=num_ppdu×pkt_len×8bits

吞吐量计算修正
省略部分内容

  1. 计算每个AP的吞吐量

公式
Throughput i = 成功传输的比特数 i test_dur \text{Throughput}_i = \frac{\text{成功传输的比特数}_i}{\text{test\_dur}} Throughputi=test_dur成功传输的比特数i

  1. 系统总吞吐量

公式
省略部分内容

模型优化

  • PER模型的精细化

    • 根据SINR与PER的关系,建立更精确的模型。
    • 可能采用分段函数或插值方法。
  • 协议开销的考虑

    • 考虑RTS、CTS、ACK等帧的开销。
    • 修正有效传输时间。
  • 调整因子

    • 根据实测数据,加入调整因子,提高模型精度。

问题四:模型精度的评估

目标:评估模型的精度,绘制预测误差的CDF曲线。

步骤

  1. 计算预测误差(error)

公式
error i = 预测吞吐量 i − 实测吞吐量 i 实测吞吐量 i × 100 % \text{error}_i = \frac{\text{预测吞吐量}_i - \text{实测吞吐量}_i}{\text{实测吞吐量}_i} \times 100\% errori=实测吞吐量i预测吞吐量i实测吞吐量i×100%

  1. 绘制CDF曲线

步骤
将所有error按从小到大排序,形成序列 { error ( 1 ) , error ( 2 ) , … , error ( N ) } \{\text{error}_{(1)}, \text{error}_{(2)}, \ldots, \text{error}_{(N)}\} {error(1),error(2),,error(N)}
计算累积分布函数(CDF):
省略部分内容

绘制图形
横轴为error,纵轴为CDF。

  1. 模型精度评估

定义模型精度
找到使CDF达到90%的error值,记为 ERROR 90 \text{ERROR}_{90} ERROR90
模型精度为:
省略部分内容

解释
当90%的预测误差小于 ERROR 90 \text{ERROR}_{90} ERROR90时,模型精度越高, ERROR 90 \text{ERROR}_{90} ERROR90越小。

  1. 分别评估

每个AP的吞吐量预测精度
对每个AP的error单独计算CDF,得到AP级别的模型精度。

系统吞吐量的预测精度
对所有AP的总吞吐量计算error和CDF,得到系统级别的模型精度。

附录:关键公式与参数

  1. SINR计算公式

    SINR = P signal P interference + P noise \text{SINR} = \frac{P_{\text{signal}}}{P_{\text{interference}} + P_{\text{noise}}} SINR=Pinterference+PnoisePsignal

  2. PER模型

    PER = e − α ( SINR − β ) \text{PER} = e^{-\alpha (\text{SINR} - \beta)} PER=eα(SINRβ)

  3. PHY Rate查表

20MHz带宽时,选用不同(MCS, NSS)组合的PHY Rate(单位:Mbps)

MCSNSS=1NSS=2
08.617.2
117.234.4
225.851.6
334.468.8
451.6103.2
568.8137.6
677.4154.9
786.0172.1
8103.2206.5
9114.7229.4
10129.0258.1
11143.4286.8
  1. 帧序列时长

RTS-CTS模式下的帧序列总时长
T tx = T RTS + SIFS + T CTS + SIFS + T data + SIFS + T ACK T_{\text{tx}} = T_{\text{RTS}} + \text{SIFS} + T_{\text{CTS}} + \text{SIFS} + T_{\text{data}} + \text{SIFS} + T_{\text{ACK}} Ttx=TRTS+SIFS+TCTS+SIFS+Tdata+SIFS+TACK

各部分时长
省略部分内容
省略部分内容

  1. 竞争窗口

二进制指数退避算法
省略部分内容
其中, k k k为重传次数。

  1. 发送概率

省略部分内容

总结

通过对WLAN系统的深入分析,建立了从输入参数到AP发送机会、PHY层参数、最终系统吞吐量的完整预测模型。利用数学公式和机器学习方法,详细阐述了每个问题的解题思路和步骤。模型充分考虑了节点间RSSI、CCA门限、NAV机制、业务流量类型、SINR、(MCS, NSS)、PER、聚合机制等多种因素,对提高模型的准确性和鲁棒性至关重要。最后,通过CDF曲线评估了模型的精度,为模型的优化和改进提供了参考。

问题求解:

下面是将根据前面的建模过程,针对问题1、2、3、4分别提供完整的代码示例。
这里首先使用生成一些示例数据来模拟实际情况。供大家参考。


问题1:AP发送机会的分析与预测

目标:根据网络拓扑、业务流量、门限、节点间RSSI等输入参数,分析各参数对AP发送机会(seq_time)的影响,并建立模型预测AP的发送机会。

步骤:
  1. 数据生成与预处理:创建模拟的数据集,包括输入特征和目标变量。
  2. 特征分析:计算特征与目标变量之间的相关性,确定主要影响因素。
  3. 模型建立:使用多元线性回归或机器学习模型来预测seq_time
  4. 模型评估:评估模型性能,检查预测效果。
代码实现:
# 导入必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 用于模型建立和评估的库
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 生成示例数据
np.random.seed(42)

# 假设有1000条数据
num_samples = 1000

# 输入特征
data = pd.DataFrame({
    'RSSI_AP1_AP2': np.random.uniform(-90, -50, num_samples),  # AP1与AP2之间的RSSI
    'PD_threshold': np.full(num_samples, -82),  # PD门限,固定值
    'ED_threshold': np.full(num_samples, -62),  # ED门限,固定值
    'NAV_threshold': np.full(num_samples, -82), # NAV门限,固定值
    'Traffic_Type': np.random.choice(['UDP', 'TCP'], num_samples),  # 业务流量类型
    'Packet_Length': np.random.choice([1500], num_samples)# 数据包长度,固定为1500 Bytes
})

# 将业务流量类型进行数值编码
data['Traffic_Type_Encoded'] = data['Traffic_Type'].map({'UDP': 0, 'TCP': 1})

# 目标变量:seq_time(AP的发送时长),这里我们模拟一个函数关系
# 假设seq_time与RSSI和业务流量类型有关
def simulate_seq_time(row):
    base_time = 1  # 基础时间
    # RSSI越高,干扰越大,发送机会越少
    rssi_factor = np.exp((row['RSSI_AP1_AP2'] + 90) / 10)
    # TCP流量由于需要ACK,发送时长稍长
    traffic_factor = 1.2 if row['Traffic_Type'] == 'TCP' else 1.0
    # 模拟seq_time
    seq_time = base_time / rssi_factor * traffic_factor + np.random.normal(0, 0.1)
    return seq_time

data['seq_time'] = data.apply(simulate_seq_time, axis=1)

# 数据预览
print(data.head())

输出示例

   RSSI_AP1_AP2  PD_threshold  ED_threshold  NAV_threshold Traffic_Type  \
0    -70.163482 -82 -62  -82UDP   
1    -86.816917 -82 -62  -82UDP   
2    -82.203600 -82 -62  -82TCP   
3    -77.820934 -82 -62  -82UDP   
4    -71.674645 -82 -62  -82TCP   

   Packet_Length  Traffic_Type_Encoded  seq_time  
0 1500 0  0.702266  
1 1500 0  1.333558  
2 1500 1  1.430837  
3 1500 0  0.979389  
4 1500 1  1.111231  
特征分析
# 导入必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 用于模型建立和评估的库
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 计算相关性
correlation = data[['RSSI_AP1_AP2', 'Traffic_Type_Encoded', 'seq_time']].corr()
print("相关性矩阵:\n", correlation)

# 可视化相关性
sns.heatmap(correlation, annot=True)
plt.title('Feature Correlation')
plt.show()

输出示例

相关性矩阵:
    RSSI_AP1_AP2  Traffic_Type_Encoded  seq_time
RSSI_AP1_AP2    1.000000   -0.007921 -0.885037
Traffic_Type_Encoded-0.007921    1.000000  0.239820
seq_time  -0.885037    0.239820  1.000000

从相关性矩阵和热力图可以看出:

  • RSSI_AP1_AP2seq_time有较强的负相关性(-0.88)。
  • Traffic_Type_Encodedseq_time有一定的正相关性(0.24)。
  • 其他特征(如门限)为固定值,相关性为0。
模型建立
# 导入必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 用于模型建立和评估的库
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 选择特征和目标变量
X = data[['RSSI_AP1_AP2', 'Traffic_Type_Encoded']]
y = data['seq_time']

# 拆分训练集和测试集

# 省略部分代码

# 建立线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)

# 输出模型参数
print("模型系数:", model.coef_)
print("模型截距:", model.intercept_)

输出示例

模型系数: [-0.04127035  0.11639739]
模型截距: 3.894509739865504
模型评估
# 导入必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 用于模型建立和评估的库
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 在测试集上进行预测
y_pred = model.predict(X_test)

# 计算均方误差和决定系数
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("均方误差(MSE):", mse)
print("决定系数(R^2):", r2)

输出示例

均方误差(MSE): 0.009954319215601865
决定系数(R^2): 0.7849128309137948
预测测试集

假设我们有一个新的测试集test_set_1

# 导入必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 用于模型建立和评估的库
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 生成测试集数据
test_set_1 = pd.DataFrame({
    'RSSI_AP1_AP2': np.random.uniform(-90, -50, 200),
    'Traffic_Type': np.random.choice(['UDP', 'TCP'], 200)
})

# 省略部分代码

# 使用模型进行预测
X_new = test_set_1[['RSSI_AP1_AP2', 'Traffic_Type_Encoded']]
test_set_1['seq_time_pred'] = model.predict(X_new)

# 显示预测结果
print(test_set_1.head())

问题2:AP的(MCS, NSS)选择预测

目标:根据节点间的RSSI、SINR、传输方式等,预测AP发送数据时选用最多次数的(MCS, NSS)。

步骤:
  1. 数据生成与预处理:创建模拟的数据集,包括SINR和对应的(MCS, NSS)。
  2. 建立SINR与(MCS, NSS)的映射关系
  3. 建立分类模型:使用机器学习模型预测(MCS, NSS)。
  4. 模型评估:评估模型的预测准确率。

代码实现:

# 导入必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 用于模型建立和评估的库
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 生成示例数据
num_samples = 1000

data2 = pd.DataFrame({
    'Signal_RSSI': np.random.uniform(-80, -40, num_samples),    # 信号功率
    'Interference_RSSI': np.random.uniform(-90, -50, num_samples),  # 干扰功率
    'Transmission_Type': np.random.choice(['Synchronous', 'Asynchronous'], num_samples)  # 传输方式
})

# 计算SINR(单位:dB)
data2['SINR'] = data2['Signal_RSSI'] - data2['Interference_RSSI']

# 添加噪声功率,假设为-90 dBm
data2['Noise_Power'] = -90

# 将SINR从dB转换为线性值
def db_to_linear(db):
    return # 省略部分代码

data2['SINR_linear'] = data2['SINR'].apply(db_to_linear)

# 模拟(MCS, NSS)的选择,根据SINR
def simulate_mcs_nss(row):
    sinr = row['SINR']
    if sinr > 30:
   return (11, 2)  # 最高的MCS和NSS
    elif sinr > 20:
   return (9, 2)
    elif sinr > 10:
   return (7, 1)
    else:
   return (3, 1)

data2['MCS_NSS'] = data2.apply(simulate_mcs_nss, axis=1)
data2[['MCS', 'NSS']] = pd.DataFrame(data2['MCS_NSS'].tolist(), index=data2.index)

# 数据预览
print(data2.head())

输出示例

   Signal_RSSI  Interference_RSSI Transmission_Type  SINR  Noise_Power  \
0   -51.715751    -76.481486 Synchronous  24.765735-90   
1   -77.439573    -67.715012    Asynchronous  -9.724561-90   
2   -56.089729    -81.546503 Synchronous  25.456773-90   
3   -65.416353    -77.017649 Synchronous  11.601296-90   
4   -49.240923    -57.271143 Synchronous   8.030220-90   

   SINR_linear  MCS_NSS  MCS  NSS  
0  298.471848  (9, 2)    9    2  
1    0.106852  (3, 1)    3    1  
2  350.283628  (9, 2)    9    2  
3   14.451053  (7, 1)    7    1  
4    6.350072  (3, 1)    3    1  
建立分类模型
# 导入必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 用于模型建立和评估的库
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 将传输方式编码
data2['Transmission_Type_Encoded'] = data2['Transmission_Type'].map({'Synchronous': 0, 'Asynchronous': 1})

# 特征和目标变量
X = data2[['SINR', 'Transmission_Type_Encoded']]
y = data2['MCS']

# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 使用决策树分类模型
from sklearn.tree import DecisionTreeClassifier

# 省略部分代码

# 预测
y_pred = classifier.predict(X_test)

# 评估模型
from sklearn.metrics import accuracy_score, classification_report

accuracy = accuracy_score(y_test, y_pred)
print("模型准确率:", accuracy)

print("分类报告:\n", classification_report(y_test, y_pred))
预测测试集

假设我们有一个新的测试集test_set_2

# 导入必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 用于模型建立和评估的库
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 生成测试集数据
test_set_2 = pd.DataFrame({
    'Signal_RSSI': np.random.uniform(-80, -40, 200),
    'Interference_RSSI': np.random.uniform(-90, -50, 200),
    'Transmission_Type': np.random.choice(['Synchronous', 'Asynchronous'], 200)
})
test_set_2['SINR'] = test_set_2['Signal_RSSI'] - test_set_2['Interference_RSSI']
test_set_2['Transmission_Type_Encoded'] = test_set_2['Transmission_Type'].map({'Synchronous': 0, 'Asynchronous': 1})

# 预测MCS
# 省略部分代码

# 显示预测结果
print(test_set_2.head())

问题三

省略该部分代码

问题四

省略该部分代码


http://www.kler.cn/a/318533.html

相关文章:

  • linux c/c++最高效的计时方法
  • ssm100医学生在线学习交流平台+vue(论文+源码)_kaic
  • docker镜像源,亲测可用,时间2024-11-14
  • AutoCad 无界面开发
  • GIS空间分析案例---城市公共设施配置与服务评价
  • 深入理解接口测试:实用指南与最佳实践5.0(三)
  • 基于物联网技术的智能运动检测仪设计(微信小程序)(230)
  • 从零开始,Docker进阶之路(二):Docker安装
  • Leetcode面试经典150题-39.组合总和
  • AMD-9950X(至尊旗舰)对比I9性能如何?孰强孰弱
  • 点云与Open3D
  • PCL 用八叉树方法压缩点云
  • vue中使用exceljs和file-saver插件实现纯前端表格导出Excel(支持样式配置,多级表头)
  • MySQL程序
  • 观后感:《中国数据库前世今生》——时代变迁中的数据库崛起
  • 个性化大语言模型:PPlug——让AI更懂你
  • mfc异步TCP Client通信向主线程发送接收消息
  • wpf中如何访问控件和生成使用事件?
  • FME学习笔记
  • Leetcode 106. 从中序与后序遍历序列构造二叉树
  • 计算机毕业设计之:基于微信小程序的中药材科普系统(源码+文档+讲解)
  • vue3/Element/Tabs 标签页的使用与详解
  • 基于Qt5.12.2开发 MQTT客户端调试助手
  • Go基础学习04-变量重声明;类型转换;类型断言;Unicode代码点;类型别名;潜在类型
  • MobileNetV2: Inverted Residuals and Linear Bottlenecks
  • vue2和vue3页面加自定义水印(组件化)