主要内容

大规模MIMO混合波束形成

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

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

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

介绍

对高数据速率和更多用户容量的不断增长的需求增加了更有效地使用可用频谱的需求。多用户MIMO (MU-MIMO)通过允许一个基站(BS)发射机与多个移动基站(MS)接收机使用相同的时频资源同时通信来提高频谱效率。海量MIMO允许BS天线单元的数量达到数十或数百个数量级,从而也将单元中的数据流数量增加到一个较大的值。

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

与当前的无线系统相比,毫米波段的波长要小得多。虽然这允许阵列在相同的物理尺寸内包含更多的元素,但提供一个发射接收(TR)的成本要高得多模块或RF链,用于每个天线单元。混合收发器是一种实用的解决方案,因为它们在RF中使用模拟波束形成器,在基带域中使用数字波束形成器,RF链少于发射单元的数量[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;%基站发射天线数量(2个功率)人口、难民和移民事务局。numRx = prm.numSTSVec * 4;每个用户的接收天线数量(任何> = numstsvec)%每个用户具有相同的调制人口、难民和移民事务局。bitsPerSubCarrier = 4;% 2: qpsk, 4: 16qam, 6: 64qam, 8: 256qamprm.numDataSymbols= 10;%数量的OFDM数据符号% MS职位:以本科学历为基础%指定为[方位角;仰角]度的角度% az在范围[-180 180],el在范围[-90 90],例如[45;0]maxrange = 1000;所有MSS在BS的1000米范围内prm.mobileranges = randi([1 maxrange],1,prm.numusers);prm.mobileangles = [兰特(1,prm.numusers)* 360-180;...兰特(1,prm.numusers)* 180-90];PRM.FC = 28E9;% 28 GHz系统人口、难民和移民事务局。chanSRate = 100 e6;%通道采样率,100 Mspsprm.chantype =.“散射”%频道选项:'散射','mimo'prm.NFig=8;%噪声值(增加至恶化,5-10 dB)prm.nRays= 500;%Frf、Fbb分区的光线数

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

人口、难民和移民事务局。FFTLength = 256;人口、难民和移民事务局。CyclicPrefixLength = 64;人口、难民和移民事务局。numCarriers = 234;人口、难民和移民事务局。NullCarrierIndices = [1:7 129 256-5:256]';防护和直流百分比prm.pilotcarrierindices = [26 54 90 118 140 168 204 232]';nondataidx = [prm.nullcarrierindices;prm.pilotcarrierindices];PRM.CarriersLocations = setDiff((1:prm.fftlength)',sort(nondataidx));numsts = prm.numsts;numtx = prm.numtx;numrx = prm.numrx;numstsvec = prm.numstsvec;分数= 1/3;每个用户相同的代码率numTails = 6;%终止尾比特数人口、难民和移民事务局。numFrmBits = numSTSVec。* (prm.numDataSymbols * prm.numCarriers *...prm.bitspersubcarier * coderate) -  numtails;prm.modmode = 2 ^ prm.bitspersubcarier;%调制顺序%通道滤波器延迟numPadSym = 3;百分数的符号到零人口、难民和移民事务局。numPadZeros = numPadSym * (prm.FFTLength + prm.CyclicPrefixLength);

定义发射和接收系统的阵列和位置参数。

人口、难民和移民事务局。cLight = physconst (“光速”);人口、难民和移民事务局。λ= prm.cLight / prm.fc;%获取发送和接收数组信息[isTxURA, expFactorTx isRxURA expFactorRx] = helperArrayInfo(人口、难民和移民事务局,真实);%发射天线阵列定义%数组位置和角度prm.posTx=[0;0;0];%基站/发射阵列位置[x;y;z],米如果isTxURA%均匀矩形阵列txarray = phased.partitionedArray(...“数组”,相位淘风器([expactortx numsts],0.5 * prm.lambda),...“SubarraySelection”的(numSTS numTx),“SubarraySteering”'风俗');别的均匀线性阵列txarray =分阶段。齿龈(numTx'ElementsPacing',0.5*prm.lambda,...“元素”,分阶段。IsotropicAntennaElement ('底板'、假));结束人口、难民和移民事务局。posTxElem = getElementPosition (txarray) / prm.lambda;spLoss = 0 (prm.numUsers, 1);人口、难民和移民事务局。prm.numUsers posRx = 0(3日);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;人口、难民和移民事务局。posRxElem = [0;0;0);%LCS.结束结束%手机职位(xRx yRx zRx] = sph2cart(函数(prm.mobileAngles (uIdx)),...uIdx函数(prm.mobileAngles (2)),...prm.mobileRanges(uIdx));prm.posRx(:,uIdx)=[xRx;yRx;zRx];[toRxRange,toRxAng]=射程角(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,prm,sploss);%通道状态信息反馈hDp=单元(prm.numUsers,1);prm.numSTS=numTx;%设置为numTx以估计所有链接UIDX = 1:PRM.Numusers%前端放大器增益和热噪声rxPreAmp =分阶段。ReceiverPreamp (...“收益”spLoss (uIdx),...%账户用于路径损耗“NoiseFigure”人口、难民和移民事务局。NFig,“ReferenceTemperature”,290,...“SampleRate”, prm.chanSRate);rxPreSigAmp = rxPreAmp (rxPreSig {uIdx});二手分载流子的%级别功率rxPreSigAmp=rxPreSigAmp*(sqrt(prm.fft长度-...长度(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}=helpermmochannelestimate(rxOFDM(:,1:numTx,:),prm);结束

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

混合波束形成

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

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

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

%计算发送侧的混合权值如果prm.numusers == 1%单用户OMP% Spread rays in [az;el]=[-180:180;-90:90] 3D空间,等距% tang = [-180:360/prm.nRays:180;90:180 / prm.nRays: 90);txang = [rand(1,prm.nrays)* 360-180;兰特(1,prm.nrays)* 180-90];% 随机的At=steervec(prm.posTxElem,txang);AtExp=complex(零(prm.numCarriers,大小(At,1),大小(At,2));carrIdx=1:prm.numCarriers AtExp(carrIdx,:,:)=At;%所有子载波相同结束%正交匹配追求混合权重[FBB,FRF] = Omphybweights(HDP {1},Numsts,Numsts,Atexch);v = fbb;%设置基带预编码器(Fbb)%频响在平坦信道的子载波之间是相同的MFRF =润滑(平均值(FRF,1),[2 3 1]);别的%多用户联合空间分割多路复用[FBB,MFRF] = HelperjsdMtransmitweights(HDP,PRM);多用户基带预编码将每个用户的CSI打包成一个矩阵(块对角线)steeringmatrix = zeros(prm.numcarriers,sum(numstsvec),sum(numstsvec));uIdx=1:prm.numUsers stsIdx=sum(numSTSVec(1:uIdx-1))+(1:numSTSVec(uIdx));steeringMatrix(:,stsIdx,stsIdx)=Fbb{uIdx};% Nst-by-Nsts-by-Nsts结束v = permute(steeringMatrix,[1 3 2]);结束%发送阵列模式图如果isTxURA%第一子载波的URA元素响应模式(txarray,prm.fc,-180:180,-90:90,“类型”“efield”...“ElementWeights”,MFRF'*挤压(v(1,:,:)),...“PropagationSpeed”, prm.cLight);别的%齿龈针对第一子载波的%数组响应wts = mFrf。”*挤压(v (1::));模式(txarray,prm.fc,-180:180,-90:90,“类型”“efield”...“重量”出世(:1),“PropagationSpeed”, prm.cLight);结束prm.numSTS= numSTS;%恢复数据传输

对于模拟的宽带OFDM系统,模拟权重,MFRF.,表示多个子载波上的平均权值。阵列响应模式显示了不同的数据流,由较强的瓣表示。这些瓣表示通过波束形成实现的扩展或可分离性。的混合波束形成简介实例比较了由最优的全数字方法实现的模式,以及由选择的混合方法实现的模式,对于一个单用户系统。

数据传输

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

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

%卷积编码器编码器=公共卷积编码器(...“TrellisStructure”,Poly2trellis(7,[133 171 165]),...“终止方法”“终止”);txDataBits=单元(prm.numesers,1);gridData=复数(零(prm.numCarriers,prm.numDataSymbols,numSTS));UIDX = 1:PRM.Numusers%从每个用户的位生成映射符号txdatabits {uidx} = randi([0,1],prm.numfrmbits(uidx),1);EncodedBits = encoder(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.numdatasymbolscarrIdx = 1:人口、难民和移民事务局。numCarriers Q = squeeze(v(carrIdx,:,:));normQ = Q * sqrt(numTx)/norm(Q,“fro”);preData (carrIdx symIdx:) =挤压(gridData (carrIdx、symIdx:))。...* normQ;结束结束% Multi-antenna飞行员飞行员= helperGenPilots (prm.numDataSymbols numSTS);%数据的OFDM调制txOFDM = ofdmmod (preData prm.FFTLength prm.CyclicPrefixLength,...prm.NullCarrierIndices prm.PilotCarrierIndices,飞行员);二手分载流子的%级别功率txOFDM=txOFDM*(prm.fft长度/...√(prm.FFTLength-length prm.NullCarrierIndices))));%生成带有反馈权重的前导和数据的前置PreeAblesigd = HelpergenProdeamble(PRM,V);txsigsts = [前期行程指数; txofdm];%射频波束形成:对数字信号施加频响%每个天线元素都连接到每个数据流txSig = txSigSTS * mFrf;

对于所选的完全连接的RF架构,每个天线元素使用prm.numSTS相移器,如给定的个别列MFRF.矩阵。

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

信号传播

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

散射模型采用参数化散射体数目的单反射射线追踪近似。对于本例,散射体的数量被设置为100。“散射”选项将散射体随机放置在接收器周围的一个球体内,类似于单环模型[6].

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

%将空间定义的通道应用于发射信号[rxsig,chandelay] = helperapplymuchannel(txsig,prm,sploss,preeamblesig);

同一信道用于探测和数据传输。数据传输持续时间较长,由数据符号数参数控制,prm.numDataSymbols.在探测级和传输级之间的信道演化模型中,将前置信号前置到数据信号。序言使通道进入数据传输的有效状态,并且在通道输出中被忽略。

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

接收放大和信号恢复

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

hfig =图(“名字”“每个流的均衡符号星座”);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]),...“终止方法”“终止”'outputdatatype''双倍的');UIDX = 1:PRM.NumusersstsU = numSTSVec(uIdx); stsIdx = sum(numSTSVec(1:(uIdx-1)))+(1:stsU);%前端放大器增益和热噪声rxPreAmp =分阶段。ReceiverPreamp (...“收益”spLoss (uIdx),...%账户用于路径损耗“NoiseFigure”人口、难民和移民事务局。NFig,“ReferenceTemperature”,290,...“SampleRate”, prm.chanSRate);rxSigAmp = rxPreAmp (rxSig {uIdx});%已占用子载波功率比例rxsigamp = rxsigamp *(sqrt(prm.fftlength-length(prm.nullcarrierindices)).../prm.fft长度);%OFDM解调rxOFDM = ofdmdemod (rxSigAmp (chanDelay (uIdx) + 1:...结束 - (prm.numpadzeros-chandelay(Uidx)),:),prm.fftlength,...prm.CyclicPrefixLength prm.CyclicPrefixLength,...prm.NullCarrierIndices prm.PilotCarrierIndices);%基于映射前导的信道估计高清= helperMIMOChannelEstimate (rxOFDM (: 1: numSTS,:),人口、难民和移民事务局);%MIMO均衡为您感兴趣的用户的物流索引[rxEq, CSI] = helperMIMOEqualize (rxOFDM (numSTS + 1::,:),高清(:,stsIdx:));%软解调rxSymbs = rxEq:) /√(numTx);rxLLRBits = qamdemod (rxSymbs prm.modMode,“UnitAveragePower”符合事实的...“OutputType”“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));%绘制每个用户的所有流的均衡符号缩放者= ceil(max(abs(abs(rxsymbs(rxsymbs(rxsymbs); imag(rxsymbs(:))))));i = 1:stsU subplot(prm.;numUsers马克斯(numSTSVec), (uIdx-1) *马克斯(numSTSVec) + i);情节(重塑(rxEq (:,:, i) /√(numTx), [], 1),“。”);轴广场xlim(gca,[-scaler-scaler]);ylim(gca,[-scaler-scaler]);title(['U'num2str (uIdx)”,DS”num2str (i)));网格在…上结束%计算并显示EVM维生素与= 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;measures=ber(txDataBits{uIdx},rxBits);fprintf('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;不。of Bits = 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.nRays,用于单用户系统。

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

参考文献

  1. Molisch,A.F.等人,“大规模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. 史文彬,“多用户MIMO信道下行空间多路复用的零强迫方法”。IEEE信号处理学报,第52卷,第2期,2004年2月,第461-471页。

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