Формирование луча для систем MIMO-OFDM

Этот пример показывает, как смоделировать систему «точка-точка» MIMO-OFDM с формированием луча. Комбинация нескольких-входов-нескольких-выходов (MIMO) и ортогонального частотного деления мультиплексирования (OFDM) методов была принята в недавних беспроводных стандартах, таких как семейства 802.11x, для обеспечения более высокой скорости передачи данных. Поскольку MIMO использует антенные решетки, формирование луча может быть принято, чтобы улучшить отношение принимаемого сигнала к шуму (ОСШ), которое, в свою очередь, уменьшает вероятность битовой ошибки (BER).

Этот пример требует Communications Toolbox™.

Введение

Термин MIMO используется для описания системы, в которой присутствуют несколько передатчиков или несколько приемников. На практике система может принимать много различных форм, таких как один вход -multiple-output (SIMO) или несколько вход-single выход (MISO) система. Этот пример иллюстрирует нисходящую систему MISO. ULA с 8 элементами развертывается в базовой станции в качестве передатчика, в то время как мобильный модуль является приемником с одной антенной.

Остальная часть системы сконфигурирована следующим образом. Степень передатчика составляет 8 Вт, и коэффициент усиления передачи составляет -8 дБ. Мобильный приемник является стационарным и расположен в 2750 метрах, и находится на 3 степенях от boresight передатчика. Интерферентор с степенью 1 ватт и усилением -20 дБ расположен на 9000 метрах, в 20 степени от границы передатчика.

% Initialize system constants
rng(2014);
gc = helperGetDesignSpecsParameters();

% Tunable parameters
tp.txPower = 9;           % watt
tp.txGain = -8;           % dB
tp.mobileRange = 2750;    % m
tp.mobileAngle = 3;       % degrees
tp.interfPower = 1;       % watt
tp.interfGain = -20;      % dB
tp.interfRange = 9000;    % m
tp.interfAngle =   20;    % degrees
tp.numTXElements = 8;
tp.steeringAngle = 0;     % degrees
tp.rxGain = 108.8320 - tp.txGain; % dB

numTx= tp.numTXElements;

Вся сцена может быть изображена на рисунке ниже.

helperPlotMIMOEnvironment(gc, tp);

Передача сигнала

Сначала сконфигурируйте системный передатчик.

[encoder,scrambler,modulatorOFDM,steeringvec,transmitter,...
    radiator,pilots,numDataSymbols,frmSz] = helperMIMOTxSetup(gc,tp);

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

txBits = randi([0, 1], frmSz,1);
coded = encoder(txBits);
bitsS = scrambler(coded);
tx = qammod(bitsS,gc.modMode,'InputType','bit','UnitAveragePower',true);

В системе OFDM данные передаются несколькими поднесущими, которые ортогональны друг другу.

ofdm1 = reshape(tx, gc.numCarriers,numDataSymbols);

Затем поток данных дублируется во все излучающие элементы передающего массива

ofdmData = repmat(ofdm1,[1, 1, numTx]);
txOFDM = modulatorOFDM(ofdmData, pilots);
%scale
txOFDM = txOFDM * ...
    (gc.FFTLength/sqrt(gc.FFTLength-sum(gc.NumGuardBandCarriers)-1));

% Amplify to achieve peak TX power for each channel
for n = 1:numTx
    txOFDM(:,n) = transmitter(txOFDM(:,n));
end

В системе MIMO также возможно разделение многого пользователя пространственного мультиплексирования с делением каналов (SDMA). В этих ситуациях поток данных часто модулируется весом, соответствующим желаемому направлению, так что после излучения сигнал максимизируется в этом направлении. Поскольку в канале MIMO сигнал, излучаемый от различных элементов в массиве, может проходить через различные окружения распространения, сигнал, излучаемый от каждой антенны, должен распространяться индивидуально. Это может быть достигнуто путем установки значения false в CombineRadiedSignals на фазе. Компонент излучателя.

radiator.CombineRadiatedSignals = false;

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

wR = steeringvec(gc.fc,[-tp.mobileAngle;0]);

Между тем массив также направляется к заданному углу поворота, поэтому суммарные веса являются комбинацией как предварительного кодирования, так и весов поворота.

wT = steeringvec(gc.fc,[tp.steeringAngle;0]);
weight = wT.* wR;

Таким образом, переданный сигнал задается как

txOFDM = radiator(txOFDM,repmat([tp.mobileAngle;0],1,numTx),conj(weight));

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

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

Затем сигнал распространяется через канал MIMO. В целом, существуют два эффекта распространения на интенсивность принимаемого сигнала, которые представляют интерес: один из них - потери расширения из-за расстояния распространения, часто называемые потерями при распространении в свободном пространстве; а другой - затухание из-за многолучевого распространения. Этот пример моделирует оба эффекта.

[channel,interferenceTransmitter,toRxAng,spLoss] = ...
    helperMIMOEnvSetup(gc,tp);
[sigFade, chPathG] =  channel(txOFDM);
sigLoss = sigFade/sqrt(db2pow(spLoss(1)));

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

% Generate interference and apply gain and propagation loss
numBits = size(sigFade,1);
interfSymbols = wgn(numBits,1,1,'linear','complex');
interfSymbols = interferenceTransmitter(interfSymbols);
interfLoss = interfSymbols/sqrt(db2pow(spLoss(2)));

Прием сигнала

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

[collector,receiver,demodulatorOFDM,descrambler,decoder] = ...
    helperMIMORxSetup(gc,tp,numDataSymbols);

rxSig = collector([sigLoss interfLoss],toRxAng);

% Front-end amplifier gain and thermal noise
rxSig = receiver(rxSig);

rxOFDM = rxSig * ...
    (sqrt(gc.FFTLength-sum(gc.NumGuardBandCarriers)-1)) / (gc.FFTLength);

% OFDM Demodulation
rxOFDM = demodulatorOFDM(rxOFDM);

% Channel estimation
hD = helperIdealChannelEstimation(gc,  numDataSymbols, chPathG);

% Equalization
rxEq = helperEqualizer(rxOFDM, hD, numTx);

% Collapse OFDM matrix
rxSymbs = rxEq(:);

rxBitsS = qamdemod(rxSymbs,gc.modMode,'UnitAveragePower',true,...
    'OutputType','bit');
rxCoded = descrambler(rxBitsS);
rxDeCoded = decoder(rxCoded);
rxBits = rxDeCoded(1:frmSz);

Сравнение декодированного выхода с исходным потоком сообщений предполагает, что полученный BER является слишком высоким для системы связи. Схема созвездия также показана ниже

ber = comm.ErrorRate;
measures = ber(txBits, rxBits);
fprintf('BER = %.2f%%; No. of Bits = %d; No. of errors = %d\n', ...
    measures(1)*100,measures(3), measures(2));
BER = 32.07%; No. of Bits = 30714; No. of errors = 9850
constdiag = comm.ConstellationDiagram('SamplesPerSymbol', 1,...
    'ReferenceConstellation', [], 'ColorFading',true,...
    'Position', gc.constPlotPosition);
% Display received constellation
constdiag(rxSymbs);

Высокий BER в основном обусловлен тем, что мобильный телефон находится вне направления управления массива базовых станций. Если мобильный телефон выровнен по направлению рулевого управления, BER значительно улучшается.

tp.steeringAngle = tp.mobileAngle;

% Steer the transmitter main lobe
wT = steeringvec(gc.fc,[tp.steeringAngle;0]);

[txBits, rxBits,rxSymbs] = helperRerunMIMOBeamformingExample(gc,tp,wT);

reset(ber);
measures = ber(txBits, rxBits);
fprintf('BER = %.2f%%; No. of Bits = %d; No. of errors = %d\n', ...
    measures(1)*100,measures(3), measures(2));
BER = 0.02%; No. of Bits = 30714; No. of errors = 5
constdiag(rxSymbs);

Поэтому система очень чувствительна к ошибке управления. С другой стороны, именно этот вид пространственной чувствительности делает SDMA возможным различать многих пользователей в пространстве.

Эффект квантования сдвигателя фазы

Обсуждение пока предполагает, что пучок может быть направлен в точном желаемом направлении. Однако в действительности это часто не соответствует действительности, особенно когда используются аналоговые фазы. Аналоговые фазы имеют только ограниченную точность и классифицируются по количеству бит, используемых в фазовых сдвигах. Для примера 3-битный переключатель фазы может представлять только 8 различных углов в пределах 360 степеней. Таким образом, если такое квантование включено в симуляцию, производительность системы ухудшается, что можно наблюдать из графика созвездия.

% analog phase shifter with quantization effect
release(steeringvec);
steeringvec.NumPhaseShifterBits = 4;
wTq = steeringvec(gc.fc,[tp.steeringAngle;0]);

[txBits, rxBits,rxSymbs] = helperRerunMIMOBeamformingExample(gc,tp,wTq);

reset(ber);
measures = ber(txBits, rxBits);
fprintf('BER = %.2f%%; No. of Bits = %d; No. of errors = %d\n', ...
    measures(1)*100,measures(3), measures(2));

constdiag = comm.ConstellationDiagram('SamplesPerSymbol', 1,...
    'ReferenceConstellation', [], 'ColorFading',true,...
    'Position', gc.constPlotPosition);
constdiag(rxSymbs);
BER = 0.02%; No. of Bits = 30714; No. of errors = 7

Сводные данные

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

Ссылка

[1] Хауман Зарринкуб, Понимание LTE с MATLAB, Уайли, 2014

[2] Theodore S. Rappaport et al. Millimeter Wave Wireless Communications, Prentice Hall, 2014

См. также