主要内容

相控阵MIMO-OFDM预编码

这个例子展示了相控阵如何在采用波束形成的MIMO-OFDM通信系统中使用。它使用来自通信工具箱™和相控阵系统工具箱™的组件,为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状态

系统参数

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

具有多个流的单用户系统人口、难民和移民事务局。numUsers = 1;%用户数量人口、难民和移民事务局。numSTS = 16;%独立数据流个数,4/8/16/32/64人口、难民和移民事务局。numTx = 32;%发射天线个数人口、难民和移民事务局。numRx = 16;%接收天线个数人口、难民和移民事务局。bitsPerSubCarrier = 6;% 2: qpsk, 4:16 qam, 6:64 qam, 8:256qamprm.numDataSymbols= 10;% OFDM数据符号数人口、难民和移民事务局。Fc = 4e9;% 4 GHz系统人口、难民和移民事务局。chanSRate = 100e6;通道采样率,100 Msps人口、难民和移民事务局。ChanType =“散射”频道选项:'WINNER', 'Scattering','ScatteringFcn', 'StaticFlat'人口、难民和移民事务局。NFig = 5;%噪声值,dB%阵列位置和角度人口、难民和移民事务局。posTx = [0;0;0];% BS/发射阵列位置,[x;y;z],米人口、难民和移民事务局。mobileRange = 300;%米%角指定为[方位角;仰角],az=[-90 90], el=[-90 90]人口、难民和移民事务局。mobileAngle = [33;0);%度人口、难民和移民事务局。转向角度= [30;-20);%传送转向角(接近mobileAngle)人口、难民和移民事务局。enSteering = true;%启用/禁用转向

定义用于系统的OFDM调制的参数如下所示。

人口、难民和移民事务局。FFTLength = 256;人口、难民和移民事务局。CyclicPrefixLength = 64;人口、难民和移民事务局。numCarriers = 234;人口、难民和移民事务局。NumGuardBandCarriers = [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)',sort(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(prm,true);

下面的框图显示了本例中模拟的通道探测、数据传输和接收的处理过程。

基于所建立的空间感知系统的基站位置和移动站位置,计算了自由空间路径损失。

人口、难民和移民事务局。cLight = physconst(“光速”);人口、难民和移民事务局。lambda = prm.cLight/prm.fc;移动位置[xRx,yRx,zRx] = sph2cart(deg2rad(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(prm);% repeat over numTxpreambleSig = 0 (size(preambleSigSTS,1),numTx);i = 1:numSTS preambleSig(:,(i-1)*expFactorTx+(1:expFactorTx)) =...repmat (preambleSigSTS(:,我),1,expFactorTx);结束通过信道传输前导[rxPreSig,chanDelay] = helperApplyChannel(preambleSig,prm,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解调解调器(...“FFTLength”人口、难民和移民事务局。FFTLength,...“NumGuardBandCarriers”prm.NumGuardBandCarriers。’,...“RemoveDCCarrier”,真的,...“PilotOutputPort”,真的,...“PilotCarrierIndices”prm.PilotCarrierIndices。’,...“CyclicPrefixLength”人口、难民和移民事务局。CyclicPrefixLength,...“NumSymbols”numSTS,...%仅仅是序言符号“NumReceiveAntennas”, numRx);rxOFDM =解调器ofdm (...rxPreSigAmp (chanDelay + 1:结束- (prm.numPadZeros-chanDelay):));%来自序言的信道估计% numCarr, numSTS, numRxhD = helperMIMOChannelEstimate(rxOFDM(:,1:numSTS,:),prm);计算反馈权重v = diagbfweights(hD);

为了表示简洁,假设前端同步包括载波和定时恢复。使用以下方法计算的权重diagbfweights因此被反馈给发射机,供后续应用进行实际数据传输。

数据传输

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

%卷积编码器encoder = com . convolutionalencoder (...“TrellisStructure”,poly2trellis(7,[133 171 165]),...“TerminationMethod”“终止”);从位生成映射符号txBits = randi([0,1],prm.numFrmBits,1);encodedBits =编码器(txBits);位到QAM符号的映射mappedSym = qammod(encodedBits,prm.modMode,“InputType”“一点”...“UnitAveragePower”,真正的);映射到层:每个符号,每个数据流gridData =重塑(mappedSym,prm.numCarriers,prm.numDataSymbols,numSTS);对子载波应用预编码权重,假设完全反馈preData =复杂(零(prm.numCarriers,prm.numDataSymbols,numSTS));symIdx = 1:prm.numDataSymbolscarrIdx = 1:prm。numCarriers Q = squeeze(v(carrIdx,:,:));normQ = Q *√(numTx)/norm(Q,“摇来摇去”);preData carrIdx、symIdx: =...挤压(gridData (carrIdx、symIdx:))。' * normQ;结束结束% OFDM调制的数据调制器ofdm = com . ofdm...“FFTLength”人口、难民和移民事务局。FFTLength,...“NumGuardBandCarriers”prm.NumGuardBandCarriers。’,...“InsertDCNull”,真的,...“PilotInputPort”,真的,...“PilotCarrierIndices”prm.PilotCarrierIndices。’,...“CyclicPrefixLength”人口、难民和移民事务局。CyclicPrefixLength,...“NumSymbols”prm.numDataSymbols,...“NumTransmitAntennas”, numSTS);%多天线飞行员飞行员= helperGenPilots(prm.numDataSymbols,numSTS);txOFDM = modulatorOFDM(preData,导频);txOFDM = txOFDM * (prm。FFTLength /...√prm.FFTLength-sum prm.NumGuardBandCarriers) 1));比例功率生成带有反馈权重和数据前缀的序文preambleSigD = helperGenPreamble(prm,v);txSigSTS = [preambleSigD;txOFDM];%重复numTxtxSig = 0 (size(txSigSTS,1),numTx);i = 1:numSTS txSig(:,(i-1)*expFactorTx+(1:expFactorTx)) =...repmat (txSigSTS(:,我),1,expFactorTx);结束

对于预编码,重新生成前导信号以实现信道估计。它被前置于数据部分以形成传输分组,该传输分组然后在传输天线上复制。

发射波束转向

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

对于空间感知系统,将从基站传输的信号转向移动设备的方向,从而将辐射能量聚焦在所需的方向上。这是通过对每个天线元件应用相移来控制传输来实现的。

本例在发射机处使用线性或矩形阵列,具体取决于所选数据流的数量和发射天线的数量。

每个天线元件的增益%放大器=相控。发射机(“PeakPower”1 / numTx,“获得”, 0);%放大以达到每个元件的峰值发射功率n = 1:numTx txSig(:,n) =放大器(txSig(:,n));结束发射天线阵列定义如果isTxURA均匀矩形阵列arrayTx = phase . ura ([expFactorTx,numSTS],[0.5 0.5]*prm.lambda,...“元素”,分阶段。IsotropicAntennaElement (“BackBaffled”,真的));其他的均匀线阵arrayTx = phase。齿龈(numTx...“ElementSpacing”0.5 * prm.lambda...“元素”,分阶段。IsotropicAntennaElement (“BackBaffled”,真的));结束%用于评估转向的重量SteerVecTx =相控。SteeringVector (“SensorArray”arrayTx,...“PropagationSpeed”, prm.cLight);为转向方向生成权重wT = SteerVecTx(prm.fc,prm.steeringAngle);%沿操纵方向辐射,无信号组合radiatorTx =相控。散热器(“传感器”arrayTx,...“WeightsInputPort”,真的,...“PropagationSpeed”prm.cLight,...“OperatingFrequency”prm.fc,...“CombineRadiatedSignals”、假);如果人口、难民和移民事务局。enSteering 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传播条件。该示例假设非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 = phase . ura ([expFactorRx,numSTS],0.5*prm.lambda,...“元素”,分阶段。IsotropicAntennaElement (“BackBaffled”,真的));其他的均匀线阵arrayRx = phase。齿龈(numRx...“ElementSpacing”0.5 * prm.lambda...“元素”, phased.IsotropicAntennaElement);结束%用于评估接收侧转向砝码SteerVecRx =相控。SteeringVector (“SensorArray”arrayRx,...“PropagationSpeed”, prm.cLight);%为移动方向生成权重wR = SteerVecRx(prm.fc,toRxAng);沿移动接收方向驾驶如果人口、难民和移民事务局。enSteering rxSteerSig = rxSigAmp.*(wR');其他的rxSteerSig = rxSigAmp;结束%可视化数组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解调器和信道解码器。

解调器(...“FFTLength”人口、难民和移民事务局。FFTLength,...“NumGuardBandCarriers”prm.NumGuardBandCarriers。’,...“RemoveDCCarrier”,真的,...“PilotOutputPort”,真的,...“PilotCarrierIndices”prm.PilotCarrierIndices。’,...“CyclicPrefixLength”人口、难民和移民事务局。CyclicPrefixLength,...“NumSymbols”, numSTS + prm.numDataSymbols,...%序文和数据“NumReceiveAntennas”, numRx);OFDM解调rxOFDM =解调器ofdm (...rxSteerSig (chanDelay + 1:结束- (prm.numPadZeros-chanDelay):));来自映射序文的信道估计hD = helperMIMOChannelEstimate(rxOFDM(:,1:numSTS,:),prm);% MIMO均衡[rxEq,CSI] = helperMIMOEqualize(rxOFDM(:,numSTS+1:end,:),hD);%软解调scFact = ((prm.FFTLength-sum(prm.NumGuardBandCarriers)-1).../ prm.FFTLength ^ 2) / numTx;nVar = noisepow(prm.chanSRate,prm.NFig,290)/scFact;rxSymbs = rxEq(:)/sqrt(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;%软输入通道解码解码器= com . viterbidecoder (...“InputFormat”“Unquantized”...“TrellisStructure”,poly2trellis(7, [133 171 165]),...“TerminationMethod”“终止”...“OutputDataType”“双”);rxDecoded =解码器(rxScaledLLR(:));%已解码的接收位rxBits = rxDecoded(1:prm.numFrmBits);

对于模拟的MIMO系统,显示的均衡符号的接收星座提供了接收的定性评估。实际误码率通过比较实际发送的比特和接收的解码比特来提供定量的数字。

显示接收星座constDiag = com . constellationdiagram (...“SamplesPerSymbol”, 1...“ShowReferenceConstellation”,真的,...“ReferenceConstellation”...qammod ((0: prm.modMode-1)、prm.modMode“UnitAveragePower”,真正的),...“ColorFading”假的,...“位置”,figposition([20 20 35 40]),...“标题”“平衡的符号”...“EnableMeasurements”,真的,...“MeasurementInterval”长度(rxSymbs));constDiag (rxSymbs);计算和显示误码率ber = com . errorrate;测量= ber(txBits,rxBits);流('BER = %.5f;不。of Bits = %d;不。误差= %d\n'...(1),(3)措施的人,措施(2));rng(年代);恢复RNG状态
Ber = 0.00000;不。of Bits = 74874;不。误差= 0

结论及进一步探索

该示例强调了在波束形成的MIMO-OFDM系统中使用相控天线阵列。它考虑了单个用户系统的基站和移动站阵列的空间几何和位置。以信道探测为例,阐述了在现有无线系统中如何实现预编码,以及如何建立天线阵列的转向模型。

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

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

探索以下使用的helper函数:

选定的参考书目

  1. Perahia, Eldad和Robert Stacey。下一代无线局域网:802.11n和802.11ac。剑桥大学出版社,2013年。

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

  3. 3gpp ts 36.213。“物理层程序。”第三代伙伴计划;技术规范集团无线接入网;改进的通用地面无线电接入(E-UTRA)。URL:https://www.3gpp.org

  4. 3gpp ts 36.101。用户设备(UE)无线电发射和接收。第三代伙伴计划;技术规范集团无线接入网;改进的通用地面无线电接入(E-UTRA)。URL:https://www.3gpp.org

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

  6. George Tsoulos主编,“无线通信的MIMO系统技术”,CRC出版社,博卡拉顿,佛罗里达州,2006年。