做通信仿真的朋友应该都有同感:大规模MIMO(Massive MIMO)这几年已经成了5G和6G物理层研究里的标配方向,而混合波束成形(Hybrid Beamforming)又是毫米波大规模MIMO中绕不开的核心模块。这篇博文我想完整拆解一个“发射端采用混合波束成形”的Matlab实现项目,把从系统建模、算法设计到代码实现、仿真实测的整套链路讲清楚。里面既包含可以直接拿去跑的核心代码,也包含我在实际调参过程中踩过的坑和排查思路,希望能帮到正在做相关课题或者准备复现论文的同学。
这个项目适合三类人:一是刚接触大规模MIMO、想理解混合波束成形到底怎么工作的初学者;二是已经搭过完整系统、但发射端预编码部分一直调不出理想性能的研究者;三是在企业做通信基带算法验证、需要快速仿真原型验证的工程师。读完你至少能回答这几个问题:为什么不能所有天线都用一条射频链路?模拟波束成形矩阵到底在做什么?OFDM系统里这套设计该怎么扩展?Matlab里如何用SVD和OMP算法把整个发射端预编码流程落地?
1. 为什么要做发射端混合波束成形
1.1 全数字架构在大规模天线下的瓶颈
传统MIMO系统里,每根天线都连接一条独立的射频链路(RF chain),基带通过数字预编码精确控制每根天线的幅度和相位。这种方式在64天线以下的系统里非常成熟,性能也接近理论极限。但到了大规模MIMO场景,比如基站配置128根甚至256根天线,全数字架构的代价就变得难以接受:每根天线对应的ADC/DAC、混频器、功放、滤波器都需要真实硬件,成本高、功耗大、体积也撑不住。
举个例子,一个64天线、每根天线支持100MHz带宽的基站,如果采用全数字架构,射频链路数量直接就是64条,硬件成本可能占到整个基站系统的70%以上。这个问题在毫米波频段更加突出,因为毫米波器件的成本本来就比sub-6GHz贵很多,同时波长更短允许在同样面积上塞入更多天线,天线阵列规模动辄上百,全数字方案在工程上是不可行的。
1.2 混合波束成形的核心思想
混合波束成形的思路是:不追求每根天线都走独立射频链路,而是把天线分成若干组,每组天线只通过一个移相器网络连接到一条射频链路上。这样射频链路数量可以远小于天线数量,硬件成本和功耗大幅下降。代价是模拟部分只能调整相位,不能调整幅度,因为移相器本身是常数模器件。
整套发射端结构可以拆成两部分:基带数字预编码器(Baseband Digital Precoder)和模拟波束成形网络(Analog Beamforming Network)。数字部分在基带完成,幅度相位都能精确控制,维度是射频链路数乘数据流数,一般很小;模拟部分用移相器网络实现,只调相位,维度是天线的实际数量。最终发射信号经过两级加权之后进入空中信道,这种“高低维度组合”的方案就是混合波束成形名字的由来。
从信号处理的角度理解,混合波束成形本质上就是把一个高维的最优预编码矩阵分解成两个低维矩阵(模拟矩阵加数字矩阵)的乘积,并且模拟矩阵必须满足常数模约束。这个分解是有限制的,所以混合方案的性能不可能超过全数字方案,但通过合理设计,可以做到非常接近全数字方案的频谱效率,同时硬件复杂度大幅降低。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 发射端混合波束成形的设计思路
2.1 系统模型与符号约定
在动手写代码之前,先把系统模型定义清楚。这里我们考虑一个单用户毫米波MIMO系统,发射端有Nt根天线、Nrf条射频链路,接收端有Nr根天线、同样配置Nrf条射频链路,传输Ns个数据流。发射端先用数字预编码器处理维度的Ns维数据流,再经过模拟波束成形网络映射到Nt根天线。
接收信号可以表示为:
y = W_BB' * W_RF' * H * F_RF * F_BB * s + W_BB' * W_RF' * n
其中F_BB是数字预编码矩阵,F_RF是模拟波束成形矩阵,H是Nr乘Nt的信道矩阵,W_RF和W_BB是接收端的模拟和数字组合矩阵。F_RF中的每个元素都满足常数模约束,即|F_RF(i,j)| = 1/sqrt(Nt),这是模拟移相器网络的物理限制。
这个公式是整个设计的出发点。我们可以看到,发射端设计的目标就是确定F_RF和F_BB,使得它们联合作用下,信号经过信道后能尽可能无损地到达接收端,同时抑制噪声和干扰。
2.2 模拟域与数字域的分工
在实际工程里,模拟域和数字域的职责是清晰分开的。模拟域的主要工作是做“大方向”的波束指向,把能量集中到信道的少数几个主要传播路径上。因为毫米波信道的散射簇数量很少(通常3到5个),每个簇内路径的角度集中在很小的范围内,所以用少量移相器向量就可以把大部分能量对准这些方向。
数字域则负责“精细化”处理。在模拟波束成形已经将信号能量集中到低维子空间之后,数字预编码器所要面对的等效信道维度已经降了下来。这时可以使用传统的Zero-Forcing(ZF)或MMSE预编码来消除残余的流间干扰
