主要内容

相控阵MIMO-OFDM预编码

此示例显示了采用波束成形的MIMO-OFDM通信系统中使用相控阵列。使用来自Communications Toolbox™和相控阵系统工具箱™的组件,它模拟包括发射器和前端接收器组件的辐射元件,用于MIMO-OFDM通信系统。通过用户指定的参数,您可以根据不同空间位置和阵列大小的误码率和星座验证系统的性能。

该示例使用函数和系统对象™从通​​信工具箱和分阶段阵列系统工具箱,并需要

  • 通信工具箱的WINNER II信道模型

介绍

MIMO-OFDM系统是当前无线系统(例如5G NR,LTE,WLAN)的常态,由于它们对频率选择通道的鲁棒性和启用了高数据速率。随着所支持的数据率的需求不断增加,这些系统在配置的配置中获得更复杂,更大,越来越多的天金宝app线元素,以及分配的资源(子载波)。

对于天线阵列和空间复用,需要有效的技术来实现传输[6]。波束成形是一种这样的技术,它用于改善最终改善系统性能的信噪比(SNR),如误码率(BER)所测量的那样,在此测量1]。

这个例子演示了一个非对称MIMO-OFDM单用户系统,其中发送端和接收端天线单元的最大数目分别为1024和32,最多可包含16个独立数据流。它模拟了一个空间信道,其中阵列位置和天线模式被纳入到整个系统设计中。为简单起见,对单个点对点链路(一个基站与一个移动用户通信)进行建模。链路使用信道探测向发射机提供波束形成所需的信道信息。

该示例提供了几种空间定义的信道模型,特别是WINNER II信道模型和基于散射的模型,这两种模型都考虑了发射/接收空间位置和天线模式。

s = rng (61);%设置重复性的RNG状态

系统参数

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

与多个流%单用户系统prm.numusers = 1;%用户数量prm.numSTS = 16;%独立数据流个数,4/8/16/32/64人口、难民和移民事务局。numTx = 32;发射天线的数量%prm.numrx = 16;%接收天线数量人口、难民和移民事务局。bitsPerSubCarrier = 6;% 2: qpsk, 4: 16qam, 6: 64qam, 8: 256qamprm.numDataSymbols= 10;%数量的OFDM数据符号PRM.FC = 4E9;%4 GHz系统人口、难民和移民事务局。chanSRate = 100 e6;%通道采样率,100 Mspsprm.chantype =.“散射”%通道选项:'WINNER', 'Scattering',%’ScatteringFcn”、“StaticFlat”prm.NFig = 5;%噪声系数,dB%数组位置和角度人口、难民和移民事务局。posTx = (0, 0, 0);% BS/发射阵列位置,[x;y;z],米prm.mobileRange = 300;%米%角指定为[方位角;仰角],AZ = [ -  90 90],EL = [ -  90 90]prm.mobileangle = [33;0];%度人口、难民和移民事务局。steeringAngle = [30;-20);%透射转向角度(靠近Mobileangle)prm.enSteering = TRUE;%启用/禁用转向

下面指定了用于定义用于系统的OFDM调制的参数。

prm.fftlength = 256;prm.cyclicprefixlength = 64;prm.numcarriers = 234;prm.numguardbandcarriers = [7 6];prm.pilotcarrierindices = [26 54 90 118 140 168 204 232];Nondataidx = [(1:PRM.NumguardBandCarriers(1))';prm.fftlength / 2 + 1;...(prm.FFTLength-prm.NumGuardBandCarriers(2)1:prm.FFTLength)';...prm.PilotCarrierIndices。');人口、难民和移民事务局。CarriersLocations = setdiff ((1: prm.FFTLength),排序(nonDataIdx));numTx = prm.numTx;numRx = prm.numRx;numSTS = prm.numSTS;人口、难民和移民事务局。numFrmBits = numSTS * prm.numDataSymbols * prm.numCarriers *...prm.bitsPerSubCarrier * 1/3-6;终端比特%的账户人口、难民和移民事务局。modMode = 2 ^ prm.bitsPerSubCarrier;%调制顺序%通道滤波器延迟prm.numpadzeros = 3 *(prm.fftlength + prm.cyclicprefixlength);%获取发送和接收数组信息prm.numSTSVec = numSTS;[isTxURA,expFactorTx,isRxURA,expFactorRx] = helperArrayInfo(PRM,TRUE);

用于信道探测,数据发送和接收中的示例模型的处理示于下面的框图。

基于所建模的空间感知系统,根据基站和移动基站的位置计算自由空间路径损耗。

prm.clight = physconst('LightSpeed');Prm.lambda = prm.clight / prm.fc;%移动位置(xRx yRx zRx] = sph2cart(函数(prm.mobileAngle (1)),...deg2rad(prm.mobileAngle(2)),prm.mobileRange);prm.posRx = [XRX; YRX; ZRX];[toRxRange,toRxAng] = rangeangle(prm.posTx,prm.posRx);spLoss = fspl(toRxRange,prm.lambda);gainFactor = 1;

通道测深

对于空间多路复用的系统,发射机处的信道信息的可用性允许应用预编码以最大化感兴趣的方向和信道中的信号能量。在缓慢变化的信道的假设下,通过第一通道首先探测这一点,其中用于参考传输,接收器估计信道并将该信息馈送回发射机。

对于所选择的系统中,前同步码信号在所有发送天线元件发送的,并处理在接收机处占信道。接收器组件进行预放大,OFDM解调,频域信道估计,和计算使用每一数据子载波的奇异值分解(SVD)基于信道对角化的反馈权值。

%生成所述前导信号PreeAblesigsts = HelpergenProdeamble(PRM);%重复过numTxpreambleSig = 0(大小(preambleSigSTS, 1), numTx);i = 1:numSTS preambleSig(:,(i-1)*expFactorTx+(1:expFactorTx)) =...repmat (preambleSigSTS(:,我),1,expFactorTx);结束%在信道上发送序言[rxPreSig, chanDelay] = helperApplyChannel(人口、难民和移民事务局,preambleSig spLoss);%前端放大器增益和热噪声rxpreamp = phased.receiverProamp(...“获得”,gainFactor * spLoss,...%账户用于路径损耗'噪音文件',prm.nfig,...“ReferenceTemperature”, 290,...'采样率', prm.chanSRate);rxPreSigAmp = rxPreAmp(rxPreSig);rxPreSigAmp = rxPreSigAmp *...%规模实力(SQRT(prm.FFTLength森(prm.NumGuardBandCarriers)-1)/(prm.FFTLength));% OFDM解调demodulatorOFDM = comm.OFDMDemodulator (...'fftlength'人口、难民和移民事务局。FFTLength,...'numguardbandcarriers'prm.NumGuardBandCarriers。’,...'RemoveDCCarrier',真的,...'PilotOutputPort',真的,...'pilotcarrierindices'prm.PilotCarrierIndices。’,...“CyclicPrefixLength”人口、难民和移民事务局。CyclicPrefixLength,...“NumSymbols”numSTS,...单独%前导符号“NumReceiveAntennas”, numRx);rxOFDM = demodulatorOFDM (...rxPreSigAmp(chanDelay + 1:最终(prm.numPadZeros-chanDelay),:));信道估计从序言%numcarr,numsts,numrxHD = Helpermimochannelestimate(Rxofdm(:,1:numsts,:),prm);%计算反馈权重v = diagbfweights(HD);

在介绍简明,前端同步包括载波和定时恢复被假定。权重计算使用digbfweights.因而是反馈给发射机,以便随后应用的实际数据传输。

数据传输

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

%卷积编码器编码器= comm.ConvolutionalEncoder (...“TrellisStructure”,poly2trellis(7,[133 171 165]),...“TerminationMethod”“终止”);%生成从比特映射的符号txbits = randi([0,1],prm.numfrmbits,1);EncodedBits =编码器(TXBITS);%位为QAM符号映射mappedsym = qammod(encodedbits,prm.modmode,'输入类型''少量'...'onemaveragepower',真正的);%映射到层:每个符号,每个数据流的GridData =重塑(mappedSym,prm.numCarriers,prm.numDataSymbols,numSTS);%实施预编码权重的子载波,假设完美的反馈preData =复杂(0 (prm.numCarriers, prm.numDataSymbols numSTS));Symidx = 1:prm.numdatasymbolscarridx = 1:prm.numcarriers q =挤压(v(carridx,:,:));organq = q * sqrt(numtx)/ norm(q,“摇来摇去”);predata(carridx,symidx,:) =...挤压(gridData (carrIdx、symIdx:))。‘* normQ;结束结束% OFDM调制的数据modulatorofdm = comm.ofdmmodulator(...'fftlength'人口、难民和移民事务局。FFTLength,...'numguardbandcarriers'prm.NumGuardBandCarriers。’,...“InsertDCNull”,真的,...“PilotInputPort”,真的,...'pilotcarrierindices'prm.PilotCarrierIndices。’,...“CyclicPrefixLength”人口、难民和移民事务局。CyclicPrefixLength,...“NumSymbols”,prm.numDataSymbols,...'numtransmitantennas',numsts);% Multi-antenna飞行员飞行员= helperGenPilots(prm.numDataSymbols,numSTS);txOFDM = modulatorOFDM(preData,导频);txOFDM = txOFDM *(prm.FFTLength /...sqrt(prm.fftlength-sum(prm.numguardbandcarriers)-1));%规模实力%生成与反馈的权重,并在前面加上数据序言PreeAblesigd = HelpergenProdeamble(PRM,V);txsigsts = [前期行程指数; txofdm];%重复numTxtxSig = 0(大小(txSigSTS, 1), numTx);i = 1:numsts txsig(:,(i-1)* expactortx +(1:expactortx))=...Repmat(TXSIGSTS(:,i),1,expactortx);结束

用于预编码,前同步码信号被再生,以使信道估计。它被预设于数据部分,以形成传输包,然后将其在发射天线复制。

发射波束转向

相控阵系统工具箱提供了适合于设计和模拟无线通信系统中使用的相控阵的组件。

对于空间意识的系统,从基站传递的信号朝向移动的方向转向,以便将辐射能量聚焦在所需方向上。这是通过将相位移施加到每个天线元件来实现以转向传输来实现。

该示例在发射器上使用线性阵列或矩形阵列,这取决于选定的数据流数量和发射天线数量。

每天线元件增益%放大器= phased.Transmitter('峰值功率',1 / numTx,“获得”,0);%放大以达到每个元件的峰值发射功率n = 1:numTx txSig(:,n) =放大器(txSig(:,n));结束%发送天线阵列定义如果isTxURA均匀矩形阵列arrayTx = phased.URA([expFactorTx,numSTS],[0.5 0.5]*prm.lambda,...“元素”,分阶段。IsotropicAntennaElement ('底板',真的));别的均匀线性阵列arraytx = phased.ula(numtx,...'ElementsPacing'0.5 * prm.lambda...“元素”,分阶段。IsotropicAntennaElement ('底板',真的));结束评估转向权重的%steervectx = phased.steringvector(“SensorArray”,arrayTx,...'繁殖',prm.clight);%为被引导的方向生成权重wT = SteerVecTx (prm.fc prm.steeringAngle);%沿着转向方向辐射,没有信号组合radiatortx =相位.Radiator('传感器',arrayTx,...'progersinputport',真的,...'繁殖',prm.clight,...“OperatingFrequency”,prm.fc,...'combineradiatedsignals'、假);如果prm.enstering txsteersig = radiatortx(txsig,repmat(prm.mobileangle,1,numtx),...连词(wT));别的txSteerSig = txSig;结束%可视化数组h =图('位置',figposition([10 55 22 35]),'菜单栏'“没有”);h.Name =“发射阵列几何”;ViewArray(ArrayTX);想象发射模式和转向h =图('位置',figposition([32 55 22 30]),'菜单栏'“没有”);h.Name =“发射阵列响应模式”;模式(ArrayTX,PRM.FC,'繁殖',prm.clight,“重量”、wT);h =图('位置',图([54 55 22 35]),'菜单栏'“没有”);h.Name ='发送阵列方位角图案';patternAzimuth(arrayTx,prm.fc,'繁殖',prm.clight,“重量”、wT);如果isTxURA H =系数('位置',figposition([76 55 22 35]),'菜单栏'“没有”);h.Name =“发射阵列高程模式”;patternElevation(arrayTx,prm.fc,'繁殖',prm.clight,...“重量”、wT);结束

绘图指示阵列几何和多个视图中的发送阵列响应。响应显示由转向角指定的传输方向。

这个例子假设了已知的转向角和接近移动角。在实际系统中,这将作为信道测深或初始波束跟踪程序的一部分,从接收机的到达角估计进行估计。

信号传播

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

的WINNER II信道模型[5]是一个空间限定的MIMO信道,其允许用户指定所述阵列的几何形状和位置的信息。它被配置为使用典型的城市微室内场景非常低的移动速度。

两个基于散射的通道使用单反弹路径通过每个散射体,其中散射体的数量是用户指定的。对于本例,散射体的数量被设置为100。“散射”选项将散射体随机放置在发射器和接收器之间的一个圆圈内,而“散射fcn”则将其完全随机放置。

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

%将空间定义的通道应用于转向信号[rxsig,chandelay] = HelperapplyChannel(Txsteersig,PRM,Sploss,PREAMBLESIG);

探测和数据传输采用同一信道,数据传输持续时间较长,由数据符号数参数控制,prm.numDataSymbols

接收光束转向

接收器操纵事件信号与发送端转向对准,每个接收元件。热噪声和接收机增益被应用。匀速直线或具有各向同性响应矩形阵列被建模以匹配信道和发送器阵列。

rxpreamp = phased.receiverProamp(...“获得”,gainFactor * spLoss,...%表示路径损失'噪音文件',prm.nfig,...“ReferenceTemperature”, 290,...'采样率', prm.chanSRate);%前端放大器增益和热噪声rxsigamp = rxpreamp(rxsig);rxsigamp = rxsigamp *...%规模实力(返回值(人口、难民和移民事务局。FFTLength - sum (prm.NumGuardBandCarriers) 1) / (prm.FFTLength));%接收数组如果Isrxura.均匀矩形阵列arrayRx = phased.URA ([expFactorRx numSTS], 0.5 * prm.lambda,...“元素”,分阶段。IsotropicAntennaElement ('底板',真的));别的均匀线性阵列arrayRx =分阶段。齿龈(numRx...'ElementsPacing'0.5 * prm.lambda...“元素”, phased.IsotropicAntennaElement);结束%用于评估接收侧转向重量SteerVecRx =分阶段。SteeringVector (“SensorArray”,arrayRx,...'繁殖',prm.clight);%生成用于向移动转向方向的权重或者说是= SteerVecRx (prm.fc toRxAng);%沿着移动接收方向行驶如果prm.enstering rxsteersig = rxsigamp。*(wr');别的rxsteersig = rxsigamp;结束%可视化数组h =图('位置',图([10 20 22 35]),'菜单栏'“没有”);h.Name =“接收阵列几何”;ViewArray(arrayrx);%可视化接收模式和转向h =图('位置',figposition([32 20 22 30]));h.Name ='接收阵列响应模式';模式(arrayRx prm.fc,'繁殖',prm.clight,“重量”,或者说是);h =图('位置',figposition([54 20 22 35]),'菜单栏'“没有”);h.Name ='接收数组方位角模式';patternAzimuth (arrayRx prm.fc,'繁殖',prm.clight,“重量”,或者说是);如果isRxURA图('位置',figposition([76 20 22 35]),'菜单栏'“没有”);h.Name =“接收阵列仰角图”;图案形式(arrayrx,prm.fc,'繁殖',prm.clight,...“重量”,或者说是);结束

接收天线方向图反映了传输转向。

信号恢复

接收天线阵列将传播的信号传递给接收器以恢复嵌入信号中的原始信息。类似于发射器,MIMO-OFDM系统中使用的接收器包含许多组件,包括OFDM解调器,MIMO均衡器,QAM解调器和通道解码器。

demodulatorOFDM = comm.OFDMDemodulator (...'fftlength'人口、难民和移民事务局。FFTLength,...'numguardbandcarriers'prm.NumGuardBandCarriers。’,...'RemoveDCCarrier',真的,...'PilotOutputPort',真的,...'pilotcarrierindices'prm.PilotCarrierIndices。’,...“CyclicPrefixLength”人口、难民和移民事务局。CyclicPrefixLength,...“NumSymbols”,numsts + prm.numdatasymbols,...%序言和数据“NumReceiveAntennas”, numRx);% OFDM解调rxOFDM = demodulatorOFDM (...rxSteerSig (chanDelay + 1:结束- (prm.numPadZeros-chanDelay):));%从映射的序言进行信道估计HD = Helpermimochannelestimate(Rxofdm(:,1:numsts,:),prm);%MIMO均衡[rxEq, CSI] = helperMIMOEqualize (rxOFDM (numSTS + 1::,:),高清);%软解调scFact = ((prm.FFTLength-sum (prm.NumGuardBandCarriers) 1).../ prm.FFTLength ^ 2) / numTx;据nVar = noisepow (prm.chanSRate prm.NFig 290) / scFact;rxSymbs = rxEq:) /√(numTx);rxLLRBits = qamdemod (rxSymbs prm.modMode,'onemaveragepower',真的,...“OutputType”“approxllr”'noisevariance',nvar);%在解码之前应用CSIrxLLRtmp =重塑(rxLLRBits,prm.bitsPerSubCarrier,[]...prm.numDataSymbols numSTS);csitmp =重塑(CSI 1 [], 1, numSTS);rxScaledLLR = rxLLRtmp。* csitmp;软输入信道译码解码器= comm.ViterbiDecoder (...'InputFormat'“未量化”...“TrellisStructure”,poly2trellis(7,[133 171 165]),...“TerminationMethod”“终止”...'outputdatatype''双倍的');rxDecoded =解码器(rxScaledLLR (:));%解码接收位rxBits = rxDecoded (1: prm.numFrmBits);

对于模型的MIMO系统,所显示的均衡符号的接收星座提供了对接收的定性评估。实际误码率通过将实际发送位与接收的解码位进行比较,提供定量图。

显示接收星座constDiag = comm.ConstellationDiagram(...“SamplesPerSymbol”,1,...“ShowReferenceConstellation”,真的,...'ReferenceConstellation'...qammod((0:prm.modmode-1)',prm.modmode,'onemaveragepower',真正的),...“ColorFading”,错误的,...'位置',figposition([20 20 35 40]),...'标题'“平衡的符号”...'EnableMeasurements',真的,...“MeasurementInterval”,长度(rxSymbs));constDiag(rxSymbs);%计算并显示误码率Ber = Comm.Errorrate;措施= BER(TXBITS,RXBITS);fprintf('BER =%.5F;比特数=%d;错误=%d \ n'...措施(1),措施(3),措施(2));RNG;%恢复RNG状态
BER = 0.00000;比特数= 74874;错误数= 0

结论与进一步探索

该示例性高亮显示使用相控天线阵列用于波束形成的MIMO-OFDM系统的。它占在所述基站处的空间几何形状和阵列的位置和移动站为单个用户系统。使用信道探测,它示出预编码是如何在当前的无线系统中实现,并且天线阵列的转向如何建模。

在一组可配置参数中,您可以改变数据流的数量、发射/接收天线单元、站或阵列位置和几何形状、信道模型及其配置,以研究参数对系统的单独或联合影响。例如,只需改变发射天线的数量,就可以看到对操纵波束的主瓣和由此产生的系统性能的影响。

该实例还对前端同步、信道反馈、用户速度和路径损耗模型做了简化假设,这在实际系统中需要进一步考虑。单个系统也有它们自己的过程,这些过程必须被折叠到建模中[23.4]。

探索使用以下辅助功能:

选定的参考书目

  1. 荔枝,埃尔塔德和罗伯特斯蒂奇。下一代无线局域网:802.11n和802.11ac。剑桥大学出版社,2013年出版社。

  2. 信息技术IEEE标准。系统间电信和信息交换。局域网和城域网。特殊要求。第11部分:无线局域网介质访问控制(MAC)和物理层(PHY)规范。

  3. 3GPP TS 36.213。“物理层程序。”第三代合作伙伴项目;技术规范组无线接入网;发展了通用地面无线电接入(E-UTRA)。URL:https://www.3gpp.org.

  4. 3 gpp TS 36.101。用户设备(UE)无线电发射和接收。第三代合作伙伴项目;技术规范组无线接入网;发展了通用地面无线电接入(E-UTRA)。URL:https://www.3gpp.org.

  5. Kyosti, Pekka, Juha Meinila等。WINNER II渠道模型。D1.1.2 V1.2。ist4 -027756 WINNER II, 2007年9月。

  6. George Tsoulos,Ed。,“无线通信MIMO系统技术”,CRC Press,Boca Raton,FL,2006。