做5G物理层仿真的人,看到“毫米波UDN加波束成形”基本能在脑子里还原出一个场景:某个热点区域里塞了几十个发射功率不高的小基站,频率从sub-6G跳到28GHz甚至更高的毫米波频段,覆盖半径被压缩到几十米。用户终端想正常收到下行数据,第一件事不是解调,而是先把自己和基站之间的波束方向对准。这个项目就是在这样的背景下展开的:对带有位置感知的波束成形做链路级建模,并评估它在UDN密集部署下对同频干涉的影响。整体代码基于Matlab,规模不必很大,但把毫米波信道、天线阵列、波束管理、干扰统计这几个环节都串起来了,适合正在搞波束管理算法、想做NR毫米波链路级仿真验证,或者拿这类题做毕设的朋友参考。
这里要先把“干涉评估”四个字解释清楚。在链路级仿真里,它不是说两个波束物理上发生光的干涉,而是指同一时频资源上,多个服务波束和其他干扰波束传到同一个接收机后形成的干扰叠加结果。超密集网络里小区又多又近,这种情况非常普遍。下面我会从项目思路、系统模型、仿真参数、核心实现到调试经验一层层拆,争取让没跑过毫米波仿真的朋友也能照着搭出一版能出图的工程。
1. 项目在解决的问题:毫米波、UDN和位置感知为什么拧在一起
1.1 毫米波小基站密到这种程度,链路问题到底出在哪
毫米波频段最突出的毛病是传输损耗大。同一个发射机,频率提高一倍,自由空间路径损耗大致增加6dB,再加上穿透损耗、雨衰、人体遮挡,传统全向覆盖的思路在FR2频段基本走不通。所以现在都用模拟波束成形把能量集中到一个窄波束上,换一个方向性增益来均衡距离损耗。但高频带来的第二个问题也随之而来:波束太窄,基站不知道该往哪个方向打。如果还停在4G时代那种“全向发、终端自己挑”的思路,可能用户站在基站正前方50米也收不到稳定的信号。
UDN则是另一个维度的应对方式。既然毫米波单站覆盖不了多远,那就把站密起来,间距压到50米以内。这样用户总能找到距离很近的基站,链路预算更容易覆盖。与此同时,UDN会导致另一个副作用——一个用户旁边不止有一个基站,而是可能有好几个基站都在它几百米范围内,如果它们用同一个频段发射并且波束方向恰好旁瓣打过来,就会形成强烈干扰。超密集场景里的毫米波系统往往不是热噪声受限,而是干扰受限,这个问题在链路级仿真里会表现得非常明显。
1.2 为什么用户位置信息可以直接当成波束方向解
传统波束扫描的思路很直白:基站端维护一组候选波束,每隔一段时间把这组候选波束轮发一遍参考信号,用户逐个测量RSRP,再上报自己觉得最好的那个波束编号。为了覆盖一个扇区,基站可能要准备8到12个波束;如果终端侧也有波束候选集,那穷举组合很快就会膨胀。假设基站侧8个发射波束、终端侧8个接收波束,一次完整的Beam Pair扫描要发射64次组合,每次都要占额外的参考信号时频资源。用户位置稍微一变,这套流程又得重来。
位置感知的思路是把“搜索”变成“计算”。基站只要知道用户相对于自己的坐标,就能用一句atan2算出用户所在方位角,再根据自己阵列的摆放方向,直接生成指向用户的波束成形向量。整个过程省去了从前扫到后的波束扫描。在超密集小站场景里更妙的是,基站知道自己的位置、也知道邻居基站位置,还能顺手推算出邻居基站波束会不会打到自己服务的用户,为后面的干扰协调留了空间。
当然这不是说位置感知能解决一切。位置信息的来源可能是UE上报的卫星定位结果、室内定位引擎,也可能是基站侧对上行探测信号的估计,误差总是存在。毫米波波束窄,几米的定位误差在40米距离上就可能带来好几度偏角,所以仿真里必须给位置误差建模。比较实用的做法是在理想位置坐标上加一个零均值高斯误差,再统计波束指向偏斜对SINR的惩罚,这也是这个项目里值得重点看的部分。
1.3 所谓干涉评估,到底统计的是谁在干扰谁
如果把所有参与发射的小基站都打开,一瞬间就有多个毫米波波束在空间里交叉。正常情况下一个用户主要接收服务基站给自己留的波束,但其他基站的波束即使主瓣方向不朝它,旁瓣也可能泄漏过来。链路级干涉评估做的事,就是把所有“非服务”信号逐一求和,量化它们对有用信号的下拉效果。
要真正评估这种干涉,就不能只算“服务基站信道好、波束增益大”这种单点情况。UDN里决定链路质量的往往是干扰功率的分布形态:多个邻区波束在同一个接收位置叠加,是干涉增强还是干涉抵消,随机会很大。项目里用SINR作为核心度量,再画累积分布曲线来观察整体统计行为,这样某个用户运气好或运气差都不会扭曲全局判断。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 链路级模型与干涉评估口径,先定清楚再动手
2.1 链路级仿真和系统级仿真的区别
仿真层次没分清,代码会越写越乱。系统级仿真通常关注多小区调度、用户移动、切换、资源分配这类宏观行为,信道往往用统计分布代替;链路级仿真则把一个或几个收发链路的底层物理过程拉进来,包括天线阵列响应、每条传播路径的幅度相位、波束成形矩阵、接收合并权值,最后给出这跳链路的SINR或误码率。
这个项目选用链路级,是有意为之。因为位置感知波束成形的效果直接体现在波束方向、阵列增益和干扰方向这些细节上。如果只用“基站天线增益15dBi,用户距离50米”的经验公式,位置感知相比全扫描的优势几乎看不出来。只有把每个波束的方向图通过导向矢量写出来,才能在接收端精确统计“指向用户A的波束对用户B产生了多少泄漏功率”。与此同时,链路级仿真又保留一定系统属性,比如多基站、多用户随机拓扑,最终输出的不是单条链路的结果,而是多种随机位置下的性能集合。
2.2 把干扰源拆成三类:跨基站、波束间和资源复用干扰
做干涉评估前先给干扰分门别类,不然很容易算重或者漏算。
第一类是跨基站干扰。目标基站给用户发送数据,相邻基站在同一时频资源上也给自己用户发送数据,那相邻基站波形传到目标用户,就是跨基站干扰。UDN中这常常是主要干扰来源,因为干扰站距离用户可能只有几十米。
第二类是波束间干扰。假设同一个基站通过空分复用同时服务两个用户,两个波束在扇区内角度接近,彼此旁瓣相遇,那么服务用户A的波束也可能对用户B产生额外功率。如果系统用OFDMA把频率资源正交切开,波束间干扰不一定出现;但如果仿真采用空间复用,这种干扰就必须计入。
第三类是资源复用干扰。现实中很难保证每个基站都用完全不同的子带,毫米波系统为了提高频谱效率,经常是同频组网。也就是说所有基站共用整段带宽,三个基站发出的不同数据流会在同一个接收机上碰撞。这个项目默认所有基站全频复用,取其干扰上限来观察位置感知波束成形在极限场景下能扛住多少干扰。
2.3 评估用的核心公式与度量,从SINR到有效频谱效率
链路级评估绕不开SINR。设服务基站是基站0,它对用户k的发射波束向量是f_k,用户k的接收合并向量为w_k,服务信道矩阵是H0,k。用户接收到的有用信号功率就是:
S_k = P_tx × |w_k^H H0,k f_k|^2
所有其他基站j同时发射,它们各自使用的波束是f_j,这些波束传到用户k时叠加成的干扰功率为:
I_k = P_tx × Σ_{j≠0} |w_k^H H_j,k f_j|^2
噪声功率按照热噪声功率谱密度乘以带宽,再叠加接收机噪声系数,记为N。最终SINR为SINR_k = S_k / (N + I_k)。
从SINR再换算到频谱效率就很简单,按香农公式SE_k = log2(1 + SINR_k),单位是bit/s/Hz。如果有系统带宽B,理论上整条链路的总吞吐约等于平均SE乘以B。波束成形增益已经包含在向量乘法过程中,不需要额外再加天线增益,这也是新手常搞混的地方。
链路级模型里天线阵列响应还要单独定义。假设发射端采用N个阵元的均匀线性阵列,相邻阵元间距为半波长λ/2,波束方向相对法线的偏角为θ,那么导向矢量可以写成:
a(N, θ) = (1/√N) × [1, e^(jπ sinθ), …, e^(jπ(N-1)sinθ)]^T
之所以做归一化,是为了保证后续波束成形向量功率为1,这样发射功率P_tx就是真实辐射功率,不会因为阵元数增加而把收发功率自动放大。很多代码跑出来天线增益成倍虚高,问题就出在这里。
3. 仿真参数与核心实现,Matlab里的工程细节
3.1 参数表抄这份:28GHz UDN场景怎么配置
仿真参数的选择直接决定结论能不能反映毫米波UDN的真实特点。频率取28GHz是FR2里很典型的一个点,系统带宽取100MHz。小区拓扑为了兼顾可运行性和代表性,建议先做7个基站中心化布局,后续可以扩展到19个或随机撒点。下面这份参数表可以作为基线:
| 参数 | 取值 | 说明 |
|---|---|---|
| 载波频率 | 28 GHz | 毫米波FR2常用频段 |
| 系统带宽 | 100 MHz | 用于计算噪声功率和总吞吐 |
| 基站数 | 7个或19个 | 避免首次仿真跑不完 |
| 站间距 | 50到70 m | 贴近UDN热点部署密度 |
| 基站发射功率 |
