大规模MIMO波束形成混合

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

的示例采用占该发射/接收的空间位置和天线图案上的基于散射空间信道模型。一个更简单的静态平坦MIMO信道,也可为链路验证的目的。

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

介绍

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

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

相比,目前的无线系统,在毫米波带中的波长小得多。虽然这允许阵列包含相同的物理尺寸内更多的元件,它变得昂贵得多,以提供一个发射 - 接收(TR)模块,或RF链,对于每个天线元件。混合收发器是一个实用的解决方案,因为它们使用在RF模拟波束形成器和数字波束形成器的组合在基带域,与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'prm.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]';%卫队和DC人口、难民和移民事务局。驾驶索引= [26 54 90 118 140 168 204 232];nonDataIdx = [prm.NullCarrierIndices;prm.PilotCarrierIndices];人口、难民和移民事务局。载波位置= setdiff((1:prm.FFTLength)',排序(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);%发送天线阵列定义%阵列位置和角度prm.posTx = [0; 0; 0];%BS /发射阵列的位置,[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);%信道状态信息反馈HDP =细胞(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,numRxHDP {uIdx} = helperMIMOChannelEstimate(rxOFDM(:,1:numTx,:),PRM);结束

对于多用户系统,信道估计从每个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 =络合物(零(prm.numCarriers,尺寸(在,1),大小(在,2)));对于carrIdx = 1:人口、难民和移民事务局。numcarrier AtExp(carrIdx,:,:) = At;%同样为所有子载波结束%正交匹配追踪混合的权重润扬悬索桥(Fbb) = omphybweights(黄芪丹参滴丸{1},numSTS, numSTS, AtExp);v = Fbb;%设置基带预编码(FBB)对于平坦信道,在子载波之间的% Frf是相同的MFRF =置换(平均值(FRF,1),[2 3 1]);其他的%多用户联合空间分割多路复用(Fbb mFrf] = helperJSDMTransmitWeights(黄芪丹参滴丸,人口、难民和移民事务局);%多用户基带预编码将每个用户CSI打包成一个矩阵(块对角)steeringMatrix = 0 (prm.numCarriers总和(numSTSVec)和(numSTSVec));对于uIdx = 1:prm.numUsers stsIdx =总和(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 =细胞(prm.numUsers,1);的GridData =络合物(零(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 =络合物(零(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;

对于所选的全连接射频架构,每个天线元件都使用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”,多边形格架(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 subplot(prm)。numUsers马克斯(numSTSVec), (uIdx-1) *马克斯(numSTSVec) + i);情节(重塑(rxEq (:,:, i) /√(numTx), [], 1),'');轴广场XLIM(GCA,[ - 定标器定标器]);ylim(GCA,[ - 定标器定标器]);标题([“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)]);%计算和显示误码率BER = comm.ErrorRate;措施= BER(txDataBits {uIdx},rxBits);fprintf中('BER =%.5f;位的数目=%d;错误的数目=%d \ n”...(1),(3)措施的人,措施(2));结束
用户1 RMS EVM (%) = 0.38361 BER = 0.00000;不。bit = 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. Molisch,A. F.等。“海量MIMO波束形成混合:调查。”IEEE®通信杂志,卷。55,第9号,2017年9月,第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。