exponenta event banner

Формирование диаграммы направленности для систем MIMO-OFDM

В этом примере показано, как моделировать двухточечную систему MIMO-OFDM с формированием луча. Для обеспечения более высокой скорости передачи данных в последних стандартах беспроводной связи, таких как семейства 802.11x, была принята комбинация методов мультиплексирования с множественными входами и множеством выходов (MIMO) и мультиплексирования с ортогональным частотным разделением каналов (OFDM). Поскольку MIMO использует антенные решетки, формирование диаграммы направленности может быть использовано для улучшения отношения принятого сигнала к шуму (SNR), что, в свою очередь, уменьшает частоту битовых ошибок (BER).

В этом примере требуется Communications Toolbox™.

Введение

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

Остальная часть системы конфигурируется следующим образом. Мощность передатчика составляет 8 Вт, а коэффициент усиления передачи -8 дБ. Мобильный приемник неподвижен и расположен на расстоянии 2750 метров и находится на расстоянии 3 градусов от границы визирования передатчика. Интерферер мощностью 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);

В подсистеме передатчика имеется множество компонентов, таких как сверточный кодер, скремблер, модулятор КАМ, модулятор 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 сигнал, излучаемый от различных элементов в решетке, может проходить через различные среды распространения, сигнал, излучаемый от каждой антенны, должен распространяться индивидуально. Это может быть достигнуто путем установки значения «Ложные Радиационные Сигналы» на фазированном. Компонент радиатора.

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, дескремблер, эквалайзер и декодер Витерби.

[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] Теодор С. Раппапорт и др. Беспроводная связь миллиметровой волны, Prentice Hall, 2014

См. также