最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Massive MIMO ハイブリッド ビームフォーミング

この例では、マルチユーザー システムおよびシングルユーザー システムの両方の手法を使用して、ハイブリッド ビームフォーミングが Massive MIMO 通信システムの送信端でどのように使われるかを示します。この例では、送信機のチャネル状態情報を特定するためにフル チャネル サウンディングを使用します。マルチユーザー システムとシングルユーザー システムに異なる手法を使用して、必要なプリコーディングをデジタル ベースバンドとアナログ RF 成分に分割します。簡易なオールデジタル受信機は、複数の送信されたデータ ストリームを再生し、通信システムにとって有用かつ共通な数値、すなわち EVM および BER を明らかにします。

この例では、2 つの空間的に定義されたチャネル モデル、具体的には 3GPP TR 38.901 Clustered Delay Line (CDL) モデルと、散乱に基づくモデルの選択肢を提供します。どちらのチャネル モデルも、送信/受信の空間的位置とアンテナ パターンを考慮しています。リンクの検証のために、より単純で静的なフラット MIMO チャネルも提供されます。

この例では、Communications System Toolbox™ の関数と System objects™ を使用し、以下を必要とします。

  • Phased Array System Toolbox

  • LTE System Toolbox の 5G ライブラリ、LTE System Toolbox のアドオン

はじめに

ますます増加する高いデータ レートとユーザー容量の需要によって、利用可能なスペクトルのより効率的な利用に対するニーズが高まっています。マルチユーザー MIMO (MU-MIMO) では、同じ時間-周波数リソースを使用して基地局 (BS) の送信機が複数の移動局 (MS) の受信機と同時に通信できるようにすることによってスペクトル効率を改善します。Massive MIMO では、BS アンテナ素子数を数十から数百の規模にできるため、セル内のデータ ストリーム数も大きな値に増やすことができます。

次世代の 5G 無線システムでは、ミリメートル波 (mmWave) 帯を使用してより広い帯域を活用できます。5G システムでは、大規模アンテナ アレイも展開し、mmWave 帯における著しい伝搬損失を軽減します。

現在の無線システムと比較して、mmWave 帯における波長はかなり短くなります。これにより同じ物理的寸法のアレイにより多くの素子を含めることができますが、1 つの送信-受信 (TR) モジュール、または各アンテナ素子への RF チェーンの提供はずっと高価になります。ハイブリッド トランシーバーは、RF ではアナログ ビームフォーマー、ベースバンド領域ではデジタル ビームフォーマーの組み合わせを使用するので、RF チェーンが送信素子数よりも少なく、現実的な解決策です [2]。

この例では、マルチユーザー MIMO-OFDM システムを使用し、送信機端における必要なプリコーディングのデジタル ベースバンドと RF アナログ成分への分割を示します。位相配列による MIMO-OFDM のプリコーディングの例で示したシステムを基に、この例では送信端のプリコーディング行列の公式化と、それらの MIMO-OFDM システムへの適用を示します。

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

システム パラメーター

例として、システム パラメーターを定義します。これらのパラメーターを変更するとシステムへの影響を調べることができます。

% Multi-user system with single/multiple streams per user
prm.numUsers = 4;                 % Number of users
prm.numSTSVec = [3 2 1 2];        % Number of independent data streams per user
prm.numSTS = sum(prm.numSTSVec);  % Must be a power of 2
prm.numTx = prm.numSTS*8;         % Number of BS transmit antennas (power of 2)
prm.numRx = prm.numSTSVec*4;      % Number of receive antennas, per user (any >= numSTSVec)

% Each user has the same modulation
prm.bitsPerSubCarrier = 4;   % 2: QPSK, 4: 16QAM, 6: 64QAM, 8: 256QAM
prm.numDataSymbols = 10;     % Number of OFDM data symbols

% MS positions: assumes BS at origin
%   Angles specified as [azimuth;elevation] degrees
%   az in range [-180 180], el in range [-90 90], e.g. [45;0]
maxRange = 1000;            % all MSs within 1000 meters of BS
prm.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 system
prm.chanSRate = 100e6;       % Channel sampling rate, 100 Msps
prm.ChanType = 'CDL';        % Channel options: 'CDL', 'Scattering', 'MIMO'
prm.NFig = 8;                % Noise figure (increase to worsen, 5-10 dB)
prm.nRays = 500;             % Number of rays for Frf, Fbb partitioning

システムに使用する OFDM 変調パラメーターを定義します。

prm.FFTLength = 256;
prm.CyclicPrefixLength = 64;
prm.numCarriers = 234;
prm.NullCarrierIndices = [1:7 129 256-5:256]'; % Guards and DC
prm.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 user
numTails = 6;               % number of termination tail bits
prm.numFrmBits = numSTSVec.*(prm.numDataSymbols*prm.numCarriers* ...
                 prm.bitsPerSubCarrier*codeRate)-numTails;
prm.modMode = 2^prm.bitsPerSubCarrier; % Modulation order
% Account for channel filter delay
numPadSym = 3;          % number of symbols to zeropad
prm.numPadZeros = numPadSym*(prm.FFTLength+prm.CyclicPrefixLength);

送信および受信アレイとシステムの位置的パラメーターを定義します。

prm.cLight = physconst('LightSpeed');
prm.lambda = prm.cLight/prm.fc;

% Get transmit and receive array information
[isTxURA,expFactorTx,isRxURA,expFactorRx] = helperArrayInfo(prm,true);

% Transmit antenna array definition
%   Array locations and angles
prm.posTx = [0;0;0];       % BS/Transmit array position, [x;y;z], meters
if isTxURA
    % Uniform Rectangular array
    txarray = phased.PartitionedArray(...
        'Array',phased.URA([expFactorTx numSTS],0.5*prm.lambda),...
        'SubarraySelection',ones(numSTS,numTx),'SubarraySteering','Custom');
else
    % Uniform Linear array
    txarray = phased.ULA(numTx, 'ElementSpacing',0.5*prm.lambda, ...
        'Element',phased.IsotropicAntennaElement('BackBaffled',false));
end
prm.posTxElem = getElementPosition(txarray)/prm.lambda;

spLoss = zeros(prm.numUsers,1);
prm.posRx = zeros(3,prm.numUsers);
for uIdx = 1:prm.numUsers

    % Receive arrays
    if isRxURA(uIdx)
        % Uniform Rectangular array
        rxarray = phased.PartitionedArray(...
            'Array',phased.URA([expFactorRx(uIdx) numSTSVec(uIdx)], ...
            0.5*prm.lambda),'SubarraySelection',ones(numSTSVec(uIdx), ...
            numRx(uIdx)),'SubarraySteering','Custom');
        prm.posRxElem = getElementPosition(rxarray)/prm.lambda;
    else
        if numRx(uIdx)>1
            % Uniform Linear array
            rxarray = phased.ULA(numRx(uIdx), ...
                'ElementSpacing',0.5*prm.lambda, ...
                'Element',phased.IsotropicAntennaElement);
            prm.posRxElem = getElementPosition(rxarray)/prm.lambda;
        else
            rxarray = phased.IsotropicAntennaElement;
            prm.posRxElem = [0; 0; 0]; % LCS
        end
    end

    % Mobile positions
    [xRx,yRx,zRx] = sph2cart(deg2rad(prm.mobileAngles(1,uIdx)), ...
                             deg2rad(prm.mobileAngles(2,uIdx)), ...
                             prm.mobileRanges(uIdx));
    prm.posRx(:,uIdx) = [xRx;yRx;zRx];
    [toRxRange,toRxAng] = rangeangle(prm.posTx,prm.posRx(:,uIdx));
    spLoss(uIdx) = fspl(toRxRange,prm.lambda);
end

チャネル状態情報

空間的に多重化されたシステムの場合、送信機でのチャネル情報を利用できることで、対象の方向とチャネルにおける信号エネルギーを最大化するためのプリコーディングの適用が可能になります。チャネルがゆっくり変化するという仮定の下で、これはチャネルを最初にサウンディングすることによって容易になります。BS は、MS 受信機がチャネルを推定するために使用する基準伝送を用いて、チャネルをサウンディングします。MS は、後続のデータ送信に必要なプリコーディングの計算のために、チャネル推定情報を BS に送り返します。

次の図は、モデル化されたチャネル サウンディングの処理を示します。

選択した MIMO システムの場合、プリアンブル信号がすべての送信アンテナ素子全体から送信され、チャネルを調整する受信機で処理されます。受信機アンテナ素子は、すべてのリンクに対して事前増幅、OFDM 復調、および周波数領域チャネル推定を実行します。

% Generate the preamble signal
prm.numSTS = numTx;             % set to numTx to sound out all channels
preambleSig = helperGenPreamble(prm);

% Transmit preamble over channel
prm.numSTS = numSTS;            % keep same array config for channel
[rxPreSig,chanDelay] = helperApplyMUChannel(preambleSig,prm,spLoss);

% Channel state information feedback
hDp = cell(prm.numUsers,1);
prm.numSTS = numTx;             % set to numTx to estimate all links
for uIdx = 1:prm.numUsers

    % Front-end amplifier gain and thermal noise
    rxPreAmp = phased.ReceiverPreamp( ...
        'Gain',spLoss(uIdx), ...    % account for path loss
        'NoiseFigure',prm.NFig,'ReferenceTemperature',290, ...
        'SampleRate',prm.chanSRate);
    rxPreSigAmp = rxPreAmp(rxPreSig{uIdx});
    %   scale power for used sub-carriers
    rxPreSigAmp = rxPreSigAmp * (sqrt(prm.FFTLength - ...
        length(prm.NullCarrierIndices))/prm.FFTLength);

    % OFDM demodulation
    rxOFDM = 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, numRx
    hDp{uIdx} = helperMIMOChannelEstimate(rxOFDM(:,1:numTx,:),prm);

end

マルチユーザー システムでは、各 MS からチャネル推定がフィード バックされ、BS がプリコーディングの重みを決定するために使用します。この例では、量子化または実装遅延のない完全なフィードバックを想定しています。

ハイブリッド ビームフォーミング

この例では、シングルユーザー システムには直交マッチング追跡 (OMP) アルゴリズム [5] を、マルチユーザー システムにはジョイント空間分割多重 (JSDM) 手法 [34] を使用して、選択したシステム構成のデジタル ベースバンド Fbb と RF アナログ Frf プリコーディングの重みを決定します。

シングルユーザー システムでは、OMP 分割アルゴリズムは、アレイ応答ベクトル At の影響を受けます。理想的には、これらの応答ベクトルがチャネルから見えるすべての分布点を構成します。しかしこれらは、実際のシステムやチャネルの実現の場合には不明であるため、可能な限り多くの分布点をカバーするために 3 次元空間内の光線の無作為な集合が使用されます。prm.nRays パラメーターは、光線の数を指定します。

マルチユーザー システムでは、JSDM は類似の送信チャネル共分散を持つユーザーをまとめてグループ化し、ブロック対角化法 [6] に基づいたアナログ事前コーダーによってグループ間の干渉を抑制します。ここでは各ユーザーをその独自のグループに割り当てることで、サウンディングとフィードバックのオーバーヘッドの削減につなげます。

% Calculate the hybrid weights on the transmit side
if prm.numUsers==1
    % Single-user OMP
    %   Spread rays in [az;el]=[-180:180;-90:90] 3D space, equal spacing
    %   txang = [-180:360/prm.nRays:180; -90:180/prm.nRays:90];
    txang = [rand(1,prm.nRays)*360-180;rand(1,prm.nRays)*180-90]; % random
    At = steervec(prm.posTxElem,txang);

    Fbb = complex(zeros(prm.numCarriers,numSTS,numSTS));
    Frf = complex(zeros(prm.numCarriers,numSTS,numTx));
    for carrIdx = 1:prm.numCarriers
        [Fbb(carrIdx,:,:),Frf(carrIdx,:,:)] = helperOMPTransmitWeights( ...
            permute(hDp{1}(carrIdx,:,:),[2 3 1]),numSTS,numSTS,At);
    end
    v = Fbb;    % set the baseband precoder (Fbb)
    % Frf is same across subcarriers for flat channels
    mFrf = permute(mean(Frf,1),[2 3 1]);

else
    % Multi-user Joint Spatial Division Multiplexing
    [Fbb, mFrf] = helperJSDMTransmitWeights(hDp, prm);

    % Multi-user baseband precoding
    %   Pack the per user CSI into a matrix (block diagonal)
    steeringMatrix = zeros(prm.numCarriers,sum(numSTSVec),sum(numSTSVec));
    for uIdx = 1:prm.numUsers
        stsIdx = sum(numSTSVec(1:uIdx-1))+(1:numSTSVec(uIdx));
        steeringMatrix(:,stsIdx,stsIdx) = Fbb{uIdx};  % Nst-by-Nsts-by-Nsts
    end
    v = permute(steeringMatrix,[1 3 2]);

end

% Transmit array pattern plots
if isTxURA
    % URA element response for the first subcarrier
    pattern(txarray,prm.fc,-180:180,-90:90,'Type','efield', ...
            'ElementWeights',mFrf.'*squeeze(v(1,:,:)), ...
            'PropagationSpeed',prm.cLight);
else % ULA
    % Array response for first subcarrier
    wts = mFrf.'*squeeze(v(1,:,:));
    pattern(txarray,prm.fc,-180:180,-90:90,'Type','efield', ...
            'Weights',wts(:,1),'PropagationSpeed',prm.cLight);
end
prm.numSTS = numSTS;                 % revert back for data transmission

モデル化された広帯域 OFDM システムでは、アナログの重み mFrf は複数の副搬送波の平均の重みです。アレイ応答パターンは、より強いローブで表されるはっきりしたデータ ストリームを示します。これらのローブは、ビームフォーミングによって実現された広がりと分離可能性を示します。Phased Array System Toolbox でのハイブリッド ビームフォーミングへの導入例では、最適な完全デジタル方式のアプローチによって実現したパターンと、シングルユーザーのシステム向けに選択されたハイブリッド方式のアプローチで実現したパターンとの比較を行います。

データ送信

この例では、各データ ストリームが個々の RF チェーンにマッピングされ、各アンテナ素子が各 RF チェーンに接続されているアーキテクチャをモデル化します。これを次の図に示します。

次に、システムのデータの送信機を構成します。この処理には、チャネル符号化、複素数シンボルへのビット マッピング、個別のデータ ストリームの複数の送信ストリームへの分割、送信ストリームのベースバンドプリコーディング、パイロット マッピングによる OFDM 変調、および使用されているすべての送信アンテナの RF アナログ ビームフォーミングが含まれます。

% Convolutional encoder
encoder = comm.ConvolutionalEncoder( ...
    'TrellisStructure',poly2trellis(7,[133 171 165]), ...
    'TerminationMethod','Terminated');

% Bits to QAM symbol mapping
modRQAM = comm.RectangularQAMModulator( ...
    'ModulationOrder',prm.modMode,'BitInput',true, ...
    'NormalizationMethod','Average power');

txDataBits = cell(prm.numUsers, 1);
gridData = complex(zeros(prm.numCarriers,prm.numDataSymbols,numSTS));
for uIdx = 1:prm.numUsers
    % Generate mapped symbols from bits per user
    txDataBits{uIdx} = randi([0,1],prm.numFrmBits(uIdx),1);
    encodedBits = encoder(txDataBits{uIdx});
    mappedSym = modRQAM(encodedBits);

    % Map to layers: per user, per symbol, per data stream
    stsIdx = sum(numSTSVec(1:(uIdx-1)))+(1:numSTSVec(uIdx));
    gridData(:,:,stsIdx) = reshape(mappedSym,prm.numCarriers, ...
        prm.numDataSymbols,numSTSVec(uIdx));
end

% 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

% Multi-antenna pilots
pilots = helperGenPilots(prm.numDataSymbols,numSTS);

% OFDM modulation of the data
txOFDM = ofdmmod(preData,prm.FFTLength,prm.CyclicPrefixLength,...
                 prm.NullCarrierIndices,prm.PilotCarrierIndices,pilots);
%   scale power for used sub-carriers
txOFDM = txOFDM * (prm.FFTLength/ ...
    sqrt((prm.FFTLength-length(prm.NullCarrierIndices))));

% Generate preamble with the feedback weights and prepend to data
preambleSigD = helperGenPreamble(prm,v);
txSigSTS = [preambleSigD;txOFDM];

% RF beamforming: Apply Frf to the digital signal
%   Each antenna element is connected to each data stream
txSig = txSigSTS*mFrf;

選択した、完全接続型の RF アーキテクチャでは、各アンテナ素子は、mFrf 行列の個々の列によって指定されるように prm.numSTS フェーズ シフターを使用します。

モデル化されているデータの送信と受信の処理を次に示します。

信号伝播

この例では、空間 MIMO チャネルの 2 つのオプションと、検証目的用のより簡潔な静的フラット MIMO チャネルを提供します。

3GPP TR 38.901 Clustered Delay Line (CDL) モデル [1] は、アレイのジオメトリと位置の情報を指定することができる空間的に定義された MIMO チャネルです。例では、移動体速度が非常に遅いクラスター遅延プロファイル A を使用します。

分布モデルでは、パラメーター化された分布点の数で単一バウンスのレイ トレーシング近似を使用します。この例では、分布点の数は 100 に設定されています。'Scattering' オプションは、ワンリング モデル [7] と同様に、受信機を中心とした球体内にランダムに配置された分布点をモデル化します。

チャネル モデルでは、パス損失のモデル化、および見通し内 (LOS) と非 LOS の両方の伝播条件が許可されます。この例では、非 LOS 伝播と線形または矩形ジオメトリを持つ等方性アンテナ素子パターンを想定しています。

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

サウンディングとデータ伝送の両方に同じチャネルが使用されます。データ送信は、期間がより長く、データ シンボル数のパラメーター prm.numDataSymbols によって制御されます。サウンディング段階と伝送段階の間のチャネルの変化は、プリアンブル信号をデータ信号の前に付加することによってモデル化されます。プリアンブルは、データ送信が有効な状態になるようチャネルを準備し、チャネル出力では無視されます。

マルチユーザー システムでは、ユーザーごとの独立したチャネルがモデル化されます。

受信増幅と信号再生

ユーザーごとにモデル化された受信機は、増幅によってパス損失を補正し、熱ノイズを追加します。送信機と同様に、MIMO-OFDM システムで使用される受信機には、OFDM 復調、MIMO イコライズ、QAM デマッピング、チャネル復号化など、多くの段階が含まれます。

hfig = figure('Name','Equalized symbol constellation per stream');
scFact = ((prm.FFTLength-length(prm.NullCarrierIndices))...
         /prm.FFTLength^2)/numTx;
nVar = noisepow(prm.chanSRate,prm.NFig,290)/scFact;
demodRQAM = comm.RectangularQAMDemodulator( ...
    'ModulationOrder',prm.modMode,'BitOutput',true, ...
    'DecisionMethod','Approximate log-likelihood ratio', ...
    'NormalizationMethod','Average power','Variance',nVar);
decoder = comm.ViterbiDecoder('InputFormat','Unquantized', ...
    'TrellisStructure',poly2trellis(7, [133 171 165]), ...
    'TerminationMethod','Terminated','OutputDataType','double');

for uIdx = 1:prm.numUsers
    stsU = numSTSVec(uIdx);
    stsIdx = sum(numSTSVec(1:(uIdx-1)))+(1:stsU);

    % Front-end amplifier gain and thermal noise
    rxPreAmp = phased.ReceiverPreamp( ...
        'Gain',spLoss(uIdx), ...        % account for path loss
        'NoiseFigure',prm.NFig,'ReferenceTemperature',290, ...
        'SampleRate',prm.chanSRate);
    rxSigAmp = rxPreAmp(rxSig{uIdx});

    % Scale power for occupied sub-carriers
    rxSigAmp = rxSigAmp*(sqrt(prm.FFTLength-length(prm.NullCarrierIndices)) ...
        /prm.FFTLength);

    % OFDM demodulation
    rxOFDM = 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 preamble
    hD = 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 demodulation
    rxSymbs = rxEq(:)/sqrt(numTx);
    rxLLRBits = demodRQAM(rxSymbs);

    % Apply CSI prior to decoding
    rxLLRtmp = reshape(rxLLRBits,prm.bitsPerSubCarrier,[], ...
        prm.numDataSymbols,stsU);
    csitmp = reshape(CSI,1,[],1,numSTSVec(uIdx));
    rxScaledLLR = rxLLRtmp.*csitmp;

    % Soft-input channel decoding
    rxDecoded = decoder(rxScaledLLR(:));

    % Decoded received bits
    rxBits = rxDecoded(1:prm.numFrmBits(uIdx));

    % Plot equalized symbols for all streams per user
    scaler = ceil(max(abs([real(rxSymbs(:)); imag(rxSymbs(:))])));
    for i = 1:stsU
        subplot(prm.numUsers, max(numSTSVec), (uIdx-1)*max(numSTSVec)+i);
        plot(reshape(rxEq(:,:,i)/sqrt(numTx), [], 1), '.');
        axis square
        xlim(gca,[-scaler scaler]);
        ylim(gca,[-scaler scaler]);
        title(['U ' num2str(uIdx) ', DS ' num2str(i)]);
        grid on;
    end

    % Compute and display the EVM
    evm = comm.EVM('Normalization','Average constellation power', ...
        'ReferenceSignalSource','Estimated from reference constellation', ...
        'ReferenceConstellation',constellation(demodRQAM));
    rmsEVM = evm(rxSymbs);
    disp(['User ' num2str(uIdx)]);
    disp(['  RMS EVM (%) = ' num2str(rmsEVM)]);

    % Compute and display bit error rate
    ber = comm.ErrorRate;
    measures = ber(txDataBits{uIdx},rxBits);
    fprintf('  BER = %.5f; No. of Bits = %d; No. of errors = %d\n', ...
        measures(1),measures(3),measures(2));
end
User 1
  RMS EVM (%) = 2.7356
  BER = 0.00000; No. of Bits = 9354; No. of errors = 0
User 2
  RMS EVM (%) = 19.4232
  BER = 0.00000; No. of Bits = 6234; No. of errors = 0
User 3
  RMS EVM (%) = 28.5188
  BER = 0.00000; No. of Bits = 3114; No. of errors = 0
User 4
  RMS EVM (%) = 43.3505
  BER = 0.17292; No. of Bits = 6234; No. of errors = 1078

モデル化された MIMO システムでは、イコライズされたシンボルの受信コンスタレーションを表示することで、受信の定性評価を提供します。実際のビット誤り率は、ユーザーごとの実際の送信されたビットと受信および復号化されたビットを比較することで、定量的数値を提供します。

rng(s);         % restore RNG state

まとめとその他の調査

この例では、マルチユーザー MIMO-OFDM システムのハイブリッド ビームフォーミングの使用について示しています。これにより、いくつかのシステム全体のパラメーターを変更して、多様なチャネル モデル向けのさまざまなシステム構成を調べることができます。

構成可能なパラメーター セットには、ユーザーの数、ユーザーごとのデータ ストリームの数、送信/受信アンテナの素子の数、アレイの位置、チャネル モデルが含まれます。これらのパラメーターを調節することで、システム全体への個々のパラメーターの影響や組み合わせた場合の影響を調査できます。例として、次を変えてみます。

  • チャネル タイプ、prm.ChanType、または

  • ユーザーの数、prm.numUsers、およびそれらの対応するデータ ストリーム、prm.numSTSVec。マルチユーザーとシングルユーザーのシステムを切り替えます。あるいは、

  • シングルユーザー システムに使用する光線の数、prm.nRays

例で使用されている次の補助関数について調査します。

参考文献

  1. 3GPP TR 38.901."Study on channel model for frequencies from 0.5 to 100 GHz (Release 14)."3rd Generation Partnership Project; Technical Specification Group Radio Access Network; v14.2.0 (2017-09).URL: http://www.3gpp.org.

  2. Molisch, A. F., et al. "Hybrid Beamforming for Massive MIMO: A Survey."IEEE Communications Magazine, Vol. 55, No. 9, September 2017, pp. 134-141.

  3. Li Z., S. Han, and A. F. Molisch."Hybrid Beamforming Design for Millimeter-Wave Multi-User Massive MIMO Downlink."IEEE ICC 2016, Signal Processing for Communications Symposium.

  4. El Ayach, Oma, et al. "Spatially Sparse Precoding in Millimeter Wave MIMO Systems."IEEE Transactions on Wireless Communications, Vol. 13, No. 3, March 2014, pp. 1499-1513.

  5. Adhikary A., J. Nam, J-Y Ahn, and G. Caire."Joint Spatial Division and Multiplexing - The Large-Scale Array Regime."IEEE Transactions on Information Theory, Vol. 59, No. 10, October 2013, pp. 6441-6463.

  6. 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.

  7. Shui, D. S., G. J. Foschini, M. J. Gans and J. M. Kahn."Fading Correlation and its Effect on the Capacity of Multielement Antenna Systems."IEEE Transactions on Communications, Vol. 48, No. 3, March 2000, pp. 502-513.