В этом примере показано, как моделировать двухточечную систему 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