このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
フェーズド アレイによる MIMO-OFDM のプリコーディング
この例では、ビームフォーミングを使用する MIMO-OFDM 通信システムでフェーズド アレイがどのように使用されているかを示します。Communications Toolbox™ および Phased Array System Toolbox™ のコンポーネントを使用して、MIMO-OFDM 通信システム用に、送信機コンポーネントとフロントエンド受信機コンポーネントを構成する放射素子をモデル化します。ユーザー指定のパラメーターを使用して、異なる空間的な位置と配列サイズのビット エラー レートとコンスタレーションの観点から、システムのパフォーマンスを検証できます。
この例では、Communications Toolbox および Phased Array System Toolbox の関数と System objects™ を使用し、以下を必要とします。
WINNER II Channel Model for Communications Toolbox
はじめに
MIMO-OFDM システムは、周波数選択性チャネルのロバスト性と高いデータ転送速度に対応しているため、現在の無線システム (5G NR、LTE、WLAN など) の基準となっています。サポートされるデータ転送速度への絶え間なく増大する需要により、アンテナ素子の数や割り当てられるリソース (サブキャリア) も増え、これらのシステムの構成はより複雑で大規模になっています。
アンテナ アレイと空間多重化では、送信を実現するための効率的な手法が必要です [ 6 ]。ビームフォーミングはこのような手法の 1 つで、ここではビット エラー レート (BER) の観点で測定される、システム パフォーマンスを最終的に向上する S/N 比 (SNR) を改善するために使用されます [ 1 ]。
この例では、送信側および受信側のアンテナ素子の最大数をそれぞれ 1024 と 32 にできる (最大 16 の独立データ ストリーム) 非対称 MIMO-OFDM 単一ユーザー システムを示します。これはアレイの位置とアンテナ パターンがシステム全体の設計に組み込まれた空間チャネルをモデル化します。簡略化のため、単一のポイントツーポイント リンク (1 つの基地局が 1 人のモバイル ユーザーと通信する) がモデル化されています。リンクはチャネル サウンディングを使用して、送信機にビームフォーミングに必要なチャネル情報を提供します。
この例では、空間的に定義されたいくつかのチャネル モデルの選択肢を提供しています。具体的には、WINNER II チャネル モデルと散乱ベースのモデルです。どちらも送信/受信の空間的な位置とアンテナ パターンを考慮します。
s = rng(61); % Set RNG state for repeatability
システム パラメーター
システムのパラメーターを定義します。これらのパラメーターを変更することで、システムへの影響を調べることができます。
% Single-user system with multiple streams prm.numUsers = 1; % Number of users prm.numSTS = 16; % Number of independent data streams, 4/8/16/32/64 prm.numTx = 32; % Number of transmit antennas prm.numRx = 16; % Number of receive antennas prm.bitsPerSubCarrier = 6; % 2: QPSK, 4: 16QAM, 6: 64QAM, 8: 256QAM prm.numDataSymbols = 10; % Number of OFDM data symbols prm.fc = 4e9; % 4 GHz system prm.chanSRate = 100e6; % Channel sampling rate, 100 Msps prm.ChanType = 'Scattering'; % Channel options: 'WINNER', 'Scattering', % 'ScatteringFcn', 'StaticFlat' prm.NFig = 5; % Noise figure, dB % Array locations and angles prm.posTx = [0;0;0]; % BS/Transmit array position, [x;y;z], meters prm.mobileRange = 300; % meters % Angles specified as [azimuth;elevation], az=[-90 90], el=[-90 90] prm.mobileAngle = [33; 0]; % degrees prm.steeringAngle = [30; -20]; % Transmit steering angle (close to mobileAngle) prm.enSteering = true; % Enable/disable steering
システムに使用される 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.';]; prm.CarriersLocations = setdiff((1:prm.FFTLength)',sort(nonDataIdx)); numTx = prm.numTx; numRx = prm.numRx; numSTS = prm.numSTS; prm.numFrmBits = numSTS*prm.numDataSymbols*prm.numCarriers* ... prm.bitsPerSubCarrier*1/3-6; % Account for termination bits prm.modMode = 2^prm.bitsPerSubCarrier; % Modulation order % Account for channel filter delay prm.numPadZeros = 3*(prm.FFTLength+prm.CyclicPrefixLength); % Get transmit and receive array information prm.numSTSVec = numSTS; [isTxURA,expFactorTx,isRxURA,expFactorRx] = helperArrayInfo(prm,true);
例でモデル化されているチャネル サウンディング、およびデータの送信と受信の処理を、次のブロック線図で示します。
モデル化された空間を考慮したシステムの基地局と移動局の位置に基づいて自由空間パス損失が計算されます。
prm.cLight = physconst('LightSpeed'); prm.lambda = prm.cLight/prm.fc; % Mobile position [xRx,yRx,zRx] = sph2cart(deg2rad(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;
チャネル サウンディング
空間的に多重化されたシステムの場合、送信機でのチャネル情報を利用できることで、対象の方向とチャネルにおける信号エネルギーを最大化するためのプリコーディングの適用が可能になります。チャネルがゆっくりと変動するという前提では、これはチャネルを最初にサウンディングすることで円滑化されます。ここでは、基準送信のため、受信機がチャネルを推定し、この情報を送信機にフィードバックします。
選択したシステムの場合、プリアンブル信号がすべての送信アンテナ素子全体から送信され、チャネルを調整する受信機で処理されます。受信機コンポーネントは、データ サブキャリアごとの特異値分解 (SVD) を使用して、チャネル対角化に基づいて、事前増幅、OFDM 復調、周波数領域チャネル推定、およびフィードバックの重みの計算を実行します。
% Generate the preamble signal preambleSigSTS = helperGenPreamble(prm); % repeat over numTx preambleSig = zeros(size(preambleSigSTS,1),numTx); for i = 1:numSTS preambleSig(:,(i-1)*expFactorTx+(1:expFactorTx)) = ... repmat(preambleSigSTS(:,i),1,expFactorTx); end % Transmit preamble over channel [rxPreSig,chanDelay] = helperApplyChannel(preambleSig,prm,spLoss); % Front-end amplifier gain and thermal noise rxPreAmp = phased.ReceiverPreamp( ... 'Gain',gainFactor*spLoss, ... % account for path loss 'NoiseFigure',prm.NFig, ... 'ReferenceTemperature',290, ... 'SampleRate',prm.chanSRate); rxPreSigAmp = rxPreAmp(rxPreSig); rxPreSigAmp = rxPreSigAmp * ... % scale power (sqrt(prm.FFTLength-sum(prm.NumGuardBandCarriers)-1)/(prm.FFTLength)); % OFDM Demodulation demodulatorOFDM = comm.OFDMDemodulator( ... 'FFTLength',prm.FFTLength, ... 'NumGuardBandCarriers',prm.NumGuardBandCarriers.', ... 'RemoveDCCarrier',true, ... 'PilotOutputPort',true, ... 'PilotCarrierIndices',prm.PilotCarrierIndices.', ... 'CyclicPrefixLength',prm.CyclicPrefixLength, ... 'NumSymbols',numSTS, ... % preamble symbols alone 'NumReceiveAntennas',numRx); rxOFDM = demodulatorOFDM( ... rxPreSigAmp(chanDelay+1:end-(prm.numPadZeros-chanDelay),:)); % Channel estimation from preamble % numCarr, numSTS, numRx hD = helperMIMOChannelEstimate(rxOFDM(:,1:numSTS,:),prm); % Calculate the feedback weights v = diagbfweights(hD);
プレゼンテーションを簡潔にするため、搬送波再生とタイミング再生を含むフロントエンドの同期が仮定されています。そのため、diagbfweights
を使用して計算された重みは、この後の実際のデータ送信に適用するため、送信機にフィードバックされます。
データ送信
次に、システムのデータの送信機を構成します。この処理には、チャネル符号化、複素シンボルへのビット マッピング、個別のデータ ストリームの複数の送信ストリームへの分割、送信ストリームのプリコーディング、パイロット マッピングによる OFDM 変調、および使用されている送信アンテナの複製が含まれます。
% Convolutional encoder encoder = comm.ConvolutionalEncoder( ... 'TrellisStructure',poly2trellis(7,[133 171 165]), ... 'TerminationMethod','Terminated'); % Generate mapped symbols from bits txBits = randi([0, 1],prm.numFrmBits,1); encodedBits = encoder(txBits); % Bits to QAM symbol mapping mappedSym = qammod(encodedBits,prm.modMode,'InputType','Bit', ... 'UnitAveragePower',true); % Map to layers: per symbol, per data stream gridData = reshape(mappedSym,prm.numCarriers,prm.numDataSymbols,numSTS); % Apply precoding weights to the subcarriers, assuming perfect feedback preData = complex(zeros(prm.numCarriers,prm.numDataSymbols,numSTS)); for symIdx = 1:prm.numDataSymbols for carrIdx = 1:prm.numCarriers Q = squeeze(v(carrIdx,:,:)); normQ = Q * sqrt(numTx)/norm(Q,'fro'); preData(carrIdx,symIdx,:) = ... squeeze(gridData(carrIdx,symIdx,:)).' * normQ; end end % OFDM modulation of the data modulatorOFDM = comm.OFDMModulator( ... 'FFTLength',prm.FFTLength,... 'NumGuardBandCarriers',prm.NumGuardBandCarriers.',... 'InsertDCNull',true, ... 'PilotInputPort',true,... 'PilotCarrierIndices',prm.PilotCarrierIndices.',... 'CyclicPrefixLength',prm.CyclicPrefixLength,... 'NumSymbols',prm.numDataSymbols,... 'NumTransmitAntennas',numSTS); % Multi-antenna pilots pilots = helperGenPilots(prm.numDataSymbols,numSTS); txOFDM = modulatorOFDM(preData,pilots); txOFDM = txOFDM * (prm.FFTLength/ ... sqrt(prm.FFTLength-sum(prm.NumGuardBandCarriers)-1)); % scale power % Generate preamble with the feedback weights and prepend to data preambleSigD = helperGenPreamble(prm,v); txSigSTS = [preambleSigD;txOFDM]; % Repeat over numTx txSig = zeros(size(txSigSTS,1),numTx); for i = 1:numSTS txSig(:,(i-1)*expFactorTx+(1:expFactorTx)) = ... repmat(txSigSTS(:,i),1,expFactorTx); end
プリコーディングでは、プリアンブル信号が再生成され、チャネル推定を可能にします。これがデータ部分の最初に付加され、この後送信アンテナ経由で複製される送信パケットが構成されます。
ビーム ステアリングの送信
Phased Array System Toolbox は、無線通信システムで使用されるフェーズド アレイの設計とシミュレーションに適したコンポーネントを提供します。
空間を考慮したシステムでは、基地局から送信された信号は、放射されたエネルギーを希望の方向に集中させるため、移動局の方向にステアリングされます。これは位相シフトを各アンテナ素子に適用して送信をステアリングすることで実行できます。
例では、データ ストリーム数および選択した送信アンテナの数に応じて、送信側で直線アレイまたは方形アレイを使用します。
% Gain per antenna element amplifier = phased.Transmitter('PeakPower',1/numTx,'Gain',0); % Amplify to achieve peak transmit power for each element for n = 1:numTx txSig(:,n) = amplifier(txSig(:,n)); end % Transmit antenna array definition if isTxURA % Uniform Rectangular array arrayTx = phased.URA([expFactorTx,numSTS],[0.5 0.5]*prm.lambda, ... 'Element',phased.IsotropicAntennaElement('BackBaffled',true)); else % Uniform Linear array arrayTx = phased.ULA(numTx, ... 'ElementSpacing',0.5*prm.lambda, ... 'Element',phased.IsotropicAntennaElement('BackBaffled',true)); end % For evaluating weights for steering SteerVecTx = phased.SteeringVector('SensorArray',arrayTx, ... 'PropagationSpeed',prm.cLight); % Generate weights for steered direction wT = SteerVecTx(prm.fc,prm.steeringAngle); % Radiate along the steered direction, without signal combining radiatorTx = phased.Radiator('Sensor',arrayTx, ... 'WeightsInputPort',true, ... 'PropagationSpeed',prm.cLight, ... 'OperatingFrequency',prm.fc, ... 'CombineRadiatedSignals',false); if prm.enSteering txSteerSig = radiatorTx(txSig,repmat(prm.mobileAngle,1,numTx), ... conj(wT)); else txSteerSig = txSig; end % Visualize the array h = figure('Position',figposition([10 55 22 35]),'MenuBar','none'); h.Name = 'Transmit Array Geometry'; viewArray(arrayTx); % Visualize the transmit pattern and steering h = figure('Position',figposition([32 55 22 30]),'MenuBar','none'); h.Name = 'Transmit Array Response Pattern'; pattern(arrayTx,prm.fc,'PropagationSpeed',prm.cLight,'Weights',wT); h = figure('Position',figposition([54 55 22 35]),'MenuBar','none'); h.Name = 'Transmit Array Azimuth Pattern'; patternAzimuth(arrayTx,prm.fc,'PropagationSpeed',prm.cLight,'Weights',wT); if isTxURA h = figure('Position',figposition([76 55 22 35]),'MenuBar','none'); h.Name = 'Transmit Array Elevation Pattern'; patternElevation(arrayTx,prm.fc,'PropagationSpeed',prm.cLight, ... 'Weights',wT); end
複数のビューでのアレイのジオメトリと送信アレイの応答を、プロットで示します。応答は、ステアリング角度で指定された送信方向を示します。
例では、ステアリング角度は既知でありモバイル角度に近いと仮定しています。実際のシステムでは、これは、チャネル サウンディングまたは初期のビーム追跡手順の一部である受信側の到達角度の推定により推定されます。
信号伝播
この例では、空間 MIMO チャネルの 3 つのオプションと、評価目的用のより簡潔な静的フラット MIMO チャネルを提供します。
WINNER II チャネル モデル [ 5 ] は、アレイのジオメトリと位置の情報を指定することができる空間的に定義された MIMO チャネルです。移動体速度が非常に遅い典型的な都市マクロセル屋内シナリオを使用するように構成されています。
2 つの分布ベースのチャネルでは、各分布点を通る単一バウンス パスを使用します。分布点の数はユーザーが指定します。この例では、分布点の数は 100 に設定されています。'Scattering' オプションは送信機と受信機の間の円内にランダムに配置された分布点をモデル化し、'ScatteringFcn' はその配置を完全にランダムにモデル化します。
モデルでは、パス損失のモデル化、および見通し内 (LOS) と非 LOS の両方の伝播条件が許可されます。この例では、非 LOS 伝播と線形ジオメトリを持つ等方性アンテナ素子パターンを想定しています。
% Apply a spatially defined channel to the steered signal
[rxSig,chanDelay] = helperApplyChannel(txSteerSig,prm,spLoss,preambleSig);
サウンディングとデータ送信の両方に同じチャネルが使用されています。データ送信は、データ シンボル パラメーター prm.numDataSymbols
の数で制御される期間がより長くなっています。
ビーム ステアリングの受信
受信機は、送信終了時のステアリングに合わせて、受信要素ごとに入射信号をステアリングします。熱ノイズと受信機のゲインが適用されます。等方性応答をもつ等間隔直線アレイと矩形アレイが、チャネルと送信機の配列に一致するようにモデル化されます。
rxPreAmp = phased.ReceiverPreamp( ... 'Gain',gainFactor*spLoss, ... % accounts for path loss 'NoiseFigure',prm.NFig, ... 'ReferenceTemperature',290, ... 'SampleRate',prm.chanSRate); % Front-end amplifier gain and thermal noise rxSigAmp = rxPreAmp(rxSig); rxSigAmp = rxSigAmp * ... % scale power (sqrt(prm.FFTLength - sum(prm.NumGuardBandCarriers)-1)/(prm.FFTLength)); % Receive array if isRxURA % Uniform Rectangular array arrayRx = phased.URA([expFactorRx,numSTS],0.5*prm.lambda, ... 'Element',phased.IsotropicAntennaElement('BackBaffled',true)); else % Uniform Linear array arrayRx = phased.ULA(numRx, ... 'ElementSpacing',0.5*prm.lambda, ... 'Element',phased.IsotropicAntennaElement); end % For evaluating receive-side steering weights SteerVecRx = phased.SteeringVector('SensorArray',arrayRx, ... 'PropagationSpeed',prm.cLight); % Generate weights for steered direction towards mobile wR = SteerVecRx(prm.fc,toRxAng); % Steer along the mobile receive direction if prm.enSteering rxSteerSig = rxSigAmp.*(wR'); else rxSteerSig = rxSigAmp; end % Visualize the array h = figure('Position',figposition([10 20 22 35]),'MenuBar','none'); h.Name = 'Receive Array Geometry'; viewArray(arrayRx); % Visualize the receive pattern and steering h = figure('Position',figposition([32 20 22 30])); h.Name = 'Receive Array Response Pattern'; pattern(arrayRx,prm.fc,'PropagationSpeed',prm.cLight,'Weights',wR); h = figure('Position',figposition([54 20 22 35]),'MenuBar','none'); h.Name = 'Receive Array Azimuth Pattern'; patternAzimuth(arrayRx,prm.fc,'PropagationSpeed',prm.cLight,'Weights',wR); if isRxURA figure('Position',figposition([76 20 22 35]),'MenuBar','none'); h.Name = 'Receive Array Elevation Pattern'; patternElevation(arrayRx,prm.fc,'PropagationSpeed',prm.cLight, ... 'Weights',wR); end
受信アンテナ パターンは送信ステアリングをミラーリングします。
信号再生
受信アンテナ アレイは、伝播された信号を受信機に渡し、信号に組み込まれた元の情報を復元します。送信機と同様に、MIMO-OFDM システムで使用される受信機には、OFDM 復調器、MIMO イコライザー、QAM 復調器、チャネル復号化器など、多くのコンポーネントが含まれます。
demodulatorOFDM = comm.OFDMDemodulator( ... 'FFTLength',prm.FFTLength, ... 'NumGuardBandCarriers',prm.NumGuardBandCarriers.', ... 'RemoveDCCarrier',true, ... 'PilotOutputPort',true, ... 'PilotCarrierIndices',prm.PilotCarrierIndices.', ... 'CyclicPrefixLength',prm.CyclicPrefixLength, ... 'NumSymbols',numSTS+prm.numDataSymbols, ... % preamble & data 'NumReceiveAntennas',numRx); % OFDM Demodulation rxOFDM = demodulatorOFDM( ... rxSteerSig(chanDelay+1:end-(prm.numPadZeros-chanDelay),:)); % Channel estimation from the mapped preamble hD = helperMIMOChannelEstimate(rxOFDM(:,1:numSTS,:),prm); % MIMO Equalization [rxEq,CSI] = ofdmEqualize(rxOFDM(:,numSTS+1:end,:),hD); % Soft demodulation 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',true, ... 'OutputType','approxllr','NoiseVariance',nVar); % Apply CSI prior to decoding rxLLRtmp = reshape(rxLLRBits,prm.bitsPerSubCarrier,[], ... prm.numDataSymbols,numSTS); csitmp = reshape(CSI,1,[],1,numSTS); rxScaledLLR = rxLLRtmp.*csitmp; % Soft-input channel decoding decoder = comm.ViterbiDecoder(... 'InputFormat','Unquantized', ... 'TrellisStructure',poly2trellis(7, [133 171 165]), ... 'TerminationMethod','Terminated', ... 'OutputDataType','double'); rxDecoded = decoder(rxScaledLLR(:)); % Decoded received bits rxBits = rxDecoded(1:prm.numFrmBits);
モデル化された MIMO システムでは、イコライズされたシンボルの受信コンスタレーションを表示することで、受信の定性評価を提供します。実際のビット エラー レートは、実際の送信されたビットと受信および復号化されたビットを比較することで、定量的数値を提供します。
% Display received constellation constDiag = comm.ConstellationDiagram( ... 'SamplesPerSymbol',1, ... 'ShowReferenceConstellation',true, ... 'ReferenceConstellation', ... qammod((0:prm.modMode-1)',prm.modMode,'UnitAveragePower',true), ... 'ColorFading',false, ... 'Position',figposition([20 20 35 40]), ... 'Title','Equalized Symbols', ... 'EnableMeasurements',true, ... 'MeasurementInterval',length(rxSymbs)); constDiag(rxSymbs); % Compute and display bit error rate ber = comm.ErrorRate; measures = ber(txBits,rxBits); fprintf('BER = %.5f; No. of Bits = %d; No. of errors = %d\n', ... measures(1),measures(3),measures(2)); rng(s); % Restore RNG state
BER = 0.00000; No. of Bits = 74874; No. of errors = 0
まとめとその他の調査
この例では、ビームフォーミングされた MIMO-OFDM システムのフェーズド アンテナ アレイの使用について示しています。これは単一ユーザー システムの基地局と移動局でのアレイの空間ジオメトリと位置を考慮しています。チャネル サウンディングを使用して、現在の無線システムでプリコーディングがどのように適用されるか、およびアンテナ アレイのステアリングがどのようにモデル化されるかを示しています。
構成可能なパラメーター セットの中で、データ ストリームの数、送信側/受信側のアンテナ素子、局やアレイの位置とジオメトリ、チャネル モデルとその構成を変えて、パラメーター個々のまたはパラメーターを組み合わせた場合のシステムへの影響を確認できます。例として、送信アンテナ数だけを変えて、ステアリングされたビームのメイン ローブと最終的なシステム パフォーマンスを確認します。
例では、実際のシステムではさらに考慮する必要がある、フロントエンドの同期、チャネル フィードバック、ユーザー速度、およびパス損失モデルの仮定も簡略化しています。個別のシステムにもモデリングに組み入れなければならない独自の手順があります [ 2、3、4 ]。
使用されている次の補助関数について調査します。
参考文献
Perahia, Eldad, and Robert Stacey.Next Generation Wireless LANS: 802.11n and 802.11ac. Cambridge University Press, 2013.
IEEE® Std 802.11™-2012 IEEE Standard for Information technology - Telecommunications and information exchange between systems - Local and metropolitan area networks - Specific requirements - Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications.
3GPP TS 36.213."Physical layer procedures."3rd Generation Partnership Project; Technical Specification Group Radio Access Network; Evolved Universal Terrestrial Radio Access (E-UTRA).URL: https://www.3gpp.org.
3GPP TS 36.101."User Equipment (UE) Radio Transmission and Reception."3rd Generation Partnership Project; Technical Specification Group Radio Access Network; Evolved Universal Terrestrial Radio Access (E-UTRA).URL: https://www.3gpp.org.
Kyosti, Pekka, Juha Meinila, et al. WINNER II Channel Models.D1.1.2, V1.2.IST-4-027756 WINNER II, September 2007.
George Tsoulos, Ed., "MIMO System Technology for Wireless Communications", CRC Press, Boca Raton, FL, 2006.