文件

大规模的MIMO混合波束形成

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

该示例采用基于散射的空间通道模型,其考虑发送/接收空间位置和天线图案。还提供了更简单的静态平板MIMO通道,可用于链接验证目的。

该示例使用Communications Toolbox™的功能和系统对象™,并需要

  • 相控阵系统工具箱

介绍

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

下一代,5G,无线系统使用毫米波(MMWave)频段来利用它们更广泛的带宽。5G系统还部署了大规模天线阵列,以减轻MMWAVE频带中的严重传播损耗。

与当前的无线系统相比,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 = sum(prm.numstsvec);%必须是2的力量prm.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;所有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系统prm.chansrate = 100e6;%信道采样率,100 mspsprm.chantype =.'散射';%频道选项:'散射','mimo'prm.nfig = 8;%噪声系数(增加到恶化,5-10 dB)prm.nrays = 500;FBB分区的FRF的百分比数量

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

prm.fftlength = 256;prm.cyclicprefixlength = 64;prm.numcarriers = 234;prm.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;%终止尾位数prm.numfrmbits = numstsvec。*(prm.numdatasymbols * prm.numcarriers *......prm.bitspersubcarier * coderate) -  numtails;prm.modmode = 2 ^ prm.bitspersubcarier;%调制顺序频道滤波器延迟的%帐户numpadsym = 3;零的符号数量prm.numpadzeros = numpadsym *(prm.fftlength + prm.cyclicprefixlength);

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

prm.clight = physconst('LightSpeed');Prm.lambda = prm.clight / prm.fc;%获取发送和接收数组信息[Istxura,Expactortx,Isrxura,Expfactorrx] = HelperarrayInfo(PRM,True);%发送天线阵列定义%数组位置和角度prm.postx = [0; 0; 0];%bs /发射阵列位置,[x; y; z],米如果istxura.%均匀矩形阵列txarray = phased.partitionedArray(......'大批',相位淘风器([expactortx numsts],0.5 * prm.lambda),......'子阵列选择',(numsts,numtx),'子阵列''风俗');别的%均匀线性阵列txarray = phased.ula(numtx,'ElementsPacing',0.5 * prm.lambda,......'元素',序列。异丙啶anteNneElement('底板',错误的));结尾prm.postxelem = getElementPosition(txArray)/prm.lambda;sploss = zeros(prm.numusers,1);prm.posrx = zeros(3,prm.numusers);为了UIDX = 1:PRM.Numusers%接收阵列如果Isrxura(UIDX)%均匀矩形阵列rxarray = phased.partitionedarray(......'大批',相算诅咒([expfactorrx(Uidx)numstsvec(Uidx)],......0.5 * prm.lambda),'子阵列选择',那些(numstsvec(Uidx),......numrx(Uidx)),'子阵列''风俗');prm.posrxelem = getElementPosition(rxarray)/prm.lambda;别的如果numrx(Uidx)> 1%均匀线性阵列rxarray = phased.ula(numrx(uidx),......'ElementsPacing',0.5 * prm.lambda,......'元素',序列。异丙哒植物;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声音所有频道PreeAblesig = HelpergenProdeamble(PRM);%在通道上传输序言prm.numsts = numsts;%保持相同的阵列配置[rxpresig,chandelay] = helperapplymuchannel(preamblesig,prm,sploss);%信道状态信息反馈HDP = CELL(PRM.NUMUSERS,1);prm.numsts = numtx;%设置为numtx来估计所有链接为了UIDX = 1:PRM.Numusers%前端放大器增益和热噪声rxpreamp = phased.receiverProamp(......'获得',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.NULLCARRIDIDICES,PRM.PILOTCARRIDIDICES);序言的%信道估计%numcarr,numtx,numrxHDP {UIDX} = HelperMimochanneleStimate(Rxofdm(:,1:numtx,:),prm);结尾

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

混合波束形成

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

对于单用户系统,OMP分区算法对阵列响应向量敏感。理想地,这些响应矢量占通道所见的所有散射者,但是对于实际系统和沟道实现,这些响应向量是未知的,因此使用3维空间内的一组随机光线以覆盖尽可能多的散射仪。这PRM.NRAYS.参数指定光线的数量。

对于多用户系统,JSDM组具有类似的发送信道协方差的用户,并基于块对角线化方法通过模拟预编码器抑制组间干扰[5.]。这里每个用户被分配到自己的组中,从而导致声音或反馈开销的缩小。

%计算发射侧的混合体重如果prm.numusers == 1%单用户OMP[az; el] = [ -  180:180; -90:90] 3d空间,等间距%txang = [-180:360 / prm.nrays:180;-90:180 / prm.nrays:90];txang = [rand(1,prm.nrays)* 360-180;兰特(1,prm.nrays)* 180-90];% 随机的在= steervec(prm.postxelem,txang);fbb =复杂(零(prm.numcarriers,numsts,numsts));frf =复杂(零(prm.numcarriers,numsts,numtx));为了carridx = 1:prm.numcarriers [fbb(carridx,:,:),frf(carridx,:,:)] = Helperomptransmitweights(......erfut(hdp {1}(carridx,::),[2 3]),numsts,numsts,at);结尾v = fbb;%设置基带预编码器(FBB)平面通道的子载波中%FRF相同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};逐个nsts-by-nsts结尾v = erfute(steeringmatrix,[1 3 2]);结尾%发送阵列图案图如果istxura.第一个子载波的%URA元素响应图案(TxArray,PRM.FC,-180:180,-90:90,'类型''efield'......'Elementweights',MFRF'*挤压(v(1,:,:)),......'繁殖',prm.clight);别的%ula针对第一子载波的%数组响应WTS = MFRF。'*挤压(v(1,:,:));图案(TxArray,PRM.FC,-180:180,-90:90,'类型''efield'......'重量',wts(:1),'繁殖',prm.clight);结尾prm.numsts = numsts;%恢复数据传输

对于模拟的宽带OFDM系统,模拟权重,MFRF.,是多个子载波上的平均权重。阵列响应模式显示由较强的叶片表示的不同数据流。这些裂片表示通过波束形成实现的涂抹或可分离性。伴随混合波束形成简介(相控阵系统工具箱)示例比较由最佳,完全数字方法实现的模式,其中来自所选混合方法的那些,用于单用户系统。

数据传输

该示例模拟了一种架构,其中每个数据流映射到单个RF链,并且每个天线元件连接到每个RF链。这在下图中显示。

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

%卷积编码器Encoder = Comm.convolutionAlencoder(......'trellisstructure',Poly2trellis(7,[133 171 165]),......'terminationmethod''终止');%位为QAM符号映射modrqam = comm.rectangularqammodulator(......'调制顺序',prm.modmode,'bitInpul',真的,......'正常化方法''平均力量');txdatabits = cell(prm.numusers,1);griddata =复杂(零(prm.numcarriers,prm.numdatasymbols,numsts));为了UIDX = 1:PRM.Numusers%从每个用户的位生成映射符号txdatabits {uidx} = randi([0,1],prm.numfrmbits(uidx),1);EncodedBits = encoder(TxDatabits {UIDX});mappedsym = modrqam(endodedbits);%映射到图层:每个用户,每个符号,每个数据流stsidx = sum(numstsvec(1 :( uidx-1)))+(1:numstsvec(Uidx));griddata(:,:,stsidx)=重塑(映射yms,prm.numcarriers,......prm.numdatasymbols,numstsvec(Uidx));结尾假设完美反馈,%将预编码权重应用于子载波predata = complex(zeros(prm.numcarriers,prm.numdatasymbols,numsts));为了Symidx = 1:prm.numdatasymbols为了carridx = 1:prm.numcarriers q =挤压(v(carridx,:,:));organq = q * sqrt(numtx)/ norm(q,'fro');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)))));%以反馈权重生成序言并将其添加到数据PreeAblesigd = HelpergenProdeamble(PRM,V);txsigsts = [前期行程指数; txofdm];%RF波束成形:将FRF应用于数字信号%每个天线元素都连接到每个数据流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 = figure('名称''每条均等符号星座');scfact =((prm.fftlength-length-(prm.nullcarrierindices))....../prm.fftlength^2)/ numtx;nvar = noisepow(prm.chansrate,prm.nfig,290)/ scfact;emodrqam = comm.rectangularqamdemodulator(......'调制顺序',prm.modmode,'bitoup',真的,......“决策方法”'近似日志 - 似然比'......'正常化方法''平均力量''方差',nvar);解码器= comm.viterbidecoder('InputFormat''缺乏尺寸'......'trellisstructure',poly2trellis(7,[133 171 165]),......'terminationmethod''终止''outputdatatype''双倍的');为了UIDX = 1:prm.numusers stsu = numstsvec(Uidx);stsidx = sum(numstsvec(1 :( uidx-1)))+(1:stsu);%前端放大器增益和热噪声rxpreamp = phased.receiverProamp(......'获得',sploss(Uidx),......%账户用于路径损耗'噪音文件',prm.nfig,'referenceTemperature',290,......'采样率',prm.chansrate);rxsigamp = rxpreamp(rxsig {uidx});占用子运营商的%级别功率rxsigamp = rxsigamp *(sqrt(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);从映射前导码的%信道估计HD = Helpermimochannelestimate(Rxofdm(:,1:numsts,:),prm);%MIMO均衡为您感兴趣的用户的物流索引[rxeq,csi] = helpermimoequalize(rxofdm(:,numsts + 1:结束,:),hd(:,stsidx,:));%软解调rxsymbs = rxeq(:) / sqrt(numtx);rxllrbits = demodrqam(rxsymbs);%在解码之前应用CSIrxllrtmp = Rehape(rxllrbits,prm.bitspersubcarier,[],......Prm.numdatasymbols,Stsu);csitmp = REPAPE(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子平板(prm.numusers,max(numstsvec),(uidx-1)* max(numstsvec)+ i);绘图(Rehape(RXEQ(:,:,i)/ sqrt(numtx),[],1),'。');轴正方形XLIM(GCA,[ -  Scaler Scaler]);ylim(GCA,[ - 缩放器缩放器]);标题(['U'num2str(UIDX)',DS'num2str(i)]);网格;结尾%计算并显示EVMEVM = comm.evm('正常化''平均星座力量'......'referenceignalsource''从参考星座估计'......'ReferenceConstellation',星座(Demodrqam));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,2017年9月9日,第134-141页。

  2. 李Z.,S. HAN和A. F. Molisch。“用于毫米波多用户大量MIMO下行链路的混合波束形成设计。”IEEE ICC 2016,通信研讨会的信号处理。

  3. El Ayach,Oma,等。“在毫米波MIMO系统中”空间稀疏预编码“。无线通信的IEEE交易,Vol。2014年3月13日,第3月3日,第1499-1513。

  4. Adhikary A.,J.Nam,J-Y Ahn和G. Caire。“联合空间分裂与复用 - 大规模阵列制度。”IEEE关于信息理论的交易,Vol。59,2013年10月10日,第10月,第641-6463333。

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

  6. Shui,D. S.,G.Foschini,M. J. Gans和J. M. Kahn。“褪色相关性及其对多元首天线系统能力的影响。”通信的IEEE交易,卷。48,2000年3月3日,第502-513页。