exponenta event banner

Массивное формирование гибридных лучей MIMO

Этот пример показывает, как гибридное формирование луча используется на передающем конце массивной системы связи MIMO, используя методы как для многопользовательских, так и для однопользовательских систем. В примере используется полное канальное зондирование для определения информации о состоянии канала в передатчике. Он разделяет требуемое предварительное кодирование на цифровые компоненты основной полосы частот и аналоговые радиочастотные компоненты, используя различные методы для многопользовательских и однопользовательских систем. Упрощенные полностью цифровые приемники восстанавливают множество переданных потоков данных, чтобы выделить общие показатели достоинств для системы связи, а именно EVM и BER.

В примере используется модель пространственного канала на основе рассеяния, которая учитывает пространственные местоположения передачи/приема и диаграммы направленности антенн. Более простой статический-плоский канал MIMO также предлагается для целей проверки связи.

Пример требует Коммуникаций Toolbox™ и Поэтапная Система Множества Toolbox™.

Введение

Постоянно растущая потребность в высокой скорости передачи данных и большей пропускной способности пользователя увеличивает потребность в более эффективном использовании доступного спектра. Многопользовательский MIMO (MU-MIMO) улучшает эффективность спектра, позволяя передатчику базовой станции (BS) осуществлять связь одновременно с множеством приемников мобильных станций (MS), используя одни и те же ресурсы временной частоты. Массивная MIMO позволяет количеству антенных элементов BS быть порядка десятков или сотен, тем самым также увеличивая число потоков данных в ячейке до большого значения.

Беспроводные системы следующего поколения, 5G, используют полосы миллиметровой волны (mmWave), чтобы использовать преимущества более широкой полосы пропускания. Системы 5G также развертывают крупномасштабные антенные решетки для уменьшения серьезных потерь на распространение в диапазоне mmWave.

По сравнению с современными беспроводными системами длина волны в диапазоне mmWave значительно меньше. Хотя это позволяет решетке содержать больше элементов в пределах одного и того же физического измерения, становится намного дороже обеспечить один модуль приема-передачи (TR) или радиочастотную цепь для каждого антенного элемента. Гибридные приемопередатчики являются практическим решением, поскольку они используют комбинацию аналоговых формирователей луча в радиочастотных и цифровых формирователях луча в модулирующих доменах, с меньшим количеством радиочастотных цепей, чем количество передающих элементов [1].

В этом примере используется многопользовательская система MIMO-OFDM для выделения разделения требуемого предварительного кодирования на его цифровые аналоговые компоненты основной полосы и РЧ на стороне передатчика. Основываясь на системе, выделенной в примере предварительного кодирования 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 = 'Scattering'; % Channel options: '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

Информация о состоянии канала

Для пространственно мультиплексированной системы наличие канальной информации в передатчике позволяет применять предварительное кодирование для максимизации энергии сигнала в направлении и канале, представляющих интерес. В предположении о медленно изменяющемся канале этому способствует то, что канал звучит первым. БС слышит канал с использованием опорной передачи, которую приемник МС использует для оценки канала. МС передает информацию оценки канала обратно в БС для вычисления предварительного кодирования, необходимого для последующей передачи данных.

На следующей схеме показана обработка для моделируемого зондирующего канала.

Для выбранной системы 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 для определения весов предварительного кодирования. Пример предполагает идеальную обратную связь без задержек квантования или реализации.

Гибридное формирование луча

В примере используется алгоритм [3] поиска ортогонального согласования (OMP) для однопользовательской системы и метод совместного мультиплексирования с пространственным разделением каналов (JSDM) [2, 4] для многопользовательской системы для определения цифровой основной полосы частот. Fbb и аналоговый RF Frf веса предварительного кодирования для выбранной конфигурации системы.

Для однопользовательской системы алгоритм разбиения OMP чувствителен к векторам отклика массива At. В идеале эти векторы отклика учитывают все рассеиватели, наблюдаемые каналом, но они неизвестны для фактической системы и реализации канала, поэтому используется случайный набор лучей в пределах 3-мерного пространства, чтобы охватить как можно больше рассеивателей. prm.nRays параметр определяет количество лучей.

Для многопользовательской системы JSDM группирует пользователей с аналогичной ковариацией канала передачи вместе и подавляет межгрупповые помехи аналоговым предварительным кодером на основе способа блочной диагонализации [5]. Здесь каждому пользователю назначается быть в своей собственной группе, тем самым не приводя к уменьшению количества служебных сигналов или обратной связи.

% 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);
    AtExp = complex(zeros(prm.numCarriers,size(At,1),size(At,2)));
    for carrIdx = 1:prm.numCarriers
        AtExp(carrIdx,:,:) = At; % same for all sub-carriers
    end

    % Orthogonal matching pursuit hybrid weights
    [Fbb,Frf] = omphybweights(hDp{1},numSTS,numSTS,AtExp);

    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) сравниваются шаблоны, реализованные оптимальным, полностью цифровым подходом, с шаблонами, реализованными из выбранного гибридного подхода, для однопользовательской системы.

Передача данных

В примере моделируется архитектура, в которой каждый поток данных отображается на отдельную радиочастотную цепь, и каждый антенный элемент соединен с каждой радиочастотной цепью. Это показано на следующей схеме.

Далее мы конфигурируем передатчик данных системы. Эта обработка включает в себя канальное кодирование, преобразование битов в комплексные символы, разделение отдельного потока данных на множество потоков передачи, предварительное кодирование основной полосы частот потоков передачи, модуляцию OFDM с отображением пилот-сигнала и формирование радиочастотного аналогового луча для всех используемых передающих антенн.

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

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});

    % Bits to QAM symbol mapping
    mappedSym = qammod(encodedBits,prm.modMode,'InputType','bit', ...
    'UnitAveragePower',true);

    % 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;

Для выбранной полностью подключенной РЧ-архитектуры каждый антенный элемент использует prm.numSTS фазовращатели, как указано отдельными столбцами mFrf матрица.

Ниже показана моделируемая обработка для передачи и приема данных.

Распространение сигнала

В примере предлагается опция для пространственного канала MIMO и более простой статический-плоский канал MIMO для целей проверки.

Модель рассеяния использует аппроксимацию трассировки луча с одним отскоком с параметризованным числом рассеивателей. В этом примере количество рассеивателей устанавливается равным 100. Опция «Рассеяние» моделирует рассеиватели, размещенные случайным образом в сфере вокруг приемника, аналогично однокольцевой модели [6].

Модели каналов позволяют моделировать потери на пути и условия распространения как линии визирования (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;
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 = qamdemod(rxSymbs,prm.modMode,'UnitAveragePower',true, ...
        'OutputType','approxllr','NoiseVariance',nVar);

    % 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', ...
        qammod((0:prm.modMode-1)',prm.modMode,'UnitAveragePower',1));
    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 (%) = 0.38361
  BER = 0.00000; No. of Bits = 9354; No. of errors = 0
User 2
  RMS EVM (%) = 1.0311
  BER = 0.00000; No. of Bits = 6234; No. of errors = 0
User 3
  RMS EVM (%) = 2.1462
  BER = 0.00000; No. of Bits = 3114; No. of errors = 0
User 4
  RMS EVM (%) = 1.0024
  BER = 0.00000; No. of Bits = 6234; No. of errors = 0

Для смоделированной системы MIMO отображаемая совокупность приема выровненных символов предлагает качественную оценку приема. Фактическая частота битовых ошибок обеспечивает количественный показатель путем сравнения фактических переданных битов с принятыми декодированными битами на пользователя.

rng(s);         % restore RNG state

Заключение и дальнейшие исследования

Пример подчеркивает использование гибридного формирования луча для многопользовательских систем MIMO-OFDM. Она позволяет исследовать различные конфигурации системы для различных моделей каналов путем изменения нескольких параметров всей системы.

Набор конфигурируемых параметров включает в себя количество пользователей, количество потоков данных на пользователя, количество антенных элементов передачи/приема, местоположения решеток и модели каналов. При настройке этих параметров можно изучить индивидуальные или комбинированные эффекты параметров на общую систему. В качестве примеров можно использовать различные варианты:

  • количество пользователей, prm.numUsersи соответствующие им потоки данных, prm.numSTSVec, для переключения между многопользовательскими и однопользовательскими системами, или

  • тип канала, prm.ChanType, или

  • количество лучей, prm.nRays, используется для однопользовательской системы.

Ознакомьтесь со следующими вспомогательными функциями, используемыми в примере:

Ссылки

  1. Molisch, A. F., et al. «Гибридное формирование луча для Massive MIMO: A Survey». IEEE ® Communications Magazine, том 55, № 9, сентябрь 2017, стр. 134-141.

  2. Ли З., С. Хань и А. Ф. Молиш. «Гибридный дизайн формирования диаграммы направленности для миллиметровой волны многопользовательской массивной MIMO нисходящей линии связи». IEEE ICC 2016, симпозиум по обработке сигналов для коммуникаций.

  3. El Ayach, Oma и др. «Пространственно разреженное предварительное кодирование в системах MIMO миллиметровой волны». IEEE Transactions on Wireless Communications, том 13, № 3, март 2014 г., стр. 1499-1513.

  4. Adhikary A., J. Nam, J-Y Ahn и G. Caire. «Совместное пространственное разделение и мультиплексирование - режим большого массива». IEEE Transactions on Information Theory, Vol. 59, No. 10, October 2013, pp. 6441-6463.

  5. Спенсер В., А. Суиндлхерст, М. Хаардт, «Методы нулевого форсирования для пространственного мультиплексирования нисходящей линии связи в многопользовательских MIMO-каналах». IEEE Transactions on Signal Processing, том 52, № 2, февраль 2004 года, стр. 461-471.

  6. Шуи, Д. С., Г. Дж. Фоскини, М. Дж. Ганса и Дж. М. Кана. «Корреляция замирания и ее влияние на пропускную способность многоэлементных антенных систем». IEEE Transactions on Communications, Vol. 48, No. 3, March 2000, pp. 502-513.