大规模MIMO混合波束形成

这个例子展示了如何在一个大型MIMO通信系统的传输端使用多用户和单用户系统的混合波束形成技术。该实例采用全信道测深来确定发射机的信道状态信息。它将所需的预编码划分为数字基带和模拟RF组件,对多用户和单用户系统使用不同的技术。简化的全数字接收器恢复多个传输数据流,突出显示通信系统的共同优点,即EVM和BER。

该例子采用了基于散射的空间信道模型,该模型考虑了发射/接收的空间位置和天线模式。还提供了一个更简单的静态平面MIMO通道,用于链路验证。

该示例需要通信工具箱™和相控阵系统工具箱™。

介绍

对于高数据速率和更多的用户容量的需求不断增长增加了需要更有效地利用可用频谱。多用户MIMO(MU-MIMO)通过允许基站(BS)发送与使用相同的时间 - 频率资源的多个移动台(MS)的接收器同时通信提高了频谱效率。大规模MIMO允许BS天线元件的数量为几十或几百的数量级,从而也增加了数据流的数量在小区中为大的值。

下一代5G无线系统使用毫米波(mmWave)波段来利用其更宽的带宽。5G系统还部署了大规模天线阵列,以减轻在mmWave波段的严重传输损耗。

与目前的无线系统相比,mmWave波段的波长要小得多。尽管这允许一个阵列在相同的物理维度中包含更多的元素,但是为每个天线元素提供一个收发模块(TR)或RF链的成本要高得多。混合收发信机是一种实用的解决方案,因为它们在射频中使用模拟波束形成器和在基带域使用数字波束形成器的组合,其射频链比发射单元的数量要少[1]。

本例使用了一个多用户MIMO-OFDM系统来突出显示将所需的预编码划分到发射机端的数字基带和RF模拟组件中。中突出显示的系统MIMO-OFDM预编码与相控阵这个例子展示了发送端预编码矩阵的表达式及其在MIMO-OFDM系统中的应用。

s = rng (67);设置RNG状态为可重复性

系统参数

为示例定义系统参数。修改这些参数,以了解它们对系统的影响。

每个用户单个/多个流%的多用户系统prm.numUsers= 4;用户的数量%prm.numSTSVec= [3 2 1 2];每个用户独立数据流的百分比prm.numSTS =总和(prm.numSTSVec);%一定是2的幂prm.numTx = prm.numSTS * 8;BS发射天线数量(2个功率)prm.numRx = prm.numSTSVec * 4;每个用户接收天线的数量(任意>= numSTSVec)每个用户有相同的调制prm.bitsPerSubCarrier = 4;% 2: QPSK, 4: 16QAM, 6: 64QAM, 8: 256QAMprm.numDataSymbols = 10;OFDM数据符号的数目% MS位置:以BS为原点指定为[方位角;仰角]度的角度在范围[-180 180],EL在范围[-90 90],例如%AZ[45; 0]maxRange = 1000;距离BS 1000米以内的所有MSs人口、难民和移民事务局。mobileRanges = randi([1 maxRange],1,prm.numUsers);人口、难民和移民事务局。mobileAngles =[兰德(prm.numUsers) * 360 - 180;兰特(prm.numUsers) * 180 - 90);人口、难民和移民事务局。fc = 28 e9;%28 GHz的系统prm.chanSRate = 100e6;%频道采样率,100个Msps的prm.ChanType='散射';%通道选项:“散射”,“MIMO”人口、难民和移民事务局。NFig = 8;%噪声系数(增加恶化,5-10分贝)prm.nRays = 500;用于ff, Fbb分区的射线数

定义系统使用的OFDM调制参数。

prm.FFTLength = 256;prm.CyclicPrefixLength = 64;prm.numCarriers = 234;prm.NullCarrierIndices = [1:7 129 256-5:256]';%卫队和DC人口、难民和移民事务局。[26 54 90 118 140 168 204 232]';nonDataIdx = [prm.NullCarrierIndices;prm.PilotCarrierIndices];人口、难民和移民事务局。CarriersLocations = setdiff((1:prm.FFTLength)', sort(nonDataIdx);numSTS = prm.numSTS;numTx = prm.numTx;numRx = prm.numRx;numSTSVec = prm.numSTSVec; codeRate = 1/3;每个用户的代码率相同numTails = 6;终止尾比特的数量%人口、难民和移民事务局。numFrmBits = numSTSVec。* (prm.numDataSymbols * prm.numCarriers *prm.bitsPerSubCarrier * codeRate) -numTails;人口、难民和移民事务局。modMode = 2 ^ prm.bitsPerSubCarrier;%调制顺序对信道滤波器延迟%帐户numPadSym = 3;符号ZEROPAD的%数prm.numPadZeros = numPadSym *(prm.FFTLength + prm.CyclicPrefixLength);

定义系统的发送和接收数组和位置参数。

prm.cLight = physconst(“光速”);prm.lambda = prm.cLight / prm.fc;%获取发射和接收阵列信息[isTxURA,expFactorTx,isRxURA,expFactorRx] = helperArrayInfo(PRM,TRUE);%发送天线阵列定义%阵列位置和角度人口、难民和移民事务局。posTx = (0, 0, 0);传送阵列位置,[x;y;z],米如果isTxURA均匀矩形阵txarray = phased.PartitionedArray (“数组”,分阶段。([expFactorTx numSTS], 0.5 * prm.lambda),'SubarraySelection',酮(numSTS,numTx),“SubarraySteering”“自定义”);其他的%均匀线性阵列txarray = phased.ULA(numTx,“ElementSpacing”0.5 * prm.lambda'元件',phased.IsotropicAntennaElement(“BackBaffled”、假));结束prm.posTxElem = getElementPosition(txarray)/prm.lambda;spLoss =零(prm.numUsers,1);prm.posRx =零(3,prm.numUsers);对于uIdx = 1: prm.numUsers%接收阵列如果isRxURA (uIdx)均匀矩形阵rxarray = phased.PartitionedArray (“数组”,phased.URA([expFactorRx(uIdx)numSTSVec(uIdx)]0.5 * prm.lambda),'SubarraySelection',酮(numSTSVec(uIdx),numRx(uIdx)),“SubarraySteering”“自定义”);人口、难民和移民事务局。posRxElem = getElementPosition (rxarray) / prm.lambda;其他的如果numRx (uIdx) > 1%均匀线性阵列rxarray = phased.ULA(numRx(uIdx),“ElementSpacing”0.5 * prm.lambda'元件',phased.IsotropicAntennaElement);人口、难民和移民事务局。posRxElem = getElementPosition (rxarray) / prm.lambda;其他的rxarray = phased.IsotropicAntennaElement;prm.posRxElem = [0;0;0];% LCS结束结束%移动位置[XRX,YRX,ZRX] = sph2cart(deg2rad(prm.mobileAngles(1,uIdx)),uIdx函数(prm.mobileAngles (2)),prm.mobileRanges (uIdx));prm.posRx (:, uIdx) = (xRx; yRx zRx);[toRxRange, toRxAng] = rangeangle (prm.posTx prm.posRx (:, uIdx));spLoss (uIdx) = fspl (toRxRange prm.lambda);结束

信道状态信息

对于空间多路复用系统,发射机的信道信息可用性允许预编码,以最大限度地增加感兴趣的方向和信道上的信号能量。在一个缓慢变化的信道的假设下,这是通过先探测信道来实现的。BS通过使用参考传输来探测信道,MS接收器使用参考传输来估计信道。MS将信道估计信息传输回BS,用于计算后续数据传输所需的预编码。

下面的示意图显示了通道探测模型的处理过程。

对于所选择的MIMO系统中,前同步码信号在所有发送天线元件发送的,并处理在接收机处占信道。接收器天线元件进行预放大,OFDM解调,并用于所有链路的频域信道估计。

生成前导信号prm.numSTS = numTx;%设置为numTx试探所有通道preambleSig = helperGenPreamble(PRM);%通过信道传送前导prm.numSTS = numSTS;保持相同的阵列配置频道[rxPreSig, chanDelay] = helperApplyMUChannel(人口、难民和移民事务局,preambleSig spLoss);%信道状态信息反馈黄芪丹参滴丸=细胞(prm.numUsers, 1);prm.numSTS = numTx;%设置为numTx以估计所有链接对于uIdx = 1: prm.numUsers前端放大器的增益和热噪声rxPreAmp = phased.ReceiverPreamp(“获得”spLoss (uIdx),%考虑路径损失“NoiseFigure”,prm.NFig,'ReferenceTemperature',290,“SampleRate”,prm.chanSRate);rxPreSigAmp = rxPreAmp(rxPreSig {uIdx});使用过的副载波的比例功率rxPreSigAmp = rxPreSigAmp * (sqrt(prm))FFTLength -长度(prm.NullCarrierIndices))/ prm.FFTLength);% OFDM解调rxOFDM = ofdmdemod (rxPreSigAmp (chanDelay (uIdx) + 1:结束(prm.numPadZeros-chanDelay (uIdx)):), prm.FFTLength,prm.CyclicPrefixLength,prm.CyclicPrefixLength,prm.NullCarrierIndices,prm.PilotCarrierIndices);%信道估计从前导% numCarr, numTx, numRx黄芪丹参滴丸{uIdx} = helperMIMOChannelEstimate (rxOFDM (:, 1: numTx,:),人口、难民和移民事务局);结束

对于多用户系统,信道估计从每个MS反馈回来,由BS用来确定预编码权值。这个例子假设有完美的反馈,没有量化或实现延迟。

混合波束形成

例子使用了正交匹配追踪(OMP)算法[3]适用于单用户系统及联合空间划分多路复用(JSDM)技术[24用于多用户系统,以确定所述数字基带Fbb和RF模拟降维为选定的系统配置预编码权重。

对于单用户系统中,OMP分区算法是到阵列响应矢量敏感。理想情况下,这些响应矢量占全部由信道看到的散射体,但这些是用于实际的系统和信道实现未知的,所以尽可能使用3维空间到盖内的随机组光线的尽可能多的散射体。的prm.nRays参数指定光线的数量。

对于多用户系统,JSDM将具有相似传输信道协方差的用户分组在一起,并使用基于块对角化方法的模拟预编码器抑制组间干扰[]。在这里,每个用户都被分配到自己的组中,因此不会减少探测或反馈开销。

%计算在发送侧的混合权重如果prm.numUsers = = 1%单用户OMP%传播光线在[AZ; EL] = [ -  180:180; -90:90]三维空间中,相等的间隔% txang = [-180:360/prm.nRays:180;90:180 / prm.nRays: 90);txang =[兰德(prm.nRays) * 360 - 180;兰德(prm.nRays) * 180 - 90);%随机在= steervec (prm.posTxElem txang);AtExp =复杂(0 (prm.numCarriers、尺寸(,1),大小(,2)));对于carrIdx = 1:人口、难民和移民事务局。AtExp(carrIdx,:,:) = At;所有子运营商相同结束%正交匹配追踪混合的权重润扬悬索桥(Fbb) = omphybweights(黄芪丹参滴丸{1},numSTS, numSTS, AtExp);v = Fbb;设置基带预编码器(Fbb)对于平坦信道,子载波间的频响相同mFrf = permute(mean(Frf,1),[2 3 1]);其他的%多用户联合空间分多路复用(Fbb mFrf] = helperJSDMTransmitWeights(黄芪丹参滴丸,人口、难民和移民事务局);%多用户基带预编码%将每个用户CSI打包成矩阵(块对角线)steeringMatrix = 0 (prm.numCarriers总和(numSTSVec)和(numSTSVec));对于uIdx = 1: prm.numUsersstsIdx = sum(numSTSVec(1:uIdx-1))+(1:numSTSVec(uIdx)); steeringMatrix(:,stsIdx,stsIdx) = Fbb{uIdx};% Nst-by-Nsts-by-Nsts结束V =置换(steeringMatrix,[1 3 2]);结束传输数组模式图如果isTxURA第一副载波的URA元素响应模式(txarray、prm.fc 180:180 90:90,“类型”“efield”'ElementWeights',mFrf。*挤压(v (1::)),'PropagationSpeed',prm.cLight);其他的%ULA%第一副载波的阵列响应WTS = MFRF'*挤压(V(1,:,:));模式(txarray、prm.fc 180:180 90:90,“类型”“efield”“权重”出世(:1),'PropagationSpeed',prm.cLight);结束prm.numSTS = numSTS;用于数据传输%恢复

对于所建模的宽带OFDM系统,mFrf,为多个子载波的平均权值。阵列响应模式显示由较强的波瓣表示的不同的数据流。这些波瓣表示通过波束形成而达到的扩展或可分性。的介绍混合波束形成例如通过将最优的,完全的数字方法,与那些从所选择的混合方法来实现,对于单用户系统实现了图案进行比较。

数据传输

的示例模​​型,其中每个数据流映射到一个单独的RF链的体系结构和各天线元件被连接到每个RF链。这被示于下图。

接下来,我们配置系统的数据发送器。该处理包括信道编码、将比特映射到复杂符号、将单个数据流拆分为多个发射流、对发射流进行基带预编码、使用导频映射的OFDM调制以及对所有使用的发射天线进行射频模拟波束形成。

%卷积编码器编码器= comm.ConvolutionalEncoder (“TrellisStructure”(133 171 165),poly2trellis(7日),“TerminationMethod”“终止”);txDataBits =细胞(人口、难民和移民事务局。numUsers, 1);gridData =复杂(0 (prm.numCarriers, prm.numDataSymbols numSTS));对于uIdx = 1: prm.numUsers%从每个用户的位生成映射符号txDataBits {uIdx} =兰迪([0,1],prm.numFrmBits (uIdx), 1);encodedBits =编码器(txDataBits {uIdx});%位到QAM符号映射mappedSym = qammod (encodedBits prm.modMode,“InputType”“一点”'UnitAveragePower',真正的);%映射到层:每个用户,每个符号,每个数据流stsIdx =总和(numSTSVec(1:(uIdx-1)))+(1:numSTSVec(uIdx));的GridData(:,:,stsIdx)=重塑(mappedSym,prm.numCarriers,prm.numDataSymbols numSTSVec (uIdx));结束假设反馈完美,对子载波应用预编码权preData =复杂(0 (prm.numCarriers, prm.numDataSymbols numSTS));对于symIdx = 1: prm.numDataSymbols对于carrIdx = 1:prm.numCarriers Q =挤压(V(carrIdx,:,:));normQ = Q * SQRT(numTx)/常态(Q,“摇来摇去”);preData(carrIdx,symIdx,:) =挤压(的GridData(carrIdx,symIdx,:))“。* normQ;结束结束%的多天线的导频飞行员= helperGenPilots(prm.numDataSymbols,numSTS);数据的OFDM调制txOFDM = ofdmmod(preData,prm.FFTLength,prm.CyclicPrefixLength,prm.NullCarrierIndices,prm.PilotCarrierIndices,飞行员);使用过的副载波的比例功率txOFDM = txOFDM * (prm.FFTLength/)SQRT((prm.FFTLength长度(prm.NullCarrierIndices))));生成带有反馈权重的序言,并在数据前加前缀preambleSigD = helperGenPreamble(人口、难民和移民事务局,v);txSigSTS = [preambleSigD; txOFDM];%射频波束形成:应用频响对数字信号%每个天线单元连接到每个数据流txSig = txSigSTS * MFRF;

对于选定的、完全连接的RF架构,每个天线单元都使用prm.numSTS移相器,如通过的各列给出mFrf矩阵。

数据传输和接收模型的处理如下所示。

信号传播

该示例提供了空间MIMO信道的选项和用于验证目的的更简单的静态平坦MIMO信道。

散射模型使用与散射体的参数化数的单弹跳射线追踪近似。对于此示例,散射体的数量被设置为100。“散射”选项模型散射体随机放置的球内接收器周围,类似于一个环模型[6]。

通道模型允许路径损失建模以及视距(LOS)和非视距传播条件。这个例子假设非视距传播和各向同性天线单元模式与线性或矩形几何。

将空间定义的信道应用于发射信号[rxSig, chanDelay] = helperApplyMUChannel(人口、难民和移民事务局,txSig spLoss, preambleSig);

同一信道用于测深和数据传输。数据传输持续时间较长,由数据符号个数参数控制,prm.numDataSymbols。发声和传输级之间的信道的演变由前面加上前导信号与数据信号进行建模。前导码素数的信道,以用于数据传输的有效状态,并且从信道输出被忽略。

对于多用户系统,对每个用户独立的信道进行建模。

接收放大和信号恢复

每个用户的接收器模型通过放大和增加热噪声来补偿路径损失。与发射机一样,在MIMO-OFDM系统中使用的接收机也包括多个阶段,包括OFDM解调、MIMO均衡、QAM解调和信道解码。

hfig =系数('名称'“均衡符号星座/流”);scFact =((prm.FFTLength长度(prm.NullCarrierIndices))/ prm.FFTLength ^ 2) / numTx;据nVar = noisepow (prm.chanSRate prm.NFig 290) / scFact;解码器= comm.ViterbiDecoder ('InputFormat'“未量化”“TrellisStructure”,poly2trellis(7, [133 171 165]),“TerminationMethod”“终止”“OutputDataType”“双”);对于uIdx = 1:prm.numUsers stsU = numSTSVec(uIdx);stsIdx =总和(numSTSVec(1:(uIdx-1)))+(1:stsU);前端放大器的增益和热噪声rxPreAmp = phased.ReceiverPreamp(“获得”spLoss (uIdx),%考虑路径损失“NoiseFigure”,prm.NFig,'ReferenceTemperature',290,“SampleRate”,prm.chanSRate);rxSigAmp = rxPreAmp(rxSig {uIdx});%比例功率占用的子载波rxSigAmp = rxSigAmp * (√prm.FFTLength-length (prm.NullCarrierIndices))/ prm.FFTLength);% OFDM解调rxOFDM = ofdmdemod (rxSigAmp (chanDelay (uIdx) + 1:结束(prm.numPadZeros-chanDelay (uIdx)):), prm.FFTLength,prm.CyclicPrefixLength,prm.CyclicPrefixLength,prm.NullCarrierIndices,prm.PilotCarrierIndices);%信道估计从映射的前导HD = helperMIMOChannelEstimate(rxOFDM(:,1:numSTS,:),PRM);%分配均衡%索引成流,供感兴趣的用户使用[RXEQ,CSI] = helperMIMOEqualize(rxOFDM(:,numSTS + 1:端,:),HD(:,stsIdx,:));%软解调rxSymbs = rxEq:) /√(numTx);rxLLRBits = qamdemod (rxSymbs prm.modMode,'UnitAveragePower',真的,“输出类型”'approxllr'“NoiseVariance”据nVar);在解码之前应用CSIrxLLRtmp =重塑(rxLLRBits prm.bitsPerSubCarrier, [],prm.numDataSymbols,stsU);csitmp =重塑(CSI,1,[],1,numSTSVec(uIdx));rxScaledLLR = rxLLRtmp * csitmp。%软输入信道译码rxDecoded =解码器(rxScaledLLR (:));解码接收比特rxBits = rxDecoded(1:prm.numFrmBits(uIdx));%绘制均衡码为每个用户所有流定标器=装天花板(max (abs([真实(rxSymbs (:));图像放大(rxSymbs (:))))));对于i = 1:stsU子图(prm)。numUsers马克斯(numSTSVec), (uIdx-1) *马克斯(numSTSVec) + i);情节(重塑(rxEq (:,:, i) /√(numTx), [], 1),'');轴广场甘氨胆酸xlim(、(标量标量));甘氨胆酸ylim(、(标量标量));标题([“U”num2str (uIdx)”,DS”num2str(I)]);格;结束%计算并显示EVMEVM = comm.EVM(“归一化”“平均星座力量”“ReferenceSignalSource”“参考星座估算”“ReferenceConstellation”qammod ((0: prm.modMode-1)、prm.modMode'UnitAveragePower'1));rmsEVM =维生素(rxSymbs);disp ([“用户”num2str (uIdx)]);disp ([' RMS EVM (%) = 'num2str(rmsEVM)]);%计算和显示误码率数量= comm.ErrorRate;措施=误码率(txDataBits {uIdx}, rxBits);流(' BER = %.5f;不。的位= %d;不。误差= %d\n'(1),(3)措施的人,措施(2));结束
用户1 RMS EVM (%) = 0.38361 BER = 0.00000;不。位元= 9354;不。用户2 RMS EVM (%) = 1.0311 BER = 0.00000;不。位= 6234;不。用户3 RMS EVM (%) = 2.1462 BER = 0.00000;不。 of Bits = 3114; No. of errors = 0 User 4 RMS EVM (%) = 1.0024 BER = 0.00000; No. of Bits = 6234; No. of errors = 0

对于MIMO系统建模,显示的接收星座的均衡符号提供了一个定性的接收评估。实际误码率通过比较每个用户实际传输的比特和接收的解码比特提供了量化的数字。

RNG(一个或多个);%恢复RNG状态

结论与进一步探索

这个例子强调了混合波束形成技术在多用户MIMO-OFDM系统中的应用。它允许您通过更改一些系统范围的参数来探索各种通道模型的不同系统配置。

所述一组可配置的参数包括用户数目,数据的数目每用户流,发射数/接收天线元件,阵列位置,和信道模型。调整这些参数,你可以学习的参数整个系统上的单个或组合的效果。作为实例,各不相同:

  • 用户的数量,prm.numUsers和它们相应的数据流,prm.numSTSVec到多用户和单用户系统之间切换,或者

  • 渠道类型,prm.ChanType,或

  • 射线的数量,prm.nRays中,用于单用户系统。

研究以下例子中使用的辅助功能:

参考

  1. 莫利希,A. F.等人。大型MIMO的混合波束形成:一个调查。IEEE® Communications Magazine, Vol. 55, No. 9, September 2017, pp. 134-141.

  2. 李Z.,S.汉和A. F. Molisch。“混合波束赋形设计毫米波多用户MIMO海量下行。”IEEE ICC 2016,信号处理通信研讨会。

  3. 埃尔Ayach,大间,等。“空间稀疏预编码毫米波MIMO系统。”IEEE TRANSACTIONS ON无线通信,第13,第3号,2014年3月,第1499至1513年。

  4. Adhikary A.,J.南,J-Y安,和G. Caire的。“联合空分复用和 - 大型阵列政权。”IEEE交易信息理论,卷。59,第10号,2013年10月,第6441-6463。

  5. 斯宾塞问,答Swindlehurst,M.哈尔特,“迫零的下行空间复用方法在多用户MIMO信道。”IEEE TRANSACTIONS ON信号处理,卷。52,第2号,2004年2月,第461-471页。

  6. 拐,D. S.,G.J。Foschini,M. J.甘斯和J. M.卡恩。“衰落的相关性及其对多元天线系统的能力的影响。”IEEE通信,第48,第3号,2000年3月,第502-513。