大规模MIMO混合波束形成

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

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

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

介绍

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

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

与目前的无线系统相比,mm波段的波长要小得多。虽然这样可以让一个阵列在相同的物理尺寸内包含更多的元件,但为每个天线元件提供一个收发模块或射频链就变得昂贵得多。混合收发器是一种实用的解决方案,因为它们使用了射频中的模拟波束发生器和基带域中的数字波束发生器的组合,其射频链比传输元件的数量要少[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位置:在原点假定为b指定为[方位角;仰角]度的%角度在范围[-180 180],EL在范围[-90 90],例如%AZ[45; 0]maxRange = 1000;%1000米以内BS的所有MSprm.mobileRanges =兰迪([1 maxRange],1,prm.numUsers);prm.mobileAngles = [兰特(1,prm.numUsers)* 360-180;兰特(1,prm.numUsers)* 180-90]。prm.fc = 28e9;%28 GHz的系统prm.chanSRate = 100e6;%频道采样率,100个Msps的prm.ChanType ='散射';%通道选项:“散射”、“MIMO”人口、难民和移民事务局。NFig = 8;%噪声系数(增加恶化,5-10分贝)prm.nRays = 500;%用于Frf、Fbb分区的射线数

定义用于系统OFDM调制参数。

prm.FFTLength = 256;prm.CyclicPrefixLength = 64;prm.numCarriers = 234;prm.NullCarrierIndices = [1:7 129 256-5:256]';%卫队和DCprm.PilotCarrierIndices = [26 54 90 118 140 168 204 232]';nonDataIdx = [prm.NullCarrierIndices;prm.PilotCarrierIndices];prm.CarriersLocations = setdiff((1:prm.FFTLength)”,排序(nonDataIdx));numSTS = prm.numSTS;numTx = prm.numTx;numRx = prm.numRx;numSTSVec = prm.numSTSVec;码率1/3 =;每个用户%相同的码速率numTails = 6;终止尾比特的数量%人口、难民和移民事务局。numFrmBits = numSTSVec。* (prm.numDataSymbols * prm.numCarriers *prm.bitsPerSubCarrier *码率)-numTails;prm.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);% BS/发射阵列位置,[x;y;z],米如果isTxURA%均匀矩形阵列txarray = phased.PartitionedArray(“数组”,phased.URA([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”“自定义”);prm.posRxElem = getElementPosition(rxarray)/prm.lambda;其他如果numRx (uIdx) > 1%均匀线性阵列rxarray = phased.ULA(numRx(uIdx),'ElementSpacing'0.5 * prm.lambda'元件', phased.IsotropicAntennaElement);prm.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将信道估计信息传回基站,以便计算后续数据传输所需的预编码。

下面的示意图示出了对于信道的处理拉响蓝本。

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

生成前导信号prm.numSTS = numTx;%设置为numTx试探所有通道preambleSig = helperGenPreamble(PRM);%发送前导码通过信道prm.numSTS = numSTS;为通道保持相同的阵列配置[rxPreSig,chanDelay] = helperApplyMUChannel(preambleSig,PRM,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 * (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模拟FRF预编码权重为选择的系统配置。

对于单用户系统中,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 = [兰特(1,prm.nRays)* 360-180;兰特(1,prm.nRays)* 180-90]。随机%在= steervec (prm.posTxElem txang);AtExp =复杂(0 (prm.numCarriers、尺寸(,1),大小(,2)));对于carrIdx = 1:人口、难民和移民事务局。= At;对所有副承运人相同结束%正交匹配追踪混合的权重[FBB,FRF] = omphybweights(HDP {1},numSTS,numSTS,AtExp);V = FBB;%设置基带预编码器(Fbb)对于平坦的信道,在子载波之间% Frf是相同的MFRF =置换(平均值(FRF,1),[2 3 1]);其他%多用户联合空间分复用[FBB,MFRF] = helperJSDMTransmitWeights(HDP,PRM);%多用户基带预编码%将每个用户CSI压缩到一个矩阵(块对角)steeringMatrix =零(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”,poly2trellis(7,[133 171 165]),“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,'输入类型'“一点”'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 * (pr . fftlength /SQRT((prm.FFTLength长度(prm.NullCarrierIndices))));%生成带有反馈权重的序文,并在数据前置preambleSigD = helperGenPreamble(PRM,V);txSigSTS = [preambleSigD; txOFDM];% RF波束形成:对数字信号应用频响%每个天线元件被连接到每个数据流txSig = txSigSTS * MFRF;

对于选定的,完全连接RF架构中,每个天线元件的用途prm.numSTS移相器,如通过的各列给出MFRF矩阵。

下面示出了用于数据发送和接收模拟的处理。

信号传播

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

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

信道模型允许路径损耗建模和两线的视距(LOS)和非LOS传播条件。该示例假定非LOS传播和与直链或矩形几何形状各向同性天线元件图案。

%应用空间限定信道向发射信号[rxSig,chanDelay] = helperApplyMUChannel(txSig,PRM,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”, [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 *(SQRT(prm.FFTLength长度(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);%MIMO均衡%索引流感兴趣的用户[RXEQ,CSI] = helperMIMOEqualize(rxOFDM(:,numSTS + 1:端,:),HD(:,stsIdx,:));%软解调rxSymbs = rxEq:) /√(numTx);rxLLRBits = qamdemod (rxSymbs prm.modMode,'UnitAveragePower',真的,“输出类型”'approxllr'“NoiseVariance”,NVAR);%之前应用CSI到解码rxLLRtmp =重塑(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(:)); IMAG(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 = % 5;不。比特数= %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. 等人。“大规模MIMO的混合波束形成:一个调查”。IEEE® Communications Magazine, Vol. 55, No. 9, September 2017, pp. 134-141.

  2. 李志中,S. Han, A. F. Molisch。“毫米波多用户大规模MIMO下行的混合波束形成设计”。IEEE ICC 2016, Signal Processing for Communications Symposium.

  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。