主要内容

相控阵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;%用户数量人口、难民和移民事务局。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数据符号人口、难民和移民事务局。fc = 4 e9;%4 GHz系统人口、难民和移民事务局。chanSRate = 100 e6;%通道采样率,100 Mspsprm.chantype =“散射”%通道选项:'WINNER', 'Scattering',%’ScatteringFcn”、“StaticFlat”人口、难民和移民事务局。NFig = 5;%噪声系数,dB%数组位置和角度人口、难民和移民事务局。posTx = (0, 0, 0);% BS/发射阵列位置,[x;y;z],米人口、难民和移民事务局。mobileRange = 300;%米%指定角度为[方位角;仰角],az=[-90 90], el=[-90 90]prm.mobileangle = [33;0];%度人口、难民和移民事务局。steeringAngle = [30;-20);%发射转向角(接近移动角)人口、难民和移民事务局。enSteering = true;%启用/禁用操舵

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

人口、难民和移民事务局。FFTLength = 256;人口、难民和移民事务局。CyclicPrefixLength = 64;人口、难民和移民事务局。numCarriers = 234;人口、难民和移民事务局。numguarddbandcarriers = [7 6];人口、难民和移民事务局。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;%调制顺序%通道滤波器延迟人口、难民和移民事务局。numPadZeros = 3 * (prm.FFTLength + prm.CyclicPrefixLength);%获取发送和接收数组信息人口、难民和移民事务局。numSTSVec = numSTS;[isTxURA, expFactorTx isRxURA expFactorRx] = helperArrayInfo(人口、难民和移民事务局,真实);

本例中建模的信道探测、数据传输和接收的处理过程如下图所示。

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

人口、难民和移民事务局。cLight = physconst (“光速”);人口、难民和移民事务局。λ= prm.cLight / prm.fc;%移动位置(xRx yRx zRx] = sph2cart(函数(prm.mobileAngle (1)),...函数prm.mobileAngle (2)), prm.mobileRange);人口、难民和移民事务局。posRx = (xRx; yRx; zRx);[toRxRange, toRxAng] = rangeangle (prm.posTx prm.posRx);spLoss = fspl (toRxRange prm.lambda);gainFactor = 1;

通道测深

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

对于所选的系统,前导信号通过所有发射天线单元发送,并在接收端处理信道。接收机组件执行预放大、OFDM解调、频域信道估计,并使用每个数据子载波的奇异值分解(SVD)计算基于信道对角化的反馈权值。

%生成前置信号preambleSigSTS = helperGenPreamble(人口、难民和移民事务局);在numTx上重复%preambleSig = 0(大小(preambleSigSTS, 1), numTx);i = 1:numSTS preambleSig(:,(i-1)*expFactorTx+(1:expFactorTx)) =...repmat (preambleSigSTS(:,我),1,expFactorTx);结束%在信道上发送序言[rxPreSig, chanDelay] = helperApplyChannel(人口、难民和移民事务局,preambleSig spLoss);%前端放大器增益和热噪声rxPreAmp =分阶段。ReceiverPreamp (...“获得”, gainFactor * spLoss,...%账户用于路径损耗“NoiseFigure”人口、难民和移民事务局。NFig,...“ReferenceTemperature”, 290,...“SampleRate”, prm.chanSRate);rxPreSigAmp = rxPreAmp (rxPreSig);rxPreSigAmp = rxPreSigAmp *...%规模实力(√prm.FFTLength-sum 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,numrx高清= helperMIMOChannelEstimate (rxOFDM (: 1: numSTS,:),人口、难民和移民事务局);%计算反馈权重v = diagbfweights(HD);

为了简洁,我们假设了包括载波和定时恢复在内的前端同步。使用diagbfweights然后反馈给发射机,用于后续实际数据的传输。

数据传输

接下来,我们配置系统的数据发送器。这种处理包括信道编码、到复杂符号的位映射、将单个数据流分割为多个发送流、发送流的预编码、使用导频映射的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,'输入类型'“一点”...“UnitAveragePower”,真正的);%映射到层:每个符号,每个数据流gridData =重塑(mappedSym prm.numCarriers、prm.numDataSymbols numSTS);%对子载波应用预编码权,假设是完美反馈preData =复杂(0 (prm.numCarriers, prm.numDataSymbols numSTS));symidx = 1:prm.numdatasymbolscarrIdx = 1:人口、难民和移民事务局。numCarriers Q = squeeze(v(carrIdx,:,:));normQ = 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);结束

对于预编码,前导信号被重新生成以进行信道估计。它被附加到数据部分以形成传输包,然后在传输天线上复制。

传输光束控制

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

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

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

每天线元件增益%放大器=分阶段。发射机('峰值功率'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,...“PropagationSpeed”, prm.cLight);%为被引导的方向生成权重wT = SteerVecTx (prm.fc prm.steeringAngle);%沿操控方向辐射,不合并信号radiatortx =阶段。'传感器'arrayTx,...“WeightsInputPort”,真的,...“PropagationSpeed”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,“PropagationSpeed”prm.cLight,“重量”、wT);h =图(“位置”,figposition([54 55 22 35]),菜单条的“没有”);h.Name ='发送阵列方位角图案';patternAzimuth (arrayTx prm.fc,“PropagationSpeed”prm.cLight,“重量”、wT);如果isTxURA h = figure(“位置”,figposition([76 55 22 35]),菜单条的“没有”);h.Name =“发射阵列仰角图”;patternElevation (arrayTx prm.fc,“PropagationSpeed”prm.cLight,...“重量”、wT);结束

图中显示了多个视图中的阵列几何形状和发射阵列响应。响应显示了由转向角度指定的传输方向。

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

信号传播

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

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

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

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

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

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

接收光束转向

接收器控制事件信号,使其与发射端控制对齐,每个接收元件。应用了热噪声和接收机增益。采用各向同性响应的均匀线性或矩形阵列来匹配信道和发射机阵列。

rxPreAmp =分阶段。ReceiverPreamp (...“获得”, gainFactor * spLoss,...%表示路径损失“NoiseFigure”人口、难民和移民事务局。NFig,...“ReferenceTemperature”, 290,...“SampleRate”, 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,...“PropagationSpeed”, prm.cLight);%生成朝向移动方向的权重或者说是= SteerVecRx (prm.fc toRxAng);%沿着移动接收方向行驶如果人口、难民和移民事务局。enSteering rxSteerSig = rxSigAmp.*(wR');别的rxsteersig = rxsiagamp;结束%可视化数组h =图(“位置”,figposition([10 20 22 35]),菜单条的“没有”);h.Name =“接收阵列几何”;ViewArray(arrayrx);%可视化接收模式和转向h =图(“位置”,figposition([32 20 22 30]);h.Name ='接收阵列响应模式';模式(arrayRx prm.fc,“PropagationSpeed”prm.cLight,“重量”,或者说是);h =图(“位置”,figposition([54 20 22 35]),菜单条的“没有”);h.Name ='接收数组方位角模式';patternAzimuth (arrayRx prm.fc,“PropagationSpeed”prm.cLight,“重量”,或者说是);如果isRxURA图(“位置”,figposition([76 20 22 35]),菜单条的“没有”);h.Name =“接收阵列仰角图”;patternElevation (arrayRx prm.fc,“PropagationSpeed”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):));%从映射的序言进行信道估计高清= helperMIMOChannelEstimate (rxOFDM (: 1: numSTS,:),人口、难民和移民事务局);%分配均衡[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,“UnitAveragePower”,真的,...“OutputType”“approxllr”“NoiseVariance”,nvar);%在解码之前应用CSIrxLLRtmp =重塑(rxLLRBits prm.bitsPerSubCarrier, [],...prm.numDataSymbols numSTS);csitmp =重塑(CSI 1 [], 1, numSTS);rxScaledLLR = rxLLRtmp。* csitmp;软输入信道译码解码器= comm.ViterbiDecoder (...“InputFormat”“Unquantized”...“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,“UnitAveragePower”,真正的),...“ColorFading”,错误的,...“位置”,figposition([20 20 35 40]),...“标题”“平衡的符号”...“EnableMeasurements”,真的,...“MeasurementInterval”长度(rxSymbs));constDiag (rxSymbs);%计算并显示误码率数量= comm.ErrorRate;措施=误码率(txBits rxBits);流('BER =%.5F;比特数=%d;错误=%d \ n'...措施(1),措施(3),措施(2));RNG;%恢复RNG状态
数量= 0.00000;不。of Bits = 74874;不。误差= 0

结论与进一步探索

这个例子强调了相控天线阵列在波束形成MIMO-OFDM系统中的使用。它解释了单个用户系统的基站和移动基站阵列的空间几何形状和位置。以信道测深为例,说明了在目前的无线系统中如何实现预编码,以及如何建立天线阵的转向模型。

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

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

探索使用以下辅助功能:

选定的参考书目

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

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

  3. 3 gpp 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。