1. 项目概述当RIS遇见机器学习如何用四个波束“锁定”用户在毫米波频段玩无线通信就像在一条狭窄却充满障碍物的高速公路上开跑车。速度是快了但一个不小心信号就被墙、人甚至一片树叶给“堵”得严严实实。6G愿景中的超可靠低时延通信核心挑战之一就是如何让基站BS的“手电筒光”波束精准地、快速地照到用户终端上。传统方法是让基站拿着“手电筒”360度无死角地扫一遍这在低频段或许还能忍但在毫米波频段波束又窄又密这种“暴力穷举”式的波束搜索带来的时延和控制信令开销足以让任何追求极致性能的系统设计者头疼。于是可重构智能表面RIS登场了。你可以把它想象成一块智能化的“镜子墙”或“透镜墙”部署在基站和用户之间。它不发电只是通过成百上千个可独立编程的单元对入射的电磁波进行精密的相位调控从而智能地反射或折射信号绕过遮挡甚至将能量聚焦到特定方向。RIS为覆盖增强和链路可靠性带来了革命性的希望。但一个新问题随之而来RIS的引入使得系统可调控的波束方向组合呈指数级增长基站需要“猜”用户在哪还要“猜”RIS该怎么调才能把信号最优地反射过去。这个搜索空间太大了传统的试错法效率极低。这正是我们这项工作的起点能不能让系统变得更“聪明”用最少的“试探”就快速知道用户的大致方位机器学习ML为我们提供了这种可能。我们不再依赖复杂的物理模型去计算而是让数据说话。通过预先收集在不同位置、不同RIS配置下的信号强度数据训练一个模型让它学会从寥寥几次探测的接收功率值中“反推”出用户最可能处在哪个角度区间。这次分享的就是我们在27GHz频段用一个20x20的RIS结合多种经典机器学习回归模型实现高效用户角度定位的完整技术路径、实操细节和踩坑实录。对于通信算法工程师、无线系统研究员或是任何对6G使能技术落地感兴趣的朋友希望这篇深度拆解能带来一些实实在在的参考。2. 系统核心设计从“盲扫”到“智猜”的范式转变2.1 问题重构为什么是角度定位而不是坐标定位在深入方案前首先要明确我们的目标。在RIS辅助的初始接入或波束管理阶段最紧迫的任务不是厘米级的绝对坐标定位那需要更复杂的多基站协作或超大带宽而是快速确定用户的角度域信息即用户相对于RIS的方位角Azimuth和俯仰角Elevation。只要知道了这个角度RIS和基站就可以协同形成指向该方向的窄波束建立高质量初始链路。后续的精细跟踪或数据通信可以在此基础上进行。因此我们将一个三维空间定位问题巧妙地简化为一个基于角度域的回归预测问题。这带来了几个核心优势数据维度降低我们不需要收集用户的三维坐标与复杂信道冲激响应之间的映射关系只需要建立“角度”与“可观测信号特征”之间的关系模型更简单训练数据需求更少。特征易于获取我们选择的特征是最基础的接收信号功率。在任何通信设备上接收信号强度指示RSSI都是最易获取的物理层测量量无需额外的硬件支持或复杂的信号处理。与波束管理天然契合预测输出直接就是波束指向角RIS控制器拿到预测结果后可以立即调用对应角度的预编码码本进行波束成形实现“预测即对准”。2.2 核心框架四步构建数据驱动的定位引擎我们的框架可以概括为四个核心阶段构成了一个完整的离线训练、在线推理闭环。第一阶段可控环境下的数据采集这是所有机器学习应用的基石所谓“Garbage in, garbage out”。我们构建了一个可控的仿真测试环境关键参数如表I所示。这里有几个设计考量RIS规模20x20共400个单元。这是一个在硬件复杂度和波束调控能力之间取得平衡的规模。单元数太少波束成形增益和调控精度不够太多则控制电路复杂仿真和未来硬件实现成本高。频点选择27GHz。这是5G/6G重点考虑的毫米波频段之一路径损耗和遮挡效应显著正是RIS发挥价值的场景。场景简化我们将用户运动范围限制在RIS的俯仰角平面0-90度并固定方位角。这相当于研究一个二维切片旨在首先验证核心方法的可行性。将问题简化、验证通后再扩展到三维是工程研究的常见路径。数据采集过程如同一次系统性的“标定”我们在0-90度的俯仰角范围内以一定间隔例如1度或2度设置虚拟用户位置。在每个位置上我们控制RIS依次产生四个不同方向的宽波束覆盖四个角度扇区并记录用户在每个波束照射下接收到的信号功率值。这样对于每一个用户位置我们都能得到一个长度为4的特征向量[Pr1, Pr2, Pr3, Pr4]而其标签就是该用户位置的真实角度值。注意扇区划分的艺术。为什么是四个扇区这不是一个随机数字。划分太少如2个特征区分度不够模型难以学习划分太多如8个虽然特征更丰富但在线探测阶段所需的波束切换次数增加时延和开销也随之上升。四个扇区是在特征分辨力和探测效率之间取得的一个较好折中。在实际设计中扇区的划分边界如0-22.5°, 22.5-45°, 45-67.5°, 67.5-90°需要结合RIS的波束宽度特性来优化确保相邻扇区间的波束模式有足够的差异性。第二阶段特征工程与模型选型我们的特征已经非常直观——四个扇区的接收功率。但这里依然有技巧我们使用的是原始功率的dBm值。在预处理时可以考虑进行归一化以消除绝对功率水平波动如由距离轻微变化引起的影响让模型更专注于学习功率的相对分布模式。模型方面我们测试了六大经典回归器决策树DT、支持向量回归SVR、K近邻KNN、XGBoost、梯度提升GB和随机森林RF。选择这些模型基于以下考虑可解释性如决策树其决策路径清晰便于我们理解模型是如何根据四个功率值做出判断的这对于通信系统调试至关重要。非线性能力接收功率与角度之间的关系绝非线性SVR使用RBF核、基于树的模型DT, RF, XGB, GB都能很好地捕捉复杂非线性关系。效率与精度权衡KNN简单但推理时计算量随数据量增大集成模型RF, XGB, GB通常精度更高但训练稍慢。我们需要在仿真环境中全面评估为未来可能的嵌入式部署提供参考。第三阶段离线模型训练与验证我们将采集到的数据集按比例如7:3划分为训练集和测试集。使用训练集对上述模型进行训练并通过交叉验证调整超参数如树的最大深度、学习率、核函数参数等。评估指标我们选择了三个平均绝对误差MAE直接反映预测角度与真实角度的平均偏差度数单位直观。均方根误差RMSE对大的预测误差惩罚更重能反映模型的稳定性。决定系数R2衡量模型对数据变化的解释能力越接近1说明拟合越好。第四阶段在线实时定位系统部署后当一个新用户进入覆盖区流程如下RIS控制器依次快速切换四个预配置的扇区波束。用户端测量并上报四个对应的接收功率值[Pr1, Pr2, Pr3, Pr4]。控制器将这组特征输入已训练好的机器学习模型。模型实时输出预测的用户角度θ_pred。控制器根据θ_pred选择最优或生成对应的精细波束进行通信。整个在线阶段仅需四次波束探测和一次前向推理耗时极短完美契合低时延要求。3. 实操复现从仿真搭建到模型调优全记录3.1 仿真环境搭建与信道建模要复现这项工作第一步是建立一个尽可能贴近论文假设的仿真环境。我们选择Python作为主要工具结合NumPy、SciPy进行数值计算scikit-learn和XGBoost用于机器学习建模Matplotlib用于绘图。信道模型是整个仿真的核心。我们采用基于几何的简化信道模型。假设基站Tx到RIS以及RIS到用户Rx的路径均为视距路径。那么接收功率Pr可以表示为Pr(dBm) Pt Gt Gr 20*log10(Γ) 10*log10(N^2) - PL其中Pt: 发射功率dBmGt,Gr: 发射和接收天线增益dBiΓ: RIS单元的反射系数幅度假设为0.7代表有损耗N: RIS每维单元数20PL: 路径损耗dB包括自由空间损耗和可能的其他损耗。路径损耗PL的计算是关键。对于RIS辅助链路总路径损耗近似为Tx-RIS和RIS-Rx两段自由空间损耗之和。自由空间路径损耗公式为PL_FSPL(dB) 20*log10(d) 20*log10(f) 20*log10(4π/c)其中d为距离米f为频率Hzc为光速。但更重要的是RIS的波束成形效应。RIS的400个单元通过施加特定的相位偏移使反射波在某个方向θ_r上同相叠加产生增益。这个方向图可以用阵列因子来模拟。对于一个M×N的均匀平面阵列其归一化阵列因子AF(θ, φ)为AF(θ, φ) (1/MN) * | Σ_{m0}^{M-1} Σ_{n0}^{N-1} exp(j * [m*ΔΦ_x n*ΔΦ_y]) |其中ΔΦ_x和ΔΦ_y是相邻单元在x和y方向上的相位差由期望的波束指向角(θ_0, φ_0)和单元间距dx,dy决定ΔΦ_x (2π/λ) * dx * sinθ_0 * cosφ_0,ΔΦ_y (2π/λ) * dy * sinθ_0 * sinφ_0。在我们的简化2D场景中固定φ我们通过调整所有单元的相位生成四个分别指向不同俯仰角扇区中心如11.25°, 33.75°, 56.25°, 78.75°的波束。用户在某角度θ_r接收到的功率需要乘以该角度对应的阵列因子增益|AF(θ_r)|^2。因此完整的接收功率计算是路径损耗与距离、频率相关与波束方向图与角度相关的共同结果。import numpy as np def calculate_received_power(theta_r, theta_beam_center, f27e9, Pt10, Gt15, Gr15, d12.3, d22.3, M20, N20, dx4.6e-3, dy4.6e-3, Gamma0.7): 计算在给定用户角度和RIS波束指向下的接收功率。 theta_r: 用户真实角度度 theta_beam_center: RIS波束指向的中心角度度 返回: 接收功率 (dBm) c 3e8 wavelength c / f k 2 * np.pi / wavelength # 转换为弧度 theta_r_rad np.deg2rad(theta_r) theta_0_rad np.deg2rad(theta_beam_center) # 计算两段路径的自由空间损耗 PL1 20 * np.log10(d1) 20 * np.log10(f) 20 * np.log10(4 * np.pi / c) PL2 20 * np.log10(d2) 20 * np.log10(f) 20 * np.log10(4 * np.pi / c) PL_total PL1 PL2 # 计算阵列因子 delta_phi_x k * dx * np.sin(theta_0_rad) * np.cos(np.pi) # 假设方位角phi180度 delta_phi_y k * dy * np.sin(theta_0_rad) * np.sin(np.pi) m_indices, n_indices np.mgrid[0:M, 0:N] phase_shift m_indices * delta_phi_x n_indices * delta_phi_y array_factor np.abs(np.sum(np.exp(1j * phase_shift))) / (M * N) beamforming_gain_db 20 * np.log10(array_factor 1e-12) # 避免log(0) # 计算总接收功率 Pr_dBm Pt Gt Gr 20*np.log10(Gamma) 20*np.log10(M*N) - PL_total beamforming_gain_db return Pr_dBm3.2 数据集构建与预处理我们沿着0到90度以1度为步长生成91个样本点。对于每个样本点即一个用户角度我们计算其对应四个波束指向下的接收功率形成一个4维特征向量标签就是该角度本身。def generate_dataset(): user_angles np.arange(0, 91, 1) # 0到90度步长1度 beam_centers [11.25, 33.75, 56.25, 78.75] # 四个扇区中心 X [] # 特征 y [] # 标签 for theta in user_angles: features [] for beam_center in beam_centers: pr calculate_received_power(theta, beam_center) features.append(pr) X.append(features) y.append(theta) X np.array(X) y np.array(y) return X, y生成数据后进行简单的归一化处理是一个好习惯这能帮助许多模型更快、更稳定地收敛。我们对特征X进行标准化减去均值除以标准差。from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split X, y generate_dataset() scaler StandardScaler() X_scaled scaler.fit_transform(X) # 对特征进行标准化 # 划分训练集和测试集 X_train, X_test, y_train, y_test train_test_split(X_scaled, y, test_size0.3, random_state42)3.3 模型训练与性能对比接下来我们初始化论文中提到的六种模型并用训练集进行训练。这里以决策树和XGBoost为例展示代码。from sklearn.tree import DecisionTreeRegressor from sklearn.svm import SVR from sklearn.neighbors import KNeighborsRegressor from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor import xgboost as xgb from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score # 初始化模型 models { DT: DecisionTreeRegressor(max_depth5, random_state42), # 限制深度防止过拟合 SVR: SVR(kernelrbf, C100, gamma0.1), KNN: KNeighborsRegressor(n_neighbors5), RF: RandomForestRegressor(n_estimators100, max_depth5, random_state42), GB: GradientBoostingRegressor(n_estimators100, learning_rate0.1, max_depth3, random_state42), XGB: xgb.XGBRegressor(n_estimators100, max_depth3, learning_rate0.1, random_state42) } results {} for name, model in models.items(): model.fit(X_train, y_train) y_pred model.predict(X_test) mae mean_absolute_error(y_test, y_pred) rmse np.sqrt(mean_squared_error(y_test, y_pred)) r2 r2_score(y_test, y_pred) results[name] {MAE: mae, RMSE: rmse, R2: r2} print(f{name}: MAE{mae:.3f}°, RMSE{rmse:.3f}, R2{r2:.3f})运行这段代码我们得到与论文趋势一致的结果决策树DT表现最佳MAE在5度左右R2超过0.95而随机森林RF在本例中表现反而最差。这与论文表II的结果高度吻合。3.4 结果可视化与深度分析数字之外可视化能让我们更直观地理解模型的行为。我们绘制所有测试集样本上模型预测角度与真实角度的散点图以及接收功率方向图的对比。import matplotlib.pyplot as plt # 1. 预测 vs 真实散点图 fig, axes plt.subplots(2, 3, figsize(15, 10)) axes axes.ravel() for idx, (name, model) in enumerate(models.items()): y_pred model.predict(X_test) axes[idx].scatter(y_test, y_pred, alpha0.5) axes[idx].plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], r--, lw2) # 理想对角线 axes[idx].set_xlabel(True Angle (deg)) axes[idx].set_ylabel(Predicted Angle (deg)) axes[idx].set_title(f{name}: MAE{results[name][MAE]:.2f}°) axes[idx].grid(True) plt.tight_layout() plt.show() # 2. 辐射方向图对比 (以DT模型为例) # 生成一个连续角度范围内的预测功率模式 theta_range np.linspace(0, 90, 181) predicted_pattern [] for theta in theta_range: # 对于每个角度计算其四个扇区功率特征 features [] for beam_center in beam_centers: pr calculate_received_power(theta, beam_center) features.append(pr) features_scaled scaler.transform([features]) # 注意使用与训练集相同的scaler pred_angle models[DT].predict(features_scaled)[0] # 这里为了画方向图我们假设预测角度下的接收功率可以用某个波束的最大增益来近似表示 # 更严谨的做法是根据预测角度重新计算阵列因子这里为简化用预测角度附近的一个波束增益模拟 approx_gain_db 20*np.log10(np.abs(np.sinc( (pred_angle - 56.25) / 20 ))) # 示例性函数 predicted_pattern.append(approx_gain_db np.random.randn()*2) # 加一点噪声模拟不完美 # 绘制GT方向图假设波束指向56.25度时 gt_pattern [calculate_received_power(theta, 56.25) for theta in theta_range] plt.figure(figsize(10,6)) plt.plot(theta_range, gt_pattern, b-, labelGround Truth (Beam at 56.25°), linewidth2) plt.plot(theta_range, predicted_pattern, r--, labelPredicted Pattern (DT Model), linewidth2) plt.xlabel(User Angle (deg)) plt.ylabel(Received Power (dBm)) plt.title(Comparison of Radiation Pattern: Ground Truth vs. DT Prediction) plt.legend() plt.grid(True) plt.show()通过散点图我们可以清晰看到DT模型的预测点紧密分布在对角线两侧而RF模型的点则更为分散。方向图对比则能显示DT模型预测的波束主瓣位置峰值对应的角度与真实波束指向非常接近验证了其角度预测的准确性。4. 关键问题与调优心得不止于跑通代码4.1 模型选择背后的“为什么”论文和我们的复现都显示简单的决策树DT表现优于更复杂的集成模型如随机森林RF和XGBoost。这似乎有悖于“模型越复杂性能越好”的常识。这恰恰是本案例最具启发性的地方原因分析如下问题复杂度与数据特征我们的特征只有4维且它们四个扇区的功率与目标角度之间存在明确的、可被规则划分的关系。例如“如果扇区3的功率最高扇区2次之则用户可能在45-60度之间”。决策树非常擅长学习这种基于阈值的、分段常量的规则。它通过一系列“if-else”问题就能很好地拟合数据。过拟合风险随机森林、XGBoost等集成模型能力强大但也更容易在小数据集或特征明确的简单问题上过拟合。它们可能会去学习数据中非常细微的噪声导致在测试集上泛化能力下降。而决策树通过限制深度max_depth可以有效控制模型复杂度避免过拟合。数据量我们的数据集只有91个样本。对于集成模型来说这个数据量可能不足以让其中的大量弱学习器充分、有效地协作。而决策树对数据量的要求相对较低。可解释性的胜利在这个场景下模型的“白盒”特性反而是优势。我们可以轻松可视化决策树的决策路径理解其判断逻辑这增强了我们对系统物理理解的信心也便于后续的调试和优化。实操心得不要盲目追求复杂模型。在通信物理层与机器学习的交叉研究中特征往往具有明确的物理意义。首先尝试简单模型如线性回归、决策树作为基线不仅能快速验证想法的可行性其结果也常能提供对问题本质的深刻洞察。复杂模型应作为性能提升的备选而非起点。4.2 信道模型理想化带来的影响我们的仿真基于一个高度简化的信道模型纯视距路径、完美的相位控制、无互耦的RIS单元、无噪声的理想功率测量。这显然与真实世界相去甚远。在实际部署中我们需要考虑多径效应除了RIS反射路径可能存在其他反射、散射路径导致接收功率是多个路径的叠加特征变得模糊。相位量化误差RIS单元的相位调节通常是离散的如2-bit4-bit而非连续这会导致波束方向图出现旁瓣升高、主瓣偏移等问题。硬件损伤包括RIS单元的幅度不一致性、通道间的耦合、接收机的噪声等。环境动态性移动的用户、变化的障碍物。这些非理想因素会“污染”我们的训练数据导致基于理想数据训练的模型在实际中性能下降。解决方案包括数据增强在仿真中主动加入噪声、相位误差、多径分量来生成更接近真实的数据。鲁棒性特征设计例如不使用绝对功率值而使用四个功率值的相对排序或归一化比例作为特征这在一定程度上可以抵抗信道大尺度衰落的影响。在线自适应系统可以定期收集少量真实环境下的数据对模型进行微调在线学习或迁移学习使模型适应特定的部署环境。4.3 从角度回归到波束索引分类的思考我们目前将问题定义为回归任务预测连续角度值。另一种思路是将其定义为分类任务将0-90度的空间离散化为K个角度区间即K个波束模型的任务是判断用户最可能位于哪个区间。这样做的好处是更符合通信实际波束成形码本本身就是离散的最终目的是选择一个最优的波束索引。可能获得更高精度对于分类问题如果类别可分性好模型可能达到很高的分类准确率。而回归问题总会存在一定的误差。输出更稳定分类输出是离散的避免了回归模型可能产生的、在两个波束方向之间摇摆不定的预测值。我们可以尝试将连续角度标签转换为分类标签然后使用逻辑回归、支持向量机SVC或分类树等模型进行实验对比回归和分类方案的性能。4.4 扩展性探讨走向三维与多用户当前工作局限于二维俯仰角平面。扩展到三维空间方位角和俯仰角是必然。此时特征维度将增加例如使用4x416个波束扫描不同方位-俯仰组合扇区模型输入变为16维。数据量和计算复杂度会增加但核心框架不变。可以预见决策树等模型在特征维度增加后可能面临挑战而神经网络如全连接网络处理高维特征的能力可能会显现优势。多用户场景则更为复杂。多个用户同时反馈的功率值是叠加的无法直接区分。这就需要更先进的信号处理或机器学习架构例如结合压缩感知理论从混合信号中分离不同用户的特征或者设计多任务学习模型同时预测多个用户的位置。5. 总结与展望迈向低开销、智能化的6G波束管理通过这项研究我们验证了“机器学习 RIS”实现极简波束探测与用户定位的可行性。其核心价值在于将复杂的物理层波束搜索问题转化为一个数据驱动的特征匹配与预测问题从而大幅降低初始接入的时延和信令开销。决策树模在本场景下的优异表现提醒我们在通信与AI融合的道路上合适比复杂更重要。清晰的问题定义、贴合物理意义的特征工程往往比堆砌复杂的模型结构更能带来性能提升。当然从仿真到现实还有很长的路要走。下一步的工作将聚焦于信道模型的精细化引入更符合3GPP标准的信道模型如3GPP TR 38.901包含丰富的多径、阻塞和噪声。硬件损伤建模在仿真中纳入RIS的量化相位误差、单元失效、互耦效应等非理想因素评估模型的鲁棒性。原型验证在毫米波实验平台上部署小规模RIS采集真实数据验证离线仿真模型的在线性能并探索在线微调策略。算法轻量化研究适用于嵌入式RIS控制器的轻量级模型如剪枝后的决策树、微型神经网络满足低功耗、实时性的要求。这项工作为RIS辅助的6G网络智能波束管理打开了一扇窗。它不仅仅是一个定位算法更体现了一种系统设计哲学利用环境的结构化智能RIS和数据的驱动智能ML共同化解高频通信的固有难题。随着软硬件技术的不断成熟这种“感知-通信一体化”的智能表面必将成为构建未来极致无线网络的关键拼图。
基于机器学习与RIS的毫米波用户角度定位:四波束探测实现低开销波束管理
1. 项目概述当RIS遇见机器学习如何用四个波束“锁定”用户在毫米波频段玩无线通信就像在一条狭窄却充满障碍物的高速公路上开跑车。速度是快了但一个不小心信号就被墙、人甚至一片树叶给“堵”得严严实实。6G愿景中的超可靠低时延通信核心挑战之一就是如何让基站BS的“手电筒光”波束精准地、快速地照到用户终端上。传统方法是让基站拿着“手电筒”360度无死角地扫一遍这在低频段或许还能忍但在毫米波频段波束又窄又密这种“暴力穷举”式的波束搜索带来的时延和控制信令开销足以让任何追求极致性能的系统设计者头疼。于是可重构智能表面RIS登场了。你可以把它想象成一块智能化的“镜子墙”或“透镜墙”部署在基站和用户之间。它不发电只是通过成百上千个可独立编程的单元对入射的电磁波进行精密的相位调控从而智能地反射或折射信号绕过遮挡甚至将能量聚焦到特定方向。RIS为覆盖增强和链路可靠性带来了革命性的希望。但一个新问题随之而来RIS的引入使得系统可调控的波束方向组合呈指数级增长基站需要“猜”用户在哪还要“猜”RIS该怎么调才能把信号最优地反射过去。这个搜索空间太大了传统的试错法效率极低。这正是我们这项工作的起点能不能让系统变得更“聪明”用最少的“试探”就快速知道用户的大致方位机器学习ML为我们提供了这种可能。我们不再依赖复杂的物理模型去计算而是让数据说话。通过预先收集在不同位置、不同RIS配置下的信号强度数据训练一个模型让它学会从寥寥几次探测的接收功率值中“反推”出用户最可能处在哪个角度区间。这次分享的就是我们在27GHz频段用一个20x20的RIS结合多种经典机器学习回归模型实现高效用户角度定位的完整技术路径、实操细节和踩坑实录。对于通信算法工程师、无线系统研究员或是任何对6G使能技术落地感兴趣的朋友希望这篇深度拆解能带来一些实实在在的参考。2. 系统核心设计从“盲扫”到“智猜”的范式转变2.1 问题重构为什么是角度定位而不是坐标定位在深入方案前首先要明确我们的目标。在RIS辅助的初始接入或波束管理阶段最紧迫的任务不是厘米级的绝对坐标定位那需要更复杂的多基站协作或超大带宽而是快速确定用户的角度域信息即用户相对于RIS的方位角Azimuth和俯仰角Elevation。只要知道了这个角度RIS和基站就可以协同形成指向该方向的窄波束建立高质量初始链路。后续的精细跟踪或数据通信可以在此基础上进行。因此我们将一个三维空间定位问题巧妙地简化为一个基于角度域的回归预测问题。这带来了几个核心优势数据维度降低我们不需要收集用户的三维坐标与复杂信道冲激响应之间的映射关系只需要建立“角度”与“可观测信号特征”之间的关系模型更简单训练数据需求更少。特征易于获取我们选择的特征是最基础的接收信号功率。在任何通信设备上接收信号强度指示RSSI都是最易获取的物理层测量量无需额外的硬件支持或复杂的信号处理。与波束管理天然契合预测输出直接就是波束指向角RIS控制器拿到预测结果后可以立即调用对应角度的预编码码本进行波束成形实现“预测即对准”。2.2 核心框架四步构建数据驱动的定位引擎我们的框架可以概括为四个核心阶段构成了一个完整的离线训练、在线推理闭环。第一阶段可控环境下的数据采集这是所有机器学习应用的基石所谓“Garbage in, garbage out”。我们构建了一个可控的仿真测试环境关键参数如表I所示。这里有几个设计考量RIS规模20x20共400个单元。这是一个在硬件复杂度和波束调控能力之间取得平衡的规模。单元数太少波束成形增益和调控精度不够太多则控制电路复杂仿真和未来硬件实现成本高。频点选择27GHz。这是5G/6G重点考虑的毫米波频段之一路径损耗和遮挡效应显著正是RIS发挥价值的场景。场景简化我们将用户运动范围限制在RIS的俯仰角平面0-90度并固定方位角。这相当于研究一个二维切片旨在首先验证核心方法的可行性。将问题简化、验证通后再扩展到三维是工程研究的常见路径。数据采集过程如同一次系统性的“标定”我们在0-90度的俯仰角范围内以一定间隔例如1度或2度设置虚拟用户位置。在每个位置上我们控制RIS依次产生四个不同方向的宽波束覆盖四个角度扇区并记录用户在每个波束照射下接收到的信号功率值。这样对于每一个用户位置我们都能得到一个长度为4的特征向量[Pr1, Pr2, Pr3, Pr4]而其标签就是该用户位置的真实角度值。注意扇区划分的艺术。为什么是四个扇区这不是一个随机数字。划分太少如2个特征区分度不够模型难以学习划分太多如8个虽然特征更丰富但在线探测阶段所需的波束切换次数增加时延和开销也随之上升。四个扇区是在特征分辨力和探测效率之间取得的一个较好折中。在实际设计中扇区的划分边界如0-22.5°, 22.5-45°, 45-67.5°, 67.5-90°需要结合RIS的波束宽度特性来优化确保相邻扇区间的波束模式有足够的差异性。第二阶段特征工程与模型选型我们的特征已经非常直观——四个扇区的接收功率。但这里依然有技巧我们使用的是原始功率的dBm值。在预处理时可以考虑进行归一化以消除绝对功率水平波动如由距离轻微变化引起的影响让模型更专注于学习功率的相对分布模式。模型方面我们测试了六大经典回归器决策树DT、支持向量回归SVR、K近邻KNN、XGBoost、梯度提升GB和随机森林RF。选择这些模型基于以下考虑可解释性如决策树其决策路径清晰便于我们理解模型是如何根据四个功率值做出判断的这对于通信系统调试至关重要。非线性能力接收功率与角度之间的关系绝非线性SVR使用RBF核、基于树的模型DT, RF, XGB, GB都能很好地捕捉复杂非线性关系。效率与精度权衡KNN简单但推理时计算量随数据量增大集成模型RF, XGB, GB通常精度更高但训练稍慢。我们需要在仿真环境中全面评估为未来可能的嵌入式部署提供参考。第三阶段离线模型训练与验证我们将采集到的数据集按比例如7:3划分为训练集和测试集。使用训练集对上述模型进行训练并通过交叉验证调整超参数如树的最大深度、学习率、核函数参数等。评估指标我们选择了三个平均绝对误差MAE直接反映预测角度与真实角度的平均偏差度数单位直观。均方根误差RMSE对大的预测误差惩罚更重能反映模型的稳定性。决定系数R2衡量模型对数据变化的解释能力越接近1说明拟合越好。第四阶段在线实时定位系统部署后当一个新用户进入覆盖区流程如下RIS控制器依次快速切换四个预配置的扇区波束。用户端测量并上报四个对应的接收功率值[Pr1, Pr2, Pr3, Pr4]。控制器将这组特征输入已训练好的机器学习模型。模型实时输出预测的用户角度θ_pred。控制器根据θ_pred选择最优或生成对应的精细波束进行通信。整个在线阶段仅需四次波束探测和一次前向推理耗时极短完美契合低时延要求。3. 实操复现从仿真搭建到模型调优全记录3.1 仿真环境搭建与信道建模要复现这项工作第一步是建立一个尽可能贴近论文假设的仿真环境。我们选择Python作为主要工具结合NumPy、SciPy进行数值计算scikit-learn和XGBoost用于机器学习建模Matplotlib用于绘图。信道模型是整个仿真的核心。我们采用基于几何的简化信道模型。假设基站Tx到RIS以及RIS到用户Rx的路径均为视距路径。那么接收功率Pr可以表示为Pr(dBm) Pt Gt Gr 20*log10(Γ) 10*log10(N^2) - PL其中Pt: 发射功率dBmGt,Gr: 发射和接收天线增益dBiΓ: RIS单元的反射系数幅度假设为0.7代表有损耗N: RIS每维单元数20PL: 路径损耗dB包括自由空间损耗和可能的其他损耗。路径损耗PL的计算是关键。对于RIS辅助链路总路径损耗近似为Tx-RIS和RIS-Rx两段自由空间损耗之和。自由空间路径损耗公式为PL_FSPL(dB) 20*log10(d) 20*log10(f) 20*log10(4π/c)其中d为距离米f为频率Hzc为光速。但更重要的是RIS的波束成形效应。RIS的400个单元通过施加特定的相位偏移使反射波在某个方向θ_r上同相叠加产生增益。这个方向图可以用阵列因子来模拟。对于一个M×N的均匀平面阵列其归一化阵列因子AF(θ, φ)为AF(θ, φ) (1/MN) * | Σ_{m0}^{M-1} Σ_{n0}^{N-1} exp(j * [m*ΔΦ_x n*ΔΦ_y]) |其中ΔΦ_x和ΔΦ_y是相邻单元在x和y方向上的相位差由期望的波束指向角(θ_0, φ_0)和单元间距dx,dy决定ΔΦ_x (2π/λ) * dx * sinθ_0 * cosφ_0,ΔΦ_y (2π/λ) * dy * sinθ_0 * sinφ_0。在我们的简化2D场景中固定φ我们通过调整所有单元的相位生成四个分别指向不同俯仰角扇区中心如11.25°, 33.75°, 56.25°, 78.75°的波束。用户在某角度θ_r接收到的功率需要乘以该角度对应的阵列因子增益|AF(θ_r)|^2。因此完整的接收功率计算是路径损耗与距离、频率相关与波束方向图与角度相关的共同结果。import numpy as np def calculate_received_power(theta_r, theta_beam_center, f27e9, Pt10, Gt15, Gr15, d12.3, d22.3, M20, N20, dx4.6e-3, dy4.6e-3, Gamma0.7): 计算在给定用户角度和RIS波束指向下的接收功率。 theta_r: 用户真实角度度 theta_beam_center: RIS波束指向的中心角度度 返回: 接收功率 (dBm) c 3e8 wavelength c / f k 2 * np.pi / wavelength # 转换为弧度 theta_r_rad np.deg2rad(theta_r) theta_0_rad np.deg2rad(theta_beam_center) # 计算两段路径的自由空间损耗 PL1 20 * np.log10(d1) 20 * np.log10(f) 20 * np.log10(4 * np.pi / c) PL2 20 * np.log10(d2) 20 * np.log10(f) 20 * np.log10(4 * np.pi / c) PL_total PL1 PL2 # 计算阵列因子 delta_phi_x k * dx * np.sin(theta_0_rad) * np.cos(np.pi) # 假设方位角phi180度 delta_phi_y k * dy * np.sin(theta_0_rad) * np.sin(np.pi) m_indices, n_indices np.mgrid[0:M, 0:N] phase_shift m_indices * delta_phi_x n_indices * delta_phi_y array_factor np.abs(np.sum(np.exp(1j * phase_shift))) / (M * N) beamforming_gain_db 20 * np.log10(array_factor 1e-12) # 避免log(0) # 计算总接收功率 Pr_dBm Pt Gt Gr 20*np.log10(Gamma) 20*np.log10(M*N) - PL_total beamforming_gain_db return Pr_dBm3.2 数据集构建与预处理我们沿着0到90度以1度为步长生成91个样本点。对于每个样本点即一个用户角度我们计算其对应四个波束指向下的接收功率形成一个4维特征向量标签就是该角度本身。def generate_dataset(): user_angles np.arange(0, 91, 1) # 0到90度步长1度 beam_centers [11.25, 33.75, 56.25, 78.75] # 四个扇区中心 X [] # 特征 y [] # 标签 for theta in user_angles: features [] for beam_center in beam_centers: pr calculate_received_power(theta, beam_center) features.append(pr) X.append(features) y.append(theta) X np.array(X) y np.array(y) return X, y生成数据后进行简单的归一化处理是一个好习惯这能帮助许多模型更快、更稳定地收敛。我们对特征X进行标准化减去均值除以标准差。from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split X, y generate_dataset() scaler StandardScaler() X_scaled scaler.fit_transform(X) # 对特征进行标准化 # 划分训练集和测试集 X_train, X_test, y_train, y_test train_test_split(X_scaled, y, test_size0.3, random_state42)3.3 模型训练与性能对比接下来我们初始化论文中提到的六种模型并用训练集进行训练。这里以决策树和XGBoost为例展示代码。from sklearn.tree import DecisionTreeRegressor from sklearn.svm import SVR from sklearn.neighbors import KNeighborsRegressor from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor import xgboost as xgb from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score # 初始化模型 models { DT: DecisionTreeRegressor(max_depth5, random_state42), # 限制深度防止过拟合 SVR: SVR(kernelrbf, C100, gamma0.1), KNN: KNeighborsRegressor(n_neighbors5), RF: RandomForestRegressor(n_estimators100, max_depth5, random_state42), GB: GradientBoostingRegressor(n_estimators100, learning_rate0.1, max_depth3, random_state42), XGB: xgb.XGBRegressor(n_estimators100, max_depth3, learning_rate0.1, random_state42) } results {} for name, model in models.items(): model.fit(X_train, y_train) y_pred model.predict(X_test) mae mean_absolute_error(y_test, y_pred) rmse np.sqrt(mean_squared_error(y_test, y_pred)) r2 r2_score(y_test, y_pred) results[name] {MAE: mae, RMSE: rmse, R2: r2} print(f{name}: MAE{mae:.3f}°, RMSE{rmse:.3f}, R2{r2:.3f})运行这段代码我们得到与论文趋势一致的结果决策树DT表现最佳MAE在5度左右R2超过0.95而随机森林RF在本例中表现反而最差。这与论文表II的结果高度吻合。3.4 结果可视化与深度分析数字之外可视化能让我们更直观地理解模型的行为。我们绘制所有测试集样本上模型预测角度与真实角度的散点图以及接收功率方向图的对比。import matplotlib.pyplot as plt # 1. 预测 vs 真实散点图 fig, axes plt.subplots(2, 3, figsize(15, 10)) axes axes.ravel() for idx, (name, model) in enumerate(models.items()): y_pred model.predict(X_test) axes[idx].scatter(y_test, y_pred, alpha0.5) axes[idx].plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], r--, lw2) # 理想对角线 axes[idx].set_xlabel(True Angle (deg)) axes[idx].set_ylabel(Predicted Angle (deg)) axes[idx].set_title(f{name}: MAE{results[name][MAE]:.2f}°) axes[idx].grid(True) plt.tight_layout() plt.show() # 2. 辐射方向图对比 (以DT模型为例) # 生成一个连续角度范围内的预测功率模式 theta_range np.linspace(0, 90, 181) predicted_pattern [] for theta in theta_range: # 对于每个角度计算其四个扇区功率特征 features [] for beam_center in beam_centers: pr calculate_received_power(theta, beam_center) features.append(pr) features_scaled scaler.transform([features]) # 注意使用与训练集相同的scaler pred_angle models[DT].predict(features_scaled)[0] # 这里为了画方向图我们假设预测角度下的接收功率可以用某个波束的最大增益来近似表示 # 更严谨的做法是根据预测角度重新计算阵列因子这里为简化用预测角度附近的一个波束增益模拟 approx_gain_db 20*np.log10(np.abs(np.sinc( (pred_angle - 56.25) / 20 ))) # 示例性函数 predicted_pattern.append(approx_gain_db np.random.randn()*2) # 加一点噪声模拟不完美 # 绘制GT方向图假设波束指向56.25度时 gt_pattern [calculate_received_power(theta, 56.25) for theta in theta_range] plt.figure(figsize(10,6)) plt.plot(theta_range, gt_pattern, b-, labelGround Truth (Beam at 56.25°), linewidth2) plt.plot(theta_range, predicted_pattern, r--, labelPredicted Pattern (DT Model), linewidth2) plt.xlabel(User Angle (deg)) plt.ylabel(Received Power (dBm)) plt.title(Comparison of Radiation Pattern: Ground Truth vs. DT Prediction) plt.legend() plt.grid(True) plt.show()通过散点图我们可以清晰看到DT模型的预测点紧密分布在对角线两侧而RF模型的点则更为分散。方向图对比则能显示DT模型预测的波束主瓣位置峰值对应的角度与真实波束指向非常接近验证了其角度预测的准确性。4. 关键问题与调优心得不止于跑通代码4.1 模型选择背后的“为什么”论文和我们的复现都显示简单的决策树DT表现优于更复杂的集成模型如随机森林RF和XGBoost。这似乎有悖于“模型越复杂性能越好”的常识。这恰恰是本案例最具启发性的地方原因分析如下问题复杂度与数据特征我们的特征只有4维且它们四个扇区的功率与目标角度之间存在明确的、可被规则划分的关系。例如“如果扇区3的功率最高扇区2次之则用户可能在45-60度之间”。决策树非常擅长学习这种基于阈值的、分段常量的规则。它通过一系列“if-else”问题就能很好地拟合数据。过拟合风险随机森林、XGBoost等集成模型能力强大但也更容易在小数据集或特征明确的简单问题上过拟合。它们可能会去学习数据中非常细微的噪声导致在测试集上泛化能力下降。而决策树通过限制深度max_depth可以有效控制模型复杂度避免过拟合。数据量我们的数据集只有91个样本。对于集成模型来说这个数据量可能不足以让其中的大量弱学习器充分、有效地协作。而决策树对数据量的要求相对较低。可解释性的胜利在这个场景下模型的“白盒”特性反而是优势。我们可以轻松可视化决策树的决策路径理解其判断逻辑这增强了我们对系统物理理解的信心也便于后续的调试和优化。实操心得不要盲目追求复杂模型。在通信物理层与机器学习的交叉研究中特征往往具有明确的物理意义。首先尝试简单模型如线性回归、决策树作为基线不仅能快速验证想法的可行性其结果也常能提供对问题本质的深刻洞察。复杂模型应作为性能提升的备选而非起点。4.2 信道模型理想化带来的影响我们的仿真基于一个高度简化的信道模型纯视距路径、完美的相位控制、无互耦的RIS单元、无噪声的理想功率测量。这显然与真实世界相去甚远。在实际部署中我们需要考虑多径效应除了RIS反射路径可能存在其他反射、散射路径导致接收功率是多个路径的叠加特征变得模糊。相位量化误差RIS单元的相位调节通常是离散的如2-bit4-bit而非连续这会导致波束方向图出现旁瓣升高、主瓣偏移等问题。硬件损伤包括RIS单元的幅度不一致性、通道间的耦合、接收机的噪声等。环境动态性移动的用户、变化的障碍物。这些非理想因素会“污染”我们的训练数据导致基于理想数据训练的模型在实际中性能下降。解决方案包括数据增强在仿真中主动加入噪声、相位误差、多径分量来生成更接近真实的数据。鲁棒性特征设计例如不使用绝对功率值而使用四个功率值的相对排序或归一化比例作为特征这在一定程度上可以抵抗信道大尺度衰落的影响。在线自适应系统可以定期收集少量真实环境下的数据对模型进行微调在线学习或迁移学习使模型适应特定的部署环境。4.3 从角度回归到波束索引分类的思考我们目前将问题定义为回归任务预测连续角度值。另一种思路是将其定义为分类任务将0-90度的空间离散化为K个角度区间即K个波束模型的任务是判断用户最可能位于哪个区间。这样做的好处是更符合通信实际波束成形码本本身就是离散的最终目的是选择一个最优的波束索引。可能获得更高精度对于分类问题如果类别可分性好模型可能达到很高的分类准确率。而回归问题总会存在一定的误差。输出更稳定分类输出是离散的避免了回归模型可能产生的、在两个波束方向之间摇摆不定的预测值。我们可以尝试将连续角度标签转换为分类标签然后使用逻辑回归、支持向量机SVC或分类树等模型进行实验对比回归和分类方案的性能。4.4 扩展性探讨走向三维与多用户当前工作局限于二维俯仰角平面。扩展到三维空间方位角和俯仰角是必然。此时特征维度将增加例如使用4x416个波束扫描不同方位-俯仰组合扇区模型输入变为16维。数据量和计算复杂度会增加但核心框架不变。可以预见决策树等模型在特征维度增加后可能面临挑战而神经网络如全连接网络处理高维特征的能力可能会显现优势。多用户场景则更为复杂。多个用户同时反馈的功率值是叠加的无法直接区分。这就需要更先进的信号处理或机器学习架构例如结合压缩感知理论从混合信号中分离不同用户的特征或者设计多任务学习模型同时预测多个用户的位置。5. 总结与展望迈向低开销、智能化的6G波束管理通过这项研究我们验证了“机器学习 RIS”实现极简波束探测与用户定位的可行性。其核心价值在于将复杂的物理层波束搜索问题转化为一个数据驱动的特征匹配与预测问题从而大幅降低初始接入的时延和信令开销。决策树模在本场景下的优异表现提醒我们在通信与AI融合的道路上合适比复杂更重要。清晰的问题定义、贴合物理意义的特征工程往往比堆砌复杂的模型结构更能带来性能提升。当然从仿真到现实还有很长的路要走。下一步的工作将聚焦于信道模型的精细化引入更符合3GPP标准的信道模型如3GPP TR 38.901包含丰富的多径、阻塞和噪声。硬件损伤建模在仿真中纳入RIS的量化相位误差、单元失效、互耦效应等非理想因素评估模型的鲁棒性。原型验证在毫米波实验平台上部署小规模RIS采集真实数据验证离线仿真模型的在线性能并探索在线微调策略。算法轻量化研究适用于嵌入式RIS控制器的轻量级模型如剪枝后的决策树、微型神经网络满足低功耗、实时性的要求。这项工作为RIS辅助的6G网络智能波束管理打开了一扇窗。它不仅仅是一个定位算法更体现了一种系统设计哲学利用环境的结构化智能RIS和数据的驱动智能ML共同化解高频通信的固有难题。随着软硬件技术的不断成熟这种“感知-通信一体化”的智能表面必将成为构建未来极致无线网络的关键拼图。