主要内容

大规模MIMO混合波束形成

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

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

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

介绍

不断增长的高数据速率和更多用户能力的需求增加了更有效地使用可用频谱的需要。通过允许基站(BS)发射器通过使用相同的时间频率资源与多个移动台(MS)接收器同时通信来改善频谱效率。大规模的MIMO允许BS天线元素的数量大约为数十或数百个,因此还增加了小区中的数据流的数量到大值。

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

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

本示例使用多用户MIMO-OFDM系统,突出了在发送端将所需的预编码划分为其数字基带和射频模拟组件。建立在突出显示的系统使用相控阵的MIMO-OFDM预编码例如,发送端的预编码矩阵和它们的MIMO-OFDM系统中的应用的本实施例中示出了该制剂。

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

系统参数

定义用于示例性系统的参数。修改这些参数,探讨其对系统的影响。

%多用户系统,每个用户单个/多个流prm.numUsers= 4;%用户数量prm.numSTSVec = [3 2 1 2];每个用户的独立数据流数量prm.numsts = sum(prm.numstsvec);%一定是2的幂人口、难民和移民事务局。numTx = prm.numSTS * 8;% BS发射天线数(2的功率)prm.numrx = prm.numstsvec * 4;%每个用户接收天线数量(任意>= numSTSVec)%每个用户具有相同的调制prm.bitspersubcarier = 4;%2:QPSK,4:16QAM,6:64QAM,8:256QAMprm.numdatasymbols = 10;% OFDM数据符号数%MS的位置:在假定原点BS%角指定为[方位角;仰角]度%az范围[-180180],El在范围内[-9090],例如,[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人口、难民和移民事务局。ChanType ='散射';%通道选项:“散射”,“MIMO”人口、难民和移民事务局。NFig = 8;%噪声系数(增加到恶化,5-10 dB)prm.nrays = 500;% Frf, Fbb分区的射线数

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

人口、难民和移民事务局。FFTLength = 256;人口、难民和移民事务局。CyclicPrefixLength = 64;人口、难民和移民事务局。numCarriers = 234;人口、难民和移民事务局。NullCarrierIndices = [1:7 129 256-5:256]';防护和直流百分比人口、难民和移民事务局。PilotCarrierIndices = [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;%终止尾比特数prm.numFrmBits = numSTSVec。*(prm.numDataSymbols * prm.numCarriers *...prm.bitsPerSubCarrier * codeRate) -numTails;人口、难民和移民事务局。modMode = 2 ^ prm.bitsPerSubCarrier;%调制顺序频道滤波器延迟的%帐户numPadSym = 3;百分数的符号到零prm.numpadzeros = numpadsym *(prm.fftlength + prm.cyclicprefixlength);

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

人口、难民和移民事务局。cLight = physconst (“光速”);人口、难民和移民事务局。λ= prm.cLight / prm.fc;%获取发送和接收数组信息[Istxura,Expactortx,Isrxura,Expfactorrx] = HelperarrayInfo(PRM,True);%发射天线阵列定义%数组位置和角度人口、难民和移民事务局。posTx = (0, 0, 0);% BS/发射阵列位置,[x;y;z],米如果isTxURA均匀矩形阵列txarray =分阶段。PartitionedArray (...“数组”,分阶段。([expFactorTx numSTS], 0.5 * prm.lambda),...'子阵列选择',(numsts,numtx),'SubarraySteering'“自定义”);其他的%均匀线性阵列txarray = phased.ula(numtx,“ElementSpacing”0.5 * prm.lambda...'元素',序列。异丙啶anteNneElement(“BackBaffled”,错误的));结尾prm.postxelem = getElementPosition(txArray)/prm.lambda;sploss = zeros(prm.numusers,1);prm.posrx = zeros(3,prm.numusers);为了uIdx = 1: prm.numUsers%接收阵列如果isRxURA (uIdx)均匀矩形阵列rxarray =分阶段。PartitionedArray (...“数组”,相算诅咒([expfactorrx(Uidx)numstsvec(Uidx)],...0.5 * prm.lambda),'子阵列选择',那些(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 =阶段。异丙哒植物;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.NUMSTS.= numSTS;%保持通道相同的阵列配置[rxPreSig, chanDelay] = helperApplyMUChannel(人口、难民和移民事务局,preambleSig spLoss);%信道状态信息反馈黄芪丹参滴丸=细胞(prm.numUsers, 1);PRM.NUMSTS.= numTx;%设置为numTx估计所有链接为了uIdx = 1: prm.numUsers%前端放大器增益和热噪声rxPreAmp =分阶段。ReceiverPreamp (...“获得”,spLoss(uIdx),...%表示路径损失“噪声系数”人口、难民和移民事务局。NFig,'referenceTemperature', 290,...'采样率', prm.chanSRate);rxpresigamp = rxpreamp(rxpresig {uidx});使用的副载波的%比例功率rxPreSigAmp = rxPreSigAmp * (sqrt(prm. prm. prm))FFTLength -...长度(prm.NullCarrierIndices)) / prm.FFTLength);% OFDM解调rxOFDM = ofdmdemod (rxPreSigAmp (chanDelay (uIdx) + 1:...结束(prm.numPadZeros-chanDelay (uIdx)):), prm.FFTLength,...prm.CyclicPrefixLength prm.CyclicPrefixLength,...PRM.NULLCARRIDIDICES,PRM.PILOTCARRIDIDICES);信道估计从序言% numCarr, numTx, numRx黄芪丹参滴丸{uIdx} = helperMIMOChannelEstimate (rxOFDM (:, 1: numTx,:),人口、难民和移民事务局);结尾

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

混合波束形成

该示例使用正交匹配追踪(OMP)算法[3.为单用户系统和联合空间分割多路复用(JSDM)技术[24.]对于多用户系统,以确定数字基带FBB和射频模拟FRF.预编码所选择的系统配置的权重。

对于单用户系统,OMP分区算法对阵列响应向量敏感.理想情况下,这些响应向量可以解释通道看到的所有散射体,但对于实际的系统和通道实现来说,这些响应向量是未知的,所以在三维空间中使用一组随机射线来覆盖尽可能多的散射体。这PRM.NRAYS.参数指定光线的数量。

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

%计算发射侧的混合体重如果prm.numUsers = = 1%单用户OMP% Spread rays in [az;el]=[-180:180;-90:90] 3D空间,等距%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:人口、难民和移民事务局。numCarriers AtExp(carrIdx,:,:) = At;所有子运营商相同结尾%正交匹配追求混合体重润扬悬索桥(Fbb) = omphybweights(黄芪丹参滴丸{1},numSTS, numSTS, AtExp);v = Fbb;%设置基带预编码器(Fbb)%FRF是跨越子载波平坦信道相同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-逐NSTS逐NSTS结尾v = permute(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,超过所述多个子载波平均的权重。阵列响应模式示出了不同的数据流被较强裂片表示。这些瓣表明传播或通过可分离波束形成来实现的。这混合波束形成介绍示例比较由最佳,完全数字方法实现的模式,其中来自所选混合方法的那些,用于单用户系统。

数据传输

该示例为一个体系结构建模,其中每个数据流映射到单独的射频链,每个天线元素连接到每个射频链。如下图所示。

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

%卷积编码器编码器= 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:人口、难民和移民事务局。numCarriers Q = squeeze(v(carrIdx,:,:));normQ = Q * sqrt(numTx)/norm(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.nullcarrierindes)))));%生成与反馈的权重,并在前面加上数据序言preambleSigD = helperGenPreamble(人口、难民和移民事务局,v);txSigSTS = [preambleSigD; txOFDM];%RF波束形成:应用FRF到数字信号%每个天线元件连接到每个数据流txsig = txsigsts * mfrf;

对于所选的全连接射频架构,每个天线单元使用PRM.NUMSTS.相移器,由各个列给出的mFrf矩阵。

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

信号传播

该示例为空间MIMO信道提供了一个选项,并为验证目的提供了一个简单的静态平坦MIMO信道。

散射模型使用具有参数化散射仪的单反冲射线追踪近似。对于此示例,散射体的数量设置为100.“散射”选项模拟散射器在接收器周围的球体内随机放置,类似于单环模型[6.].

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

%对发送信号应用一个空间定义的通道[rxSig, chanDelay] = helperApplyMUChannel(人口、难民和移民事务局,txSig spLoss, preambleSig);

相同的信道同时用于探测和数据传输。数据传输具有较长的持续时间,并且通过数据码元参数的数目来控制,prm.numdatasymbols..声音和传输级之间的频道演变是通过预先输入前导信号到数据信号的模型建模的。前导码将通道归功于数据传输的有效状态,并且从信道输出忽略。

对于多用户系统,每个用户的独立通道被建模。

接收放大和信号恢复

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

hfig = figure('姓名'“每个流均衡码元星座”);scFact = ((prm.FFTLength-length (prm.NullCarrierIndices)).../ prm.FFTLength ^ 2) / numTx;据nVar = noisepow (prm.chanSRate prm.NFig 290) / scFact;解码器= comm.ViterbiDecoder (“InputFormat”“Unquantized”...'TrellisStructure',poly2trellis(7,[133 171 165]),...“TerminationMethod”“终止”“OutputDataType”“双”);为了uIdx = 1: prm.numUsersstsU = numSTSVec(uIdx); stsIdx = sum(numSTSVec(1:(uIdx-1)))+(1:stsU);%前端放大器增益和热噪声rxPreAmp =分阶段。ReceiverPreamp (...“获得”,spLoss(uIdx),...%表示路径损失“噪声系数”人口、难民和移民事务局。NFig,'referenceTemperature', 290,...'采样率', 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.NULLCARRIDIDICES,PRM.PILOTCARRIDIDICES);%从映射的序言进行信道估计高清= helperMIMOChannelEstimate (rxOFDM (: 1: numSTS,:),人口、难民和移民事务局);%分配均衡%索引为感兴趣的用户流[rxeq,csi] = helpermimoequalize(rxofdm(:,numsts + 1:结束,:),hd(:,stsidx,:));%软解调rxSymbs = RXEQ(:)/ SQRT(numTx);rxLLRBits = qamdemod(rxSymbs,prm.modMode,“UnitAveragePower”,真的,...'OutputType''近似''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)/ SQRT(numTx),[],1),'。');轴广场甘氨胆酸xlim(、(标量标量));甘氨胆酸ylim(、(标量标量));标题([“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)]);%计算并显示的误码率数量= comm.ErrorRate;措施=误码率(txDataBits {uIdx}, rxBits);流(' 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,在多用户和单用户系统之间切换,或

  • 信道类型,人口、难民和移民事务局。ChanType,或

  • 光线的数量,PRM.NRAYS.,用于单用户系统。

探索示例中使用的以下帮助函数:

参考文献

  1. 等。《大规模MIMO的混合波束形成:综述》。IEEE®通信杂志,第55卷,第9期,2017年9月,134-141页。

  2. 李志,韩树生,莫利士。“基于毫米波多用户大规模MIMO下行链路的混合波束形成设计”。通信信号处理技术研讨会。

  3. El Ayach, Oma等人。《毫米波MIMO系统中的空间稀疏预编码》。IEEE Transactions on Wireless Communications, Vol. 13, No. 3, 2014年3月,pp. 1499-1513。

  4. Adhikary A., J. Nam, J. y Ahn, G. Caire。联合空间分割和多路复用-大规模阵列体制IEEE Transactions on Information Theory,第59卷,第10期,2013年10月,6441-6463页。

  5. 斯宾塞Q.,A. SwindLehurst,M. Haardt,“用于多用户MIMO通道中的下行链路空间复用的零强制方法。”IEEE在信号处理中的交易,Vol。52,2004,2月2日,第461-471页。

  6. 水,D. S., G. J. Foschini, M. J. Gans和J. M. Kahn。衰落相关及其对多单元天线系统容量的影响。IEEE通讯汇刊,第48卷,第3期,2000年3月,第502-513页。