大规模MIMO波束形成混合

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

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

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

介绍

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

下一代,5G,无线系统使用毫米波(毫米波)频带取他们的更宽的带宽的优点。所述5G系统还部署大规模的天线阵列,以减轻在毫米波带严重的传播损耗。

相比,目前的无线系统,在毫米波带中的波长小得多。虽然这允许阵列包含相同的物理尺寸内更多的元件,它变得昂贵得多,以提供一个发射 - 接收(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;%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'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]';%卫队和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;终止尾比特的数量%prm.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);%发送天线阵列定义%阵列位置和角度prm.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)),...deg2rad(prm.mobileAngles(2,uIdx)),...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,PRM,spLoss);%信道状态信息反馈HDP =细胞(prm.numUsers,1);prm.numSTS = numTx;%设置为numTx估计所有链接对于uIdx = 1:prm.numUsers%前端放大器的增益和热噪声rxPreAmp = phased.ReceiverPreamp(...'获得',spLoss(uIdx),...%占路损“噪声系数”,prm.NFig,'ReferenceTemperature',290,...'采样率',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模拟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 =络合物(零(prm.numCarriers,尺寸(在,1),大小(在,2)));对于carrIdx = 1:prm.numCarriers AtExp(carrIdx,:,:) =在;%同样为所有子载波结束%正交匹配追踪混合的权重[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.numUsers stsIdx =总和(numSTSVec(1:uIdx-1))+(1:numSTSVec(uIdx));steeringMatrix(:,stsIdx,stsIdx)= {FBB uIdx};%NST-逐NSTS逐NSTS结束V =置换(steeringMatrix,[1 3 2]);结束%发射阵列图案图如果isTxURA为第一子载波%URA元件响应图案(txarray,prm.fc,-180:180,-90:90,'类型'“数字油田”...'ElementWeights',MFRF'*挤压(V(1,:,:))...'PropagationSpeed',prm.cLight);其他%ULA为第一子载波%阵列响应WTS = MFRF'*挤压(V(1,:,:));图案(txarray,prm.fc,-180:180,-90:90,'类型'“数字油田”...“权重”中,WT(:,1),'PropagationSpeed',prm.cLight);结束prm.numSTS = numSTS;用于数据传输%恢复

对于宽带OFDM系统建模,模拟的权重,MFRF,超过所述多个子载波平均的权重。阵列响应模式示出了不同的数据流被较强裂片表示。这些瓣表明传播或通过可分离波束形成来实现的。该简介混合波束成形例如通过将最优的,完全的数字方法,与那些从所选择的混合方法来实现,对于单用户系统实现了图案进行比较。

数据传输

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

接下来,我们配置系统的数据传输。该处理包括信道编码,位映射到复数符号,各个数据流,以多个发射流的拆分,基带的发送流的预编码,OFDM调制与导频映射和RF模拟波束成形所采用的所有的发射天线。

%卷积编码器编码器= comm.ConvolutionalEncoder(...'TrellisStructure',poly2trellis(7,[133 171 165]),...'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,'输入类型'“位”...'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(PRM,V);txSigSTS = [preambleSigD; txOFDM];%RF波束形成:应用FRF到数字信号%每个天线元件被连接到每个数据流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',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),...%占路损“噪声系数”,prm.NFig,'ReferenceTemperature',290,...'采样率',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(:)/ SQRT(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)/ SQRT(numTx),[],1),'');轴广场XLIM(GCA,[ - 定标器定标器]);ylim(GCA,[ - 定标器定标器]);标题(['U'num2str(uIdx)“S,D”num2str(I)]);格;结束%计算并显示EVMEVM = comm.EVM('正常化'“平均星座力量”...'ReferenceSignalSource'“从参考星座估计”...'ReferenceConstellation'...qammod((0:prm.modMode-1)”,prm.modMode,'UnitAveragePower',1));rmsEVM = EVM(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;位= 9354的号;错误的号= 0用户2 RMS EVM(%)= 1.0311 BER = 0.00000;位= 6234的号;错误的号= 0用户3 RMS EVM(%)= 2.1462 BER = 0.00000;位= 3114的号;错误的号= 0用户4 RMS EVM(%)= 1.0024 BER = 0.00000;位= 6234的号;误差= 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。