Этот пример показывает, как смоделировать систему MIMO-OFDM "точка-точка" с beamforming. Комбинация методов нескольких вводят несколько выводов (MIMO) и ортогонального мультиплексирования деления частоты (OFDM) была принята в недавних беспроводных стандартах, такой как 802.11x семейства, чтобы обеспечить более высокую скорость передачи данных. Поскольку MIMO использует антенные решетки, beamforming может быть принят, чтобы улучшить полученный сигнал до шумового отношения (ОСШ), который в свою очередь уменьшает частоту ошибок по битам (BER).
Этот пример требует Communications Toolbox™.
Термин MIMO используется, чтобы описать систему, где несколько передатчиков или несколько получателей присутствуют. На практике система может принять много различных форм, таких как система нескольких вводят один вывод (MISO) или один вход несколько выводов (SIMO). Этот пример иллюстрирует нисходящую систему MISO. ULA с 8 элементами развертывается в базовой станции как передатчик, в то время как мобильный модуль является получателем с одной антенной.
Остальная часть системы сконфигурирована можно следующим образом. Степень передатчика составляет 8 ватт, и усиление передачи составляет-8 дБ. Мобильный получатель является стационарным и расположен в на расстоянии в 2 750 метрах и является 3 градусами от опорного направления передатчика. interferer со степенью 1 ватта и усилением-20 дБ расположен на уровне 9 000 метров, 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,modulatorRQAM,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 = modulatorRQAM(bitsS);
В системе 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, сигнал, излученный от различных элементов в массиве, может пройти различные среды распространения, сигнал, излученный от каждой антенны, должен быть распространен индивидуально. Это может быть достигнуто установкой CombineRadiatedSignals ко лжи на поэтапном. Компонент теплоотвода.
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,demodulatorRQAM,... 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 = demodulatorRQAM(rxSymbs); 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 "точка-точка", использующей beamforming. Имитационные модели много компонентов системы, таких как кодирование, передайте beamforming, предварительное кодирование, многопутевое исчезновение, оценку канала, коррекцию и декодирование.
[1] Хоумен Зарринкуб, понимая LTE с MATLAB, Вайли, 2014
[2] Теодор С. Рэппэпорт и др. Радиосвязи Волны Миллиметра, Prentice Hall, 2014