主要内容

Massive MIMO Hybrid Beamforming

This example shows how hybrid beamforming is employed at the transmit end of a massive MIMO communications system, using techniques for both multi-user and single-user systems. The example employs full channel sounding for determining the channel state information at the transmitter. It partitions the required precoding into digital baseband and analog RF components, using different techniques for multi-user and single-user systems. Simplified all-digital receivers recover the multiple transmitted data streams to highlight the common figures of merit for a communications system, namely, EVM, and BER.

该example employs a scattering-based spatial channel model which accounts for the transmit/receive spatial locations and antenna patterns. A simpler static-flat MIMO channel is also offered for link validation purposes.

该example requires Communications Toolbox™ and Phased Array System Toolbox™.

Introduction

该ever-growing demand for high data rate and more user capacity increases the need to use the available spectrum more efficiently. Multi-user MIMO (MU-MIMO) improves the spectrum efficiency by allowing a base station (BS) transmitter to communicate simultaneously with multiple mobile stations (MS) receivers using the same time-frequency resources. Massive MIMO allows the number of BS antenna elements to be on the order of tens or hundreds, thereby also increasing the number of data streams in a cell to a large value.

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

Compared to current wireless systems, the wavelength in the mmWave band is much smaller. Although this allows an array to contain more elements within the same physical dimension, it becomes much more expensive to provide one transmit-receive (TR) module, or an RF chain, for each antenna element. Hybrid transceivers are a practical solution as they use a combination of analog beamformers in the RF and digital beamformers in the baseband domains, with fewer RF chains than the number of transmit elements [1]。

This example uses a multi-user MIMO-OFDM system to highlight the partitioning of the required precoding into its digital baseband and RF analog components at the transmitter end. Building on the system highlighted in theMIMO-OFDM Precoding with Phased Arrays示例,该示例示出了发送端预编码矩阵的配方及其对MIMO-OFDM系统的应用。

s = rng(67);% Set RNG state for repeatability

System Parameters

为示例定义系统参数。修改这些参数以探索它们对系统的影响。

% Multi-user system with single/multiple streams per userprm.numusers.= 4;%用户数量prm.numstsvec = [3 2 1 2];% Number of independent data streams per user人口、难民和移民事务局。numSTS = sum(prm.numSTSVec);% Must be a power of 2prm.numtx = prm.numsts * 8;% Number of BS transmit antennas (power of 2)人口、难民和移民事务局。numRx = prm.numSTSVec*4;% Number of receive antennas, per user (any >= numSTSVec)% Each user has the same modulation人口、难民和移民事务局。bitsPerSubCarrier = 4;%2:QPSK,4:16QAM,6:64QAM,8:256QAM人口、难民和移民事务局。numDataSymbols = 10;% Number of OFDM data symbols%MS位置:假定原点BS指定为[方位角;高度]度的%角度% az in range [-180 180], el in range [-90 90], e.g. [45;0]maxRange = 1000;% all MSs within 1000 meters of BS人口、难民和移民事务局。mobileRanges = randi([1 maxRange],1,prm.numUsers); prm.mobileAngles = [rand(1,prm.numUsers)*360-180;。。。rand(1,prm.numUsers)*180-90]; prm.fc = 28e9;%28 GHz系统人口、难民和移民事务局。chanSRate = 100 e6;% Channel sampling rate, 100 Msps人口、难民和移民事务局。ChanType =”Scattering';% Channel options: 'Scattering', 'MIMO'人口、难民和移民事务局。NFig = 8;% Noise figure (increase to worsen, 5-10 dB)人口、难民和移民事务局。nRays = 500;% Number of rays for Frf, Fbb partitioning

OFDM调制参数定义used for the system.

prm.fftlength = 256;prm.cyclicprefixlength = 64;prm.numcarriers = 234;prm.nullcarrierindices = [1:7 129 256-5:256]'%守卫和直流人口、难民和移民事务局。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; codeRate = 1/3;% same code rate per usernumtails = 6;%终止尾位数prm.numfrmbits = numstsvec。*(prm.numdatasymbols * prm.numcarriers *。。。人口、难民和移民事务局。bitsPerSubCarrier*codeRate)-numTails; prm.modMode = 2^prm.bitsPerSubCarrier;% Modulation order% Account for channel filter delaynumpadsym = 3;零的符号数量人口、难民和移民事务局。numPadZeros = numPadSym*(prm.FFTLength+prm.CyclicPrefixLength);

Define transmit and receive arrays and positional parameters for the system.

prm.clight = physconst('LightSpeed');Prm.lambda = prm.clight / prm.fc;%获取发送和接收数组信息[isTxURA,expFactorTx,isRxURA,expFactorRx] = helperArrayInfo(prm,true);%发送天线阵列定义%数组位置和角度人口、难民和移民事务局。posTx = [0;0;0];% BS/Transmit array position, [x;y;z], metersifistxura.% Uniform Rectangular arraytxarray = phased.PartitionedArray(。。。'数组',phased.URA([expFactorTx numSTS],0.5*prm.lambda),。。。”SubarraySelection',ones(numSTS,numTx),'子阵列',”Custom');else% Uniform Linear arraytxarray = phased.ULA(numTx,“ElementSpacing”,0.5*prm.lambda,。。。”Element',phased.IsotropicAntennaElement(”BackBaffled',假));end人口、难民和移民事务局。posTxElem = getElementPosition(txarray)/prm.lambda; spLoss = zeros(prm.numUsers,1); prm.posRx = zeros(3,prm.numUsers);foruIdx = 1:prm.numUsers% Receive arraysifisRxURA(uIdx)% Uniform Rectangular arrayrxarray = phased.PartitionedArray(。。。'数组',phased.URA([expFactorRx(uIdx) numSTSVec(uIdx)],。。。0.5*prm.lambda),”SubarraySelection',ones(numSTSVec(uIdx),。。。numrx(Uidx)),'子阵列',”Custom');prm.posrxelem = getElementPosition(rxarray)/prm.lambda;elseifnumRx(uIdx)>1% Uniform Linear arrayrxarray = phased.ULA(numRx(uIdx),。。。“ElementSpacing”,0.5*prm.lambda,。。。”Element',序列。异丙哒植物;prm.posrxelem = getElementPosition(rxarray)/prm.lambda;elserxarray = phased.IsotropicAntennaElement; prm.posRxElem = [0; 0; 0];% LCSendend% Mobile positions[xRx,yRx,zRx] = sph2cart(deg2rad(prm.mobileAngles(1,uIdx)),。。。DEG2RAD(PRM.MOBILEANGLES(2,UIDX)),。。。人口、难民和移民事务局。mobileRanges(uIdx)); prm.posRx(:,uIdx) = [xRx;yRx;zRx]; [toRxRange,toRxAng] = rangeangle(prm.posTx,prm.posRx(:,uIdx)); spLoss(uIdx) = fspl(toRxRange,prm.lambda);end

Channel State Information

对于空间多路复用的系统,发射机处的信道信息的可用性允许应用预编码以最大化感兴趣的方向和信道中的信号能量。在缓慢变化通道的假设下,通过首先发出频道,促进了这一点。BS通过使用参考传输来发出通道,即MS接收器用于估计信道。MS将信道估计信息发送回BS以计算后续数据传输所需的预编码。

该following schematic shows the processing for the channel sounding modeled.

For the chosen MIMO system, a preamble signal is sent over all transmitting antenna elements, and processed at the receiver accounting for the channel. The receiver antenna elements perform pre-amplification, OFDM demodulation, and frequency domain channel estimation for all links.

%生成前导信号prm.numsts = numtx;% set to numTx to sound out all channelsPreeAblesig = HelpergenProdeamble(PRM);% Transmit preamble over channelprm.numsts = numsts;% keep same array config for channel[rxPreSig,chanDelay] = helperApplyMUChannel(preambleSig,prm,spLoss);% Channel state information feedbackhDp = cell(prm.numUsers,1); prm.numSTS = numTx;%设置为numtx来估计所有链接foruIdx = 1:prm.numUsers% Front-end amplifier gain and thermal noiserxpreamp = phased.receiverProamp(。。。”Gain',sploss(Uidx),。。。% account for path loss'噪音文件',prm.nfig,”ReferenceTemperature',290,。。。'采样率',prm.chansrate);rxPreSigAmp = rxPreAmp(rxPreSig{uIdx});% scale power for used sub-carriersrxPreSigAmp = rxPreSigAmp * (sqrt(prm.FFTLength -。。。长度(prm.nullcarrierindices)/ prm.fftlength);% OFDM demodulationrxOFDM = ofdmdemod(rxPreSigAmp(chanDelay(uIdx)+1:。。。end-(prm.numPadZeros-chanDelay(uIdx)),:),prm.FFTLength,。。。prm.cyclicprefixlength,prm.cyclicprefixlength,。。。prm.NullCarrierIndices prm.PilotCarrierIndices);% Channel estimation from preamble% numCarr, numTx, numRxhDp{uIdx} = helperMIMOChannelEstimate(rxOFDM(:,1:numTx,:),prm);end

For a multi-user system, the channel estimate is fed back from each MS, and used by the BS to determine the precoding weights. The example assumes perfect feedback with no quantization or implementation delays.

Hybrid Beamforming

该example uses the orthogonal matching pursuit (OMP) algorithm [3] for a single-user system and the joint spatial division multiplexing (JSDM) technique [2,4] for a multi-user system, to determine the digital basebandFBB.和射频模拟Frf所选系统配置的预编码权重。

For a single-user system, the OMP partitioning algorithm is sensitive to the array response vectorsAt。理想地,这些响应矢量占通道所见的所有散射者,但是对于实际系统和沟道实现,这些响应向量是未知的,因此使用3维空间内的一组随机光线以覆盖尽可能多的散射仪。该人口、难民和移民事务局。nRaysparameter specifies the number of rays.

对于多用户系统,JSDM组具有类似的发送信道协方差的用户,并基于块对角线化方法通过模拟预编码器抑制组间干扰[5]。Here each user is assigned to be in its own group, thereby leading to no reduction in the sounding or feedback overhead.

% Calculate the hybrid weights on the transmit sideifprm.numusers.==1% Single-user 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;rand(1,prm.nRays)*180-90];% randomAt = steervec(prm.posTxElem,txang); AtExp = complex(zeros(prm.numCarriers,size(At,1),size(At,2)));forcarridx = 1:prm.numcarriersatexp(carridx,:,:) = at;% same for all sub-carriersend% Orthogonal matching pursuit hybrid weights[Fbb,Frf] = omphybweights(hDp{1},numSTS,numSTS,AtExp); v = Fbb;% set the baseband precoder (Fbb)平面通道的子载波中%FRF相同mFrf = permute(mean(Frf,1),[2 3 1]);else% Multi-user Joint Spatial Division Multiplexing[Fbb,mFrf] = helperJSDMTransmitWeights(hDp,prm);%多用户基带预编码%将每个用户CSI包装为矩阵(块对角线)steeringMatrix = zeros(prm.numCarriers,sum(numSTSVec),sum(numSTSVec));foruIdx = 1:prm.numUsers stsIdx = sum(numSTSVec(1:uIdx-1))+(1:numSTSVec(uIdx)); steeringMatrix(:,stsIdx,stsIdx) = Fbb{uIdx};逐个nsts-by-nstsendv = erfute(steeringmatrix,[1 3 2]);end%发送阵列图案图ifistxura.% URA element response for the first subcarrier图案(TxArray,PRM.FC,-180:180,-90:90,'类型','efield',。。。'Elementweights',mFrf.'*squeeze(v(1,:,:)),。。。'繁殖',prm.clight);else% ULA% Array response for first subcarrierWTS = MFRF。'*挤压(v(1,:,:));图案(TxArray,PRM.FC,-180:180,-90:90,'类型','efield',。。。“重量”,wts(:1),'繁殖',prm.clight);endprm.numsts = numsts;%恢复数据传输

For the wideband OFDM system modeled, the analog weights,mFrf,是多个子载波上的平均权重。阵列响应模式显示由较强的叶片表示的不同数据流。这些裂片表示通过波束形成实现的涂抹或可分离性。该Introduction to Hybrid Beamformingexample compares the patterns realized by the optimal, fully digital approach, with those realized from the selected hybrid approach, for a single-user system.

数据传输

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

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

% Convolutional encoderencoder = comm.ConvolutionalEncoder(。。。'trellisstructure',poly2trellis(7,[133 171 165]),。。。”TerminationMethod','终止');txDataBits = cell(prm.numUsers, 1); gridData = complex(zeros(prm.numCarriers,prm.numDataSymbols,numSTS));foruIdx = 1:prm.numUsers% Generate mapped symbols from bits per usertxDataBits{uIdx} = randi([0,1],prm.numFrmBits(uIdx),1); encodedBits = encoder(txDataBits{uIdx});% Bits to QAM symbol mappingmappedSym = qammod(encodedBits,prm.modMode,”InputType',bit,。。。'onemaveragepower',true);% Map to layers: per user, per symbol, per data streamstsidx = sum(numstsvec(1 :( uidx-1)))+(1:numstsvec(Uidx));griddata(:,:,stsidx)=重塑(映射yms,prm.numcarriers,。。。人口、难民和移民事务局。numDataSymbols,numSTSVec(uIdx));end假设完美反馈,%将预编码权重应用于子载波preData = complex(zeros(prm.numCarriers,prm.numDataSymbols,numSTS));forsymIdx = 1:prm.numDataSymbolsforcarridx = 1:prm.numcarriers q =挤压(v(carridx,:,:));organq = q * sqrt(numtx)/ norm(q,”fro');preData(carrIdx,symIdx,:) = squeeze(gridData(carrIdx,symIdx,:)).'。。。* NORMQ;endend% Multi-antenna pilots飞行员= HelperGenPilots(PRM.Numdatasymbols,Numsts);% OFDM modulation of the datatxOFDM = ofdmmod(preData,prm.FFTLength,prm.CyclicPrefixLength,。。。PRM.NULLCARRIERINDICES,PRM.PILOTCARRIERINDICES,飞行员);% scale power for used sub-carrierstxOFDM = txOFDM * (prm.FFTLength/。。。sqrt((prm.FFTLength-length(prm.NullCarrierIndices))));%以反馈权重生成序言并将其添加到数据preambleSigD = helperGenPreamble(prm,v); txSigSTS = [preambleSigD;txOFDM];%RF波束成形:将FRF应用于数字信号% Each antenna element is connected to each data streamtxSig = txSigSTS*mFrf;

For the selected, fully connected RF architecture, each antenna element uses人口、难民和移民事务局。numSTSphase shifters, as given by the individual columns of themFrf矩阵。

该processing for the data transmission and reception modeled is shown below.

Signal Propagation

该示例为空间MIMO通道和简单的静态平板MIMO通道提供了一个选择,可提供用于验证目的。

该scattering model uses a single-bounce ray tracing approximation with a parametrized number of scatterers. For this example, the number of scatterers is set to 100. The 'Scattering' option models the scatterers placed randomly within a sphere around the receiver, similar to the one-ring model [6]。

该channel models allow path-loss modeling and both line-of-sight (LOS) and non-LOS propagation conditions. The example assumes non-LOS propagation and isotropic antenna element patterns with linear or rectangular geometry.

% Apply a spatially defined channel to the transmit signal[rxSig,chanDelay] = helperApplyMUChannel(txSig,prm,spLoss,preambleSig);

相同的通道用于发声和数据传输。数据传输具有较长的持续时间,并且由数据符号参数的数量控制,人口、难民和移民事务局。numDataSymbols。该channel evolution between the sounding and transmission stages is modeled by prepending the preamble signal to the data signal. The preamble primes the channel to a valid state for the data transmission, and is ignored from the channel output.

For a multi-user system, independent channels per user are modeled.

Receive Amplification and Signal Recovery

该receiver modeled per user compensates for the path loss by amplification and adds thermal noise. Like the transmitter, the receiver used in a MIMO-OFDM system contains many stages including OFDM demodulation, MIMO equalization, QAM demapping, and channel decoding.

hfig = figure(”Name','每条均等符号星座');scfact =((prm.fftlength-length-(prm.nullcarrierindices))。。。/prm.FFTLength^2)/numTx; nVar = noisepow(prm.chanSRate,prm.NFig,290)/scFact; decoder = comm.ViterbiDecoder('InputFormat','缺乏尺寸',。。。'trellisstructure',Poly2trellis(7,[133 171 165]),。。。”TerminationMethod','终止',”OutputDataType',”double');forUIDX = 1:prm.numusers stsu = numstsvec(Uidx);stsidx = sum(numstsvec(1 :( uidx-1)))+(1:stsu);% Front-end amplifier gain and thermal noiserxpreamp = phased.receiverProamp(。。。”Gain',sploss(Uidx),。。。% account for path loss'噪音文件',prm.nfig,”ReferenceTemperature',290,。。。'采样率',prm.chansrate);rxsigamp = rxpreamp(rxsig {uidx});% Scale power for occupied sub-carriersrxSigAmp = rxSigAmp*(sqrt(prm.FFTLength-length(prm.NullCarrierIndices))。。。/prm.FFTLength);% OFDM demodulationrxofdm = ofdmdemod(rxsigamp(chandelay(uidx)+1:。。。end-(prm.numPadZeros-chanDelay(uIdx)),:),prm.FFTLength,。。。prm.cyclicprefixlength,prm.cyclicprefixlength,。。。prm.NullCarrierIndices prm.PilotCarrierIndices);% Channel estimation from the mapped preambleHD = Helpermimochannelestimate(Rxofdm(:,1:numsts,:),prm);% MIMO equalization% Index into streams for the user of interest[rxEq,CSI] = helperMIMOEqualize(rxOFDM(:,numSTS+1:end,:),hD(:,stsIdx,:));% Soft demodulationrxsymbs = rxeq(:) / sqrt(numtx);rxllrbits = qamdemod(rxsymbs,prm.modmode,'onemaveragepower',true,。。。”OutputType',”approxllr','noisevariance',nVar);% Apply CSI prior to decodingrxllrtmp = Rehape(rxllrbits,prm.bitspersubcarier,[],。。。Prm.numdatasymbols,Stsu);csitmp = REPAPE(CSI,1,[],1,NumStsvec(UIDX));rxscaledllr = rxllrtmp。* csitmp;% Soft-input channel decodingrxDecoded = decoder(rxScaledLLR(:));% Decoded received bitsrxBits = rxDecoded(1:prm.numFrmBits(uIdx));%绘制每个用户所有流的均等符号scaler = ceil(max(abs([real(rxSymbs(:)); imag(rxSymbs(:))])));fori = 1:stsu子平板(prm.numusers,max(numstsvec),(uidx-1)* max(numstsvec)+ i);绘图(Rehape(RXEQ(:,:,i)/ sqrt(numtx),[],1),”。”);轴广场xlim(gca,[-scaler scaler]); ylim(gca,[-scaler scaler]); title([”U 'num2str(UIDX)',DS'num2str(i)]);格on;end% Compute and display the EVMevm = comm.EVM('正常化',”Average constellation power',。。。'referenceignalsource',”Estimated from reference constellation',。。。'ReferenceConstellation',。。。qammod((0:prm.modMode-1)',prm.modMode,'onemaveragepower',1));RMSEVM = EVM(rxsymbs);DISP(['用户'num2str(UIDX)]); disp([”RMS EVM (%) = 'num2str(rmsEVM)]);%计算和显示比特错误率ber = comm.ErrorRate; measures = ber(txDataBits{uIdx},rxBits); fprintf(”BER = %.5f; No. of Bits = %d; No. of errors = %d\n',。。。措施(1),措施(3),措施(2));end
用户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

For the MIMO system modeled, the displayed receive constellation of the equalized symbols offers a qualitative assessment of the reception. The actual bit error rate offers the quantitative figure by comparing the actual transmitted bits with the received decoded bits per user.

rng(s);%恢复rng状态

结论和进一步的探索

该示例强调了对多用户MIMO-OFDM系统的混合波束成形的使用。它允许您通过更改一些系统范围的参数来探索各种信道模型的不同系统配置。

该组可配置参数包括用户数,每个用户的数据流数,发送/接收天线元件,阵列位置和信道模型的数量。调整这些参数您可以研究参数的个人或对整个系统的组合效果。作为示例,各不相同:

  • the number of users,prm.numusers.以及它们相应的数据流,PRM.NUMSTSVEC., to switch between multi-user and single-user systems, or

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

  • 光线的数量,人口、难民和移民事务局。nRays,用于单用户系统。

Explore the following helper functions used by the example:

参考资料

  1. Molisch, A. F., et al. "Hybrid Beamforming for Massive MIMO: A Survey." IEEE® Communications Magazine, Vol. 55, No. 9, September 2017, pp. 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. Spencer Q., A. Swindlehurst, M. Haardt, "Zero-Forcing Methods for Downlink Spatial Multiplexing in Multiuser MIMO Channels." IEEE Transactions on Signal Processing, Vol. 52, No. 2, February 2004, pp. 461-471.

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