В этом примере показано, как антенна, взаимная связь влияет на производительность передачи ортогонального пространственно-временного блочного кода (OSTBC) по нескольким - ввела, несколько - выводят (MIMO) канал. Передатчик и получатель имеют два дипольных элемента антенны каждый. BER по сравнению с кривыми ОСШ построен при различной корреляции и связывающихся сценариях. Чтобы запустить этот пример, вам нужен Antenna Toolbox™.
QPSK, модулируемый Alamouti OSTBC, симулирован по 2x2 квазистатический плоский частотой канал Рейли [1]. Система действует на уровне 2,4 ГГц. Область значений ОСШ, которая будет симулирована, от 0 до 10 дБ.
fc = 2.4e9; % Center frequency Nt = 2; % Number of Tx antennas Nr = 2; % Number of Rx antennas blkLen = 2; % Alamouti code block length snr = 0:10; % SNR range maxNumErrs = 3e2; % Maximum number of errors maxNumBits = 5e4; % Maximum number of bits
Создайте объекты выполнить модуляцию QPSK и демодуляцию, кодирование Alamouti и объединение, канал AWGN, а также вычисление BER.
qpskMod = comm.QPSKModulator; qpskDemod = comm.QPSKDemodulator; alamoutiEnc = comm.OSTBCEncoder( ... 'NumTransmitAntennas', Nt); alamoutiDec = comm.OSTBCCombiner( ... 'NumTransmitAntennas', Nt, ... 'NumReceiveAntennas', Nr); awgnChanNC = comm.AWGNChannel( ... % For no coupling case 'NoiseMethod', 'Signal to noise ratio (SNR)',... 'SignalPower', 1); berCalcNC = comm.ErrorRate; % For no coupling case % Clone objects for mutual coupling case awgnChanMC = clone(awgnChanNC); berCalcMC = clone(berCalcNC);
Двухэлементный резонирующий дипольный массив используется и в передаче (Tx), и получите сторону (Rx). В Tx диполи расположены полудлина волны с интервалами независимо. В Rx интервал является одной десятой длины волны.
txSpacing = 0.5; rxSpacing = 0.1; lambda = physconst('lightspeed')/fc; antElement = dipole( ... 'Length', lambda/2, ... 'Width', lambda/100); txArray = linearArray( ... 'Element', antElement,... 'NumElements', Nt,... 'ElementSpacing', txSpacing*lambda); rxArray = linearArray( ... 'Element', antElement,... 'NumElements', Nr,... 'ElementSpacing', rxSpacing*lambda);
Связывающаяся матрица вычисляется на основе модели схемы массива согласно [2]. Вычисление s-параметра выполняется для передачи, и получите массивы и от этого, матричное представление импеданса массива выведено.
txMCMtx = helperCalculateCouplingMatrix(txArray, fc, [1 Nt]); rxMCMtx = helperCalculateCouplingMatrix(rxArray, fc, [1 Nr]);
Передача и получает пространственное получение корреляционных матриц среда распространения канала. Без связи это принято, что эти два элемента в Tx некоррелированые, и эти два элемента в Rx имеют высокую корреляцию. Объединенная/полная корреляционная матрица для целого канала является их Кронекеровым продуктом.
txCorrMtx = eye(2); rxCorrMtx = [1 0.9; 0.9 1]; combCorrMtx = kron(txCorrMtx, rxCorrMtx);
Со связью мы используем подход в [3], чтобы изменить корреляционные матрицы Tx и Rx пред и постумножение их соответствующими матрицами связи. Это допустимо под предположением, что корреляция и связь могут быть смоделированы независимо.
txMCCorrMtx = txMCMtx * txCorrMtx * txMCMtx'; rxMCCorrMtx = rxMCMtx * rxCorrMtx * rxMCMtx';
Объединенной пространственной корреляцией со связью является kron(txMCCorr, rxMCCorr)
. В качестве альтернативы мы можем обработать Tx/Rx связывающаяся матрица, как "поглощаемая" в корреляционную матрицу Tx/Rx, и вывести объединенную корреляционную матрицу можно следующим образом:
txSqrtCorrMtx = txMCMtx * sqrtm(txCorrMtx); rxSqrtCorrMtx = rxMCMtx * sqrtm(rxCorrMtx); combMCCorrMtx = kron(txSqrtCorrMtx, rxSqrtCorrMtx); combMCCorrMtx = combMCCorrMtx * combMCCorrMtx';
Создайте два comm.MIMOChannel
объекты симулировать 2x2 MIMO образовывают канал с и без связи. Объединенная пространственная корреляционная матрица присвоена в каждом случае. MaximumDopplerShift
свойство объектов собирается в 0 смоделировать квазистатический канал.
mimoChanNC = comm.MIMOChannel( ... % For no coupling case 'MaximumDopplerShift', 0, ... 'SpatialCorrelationSpecification', 'Combined', ... 'SpatialCorrelationMatrix', combCorrMtx,... 'PathGainsOutputPort', true); % Clone objects for mutual coupling case mimoChanMC = clone(mimoChanNC); mimoChanMC.SpatialCorrelationMatrix = combMCCorrMtx;
Симулируйте модулируемый код Alamouti QPSK для каждого значения ОСШ с и без связи антенны. Один код Alamouti симулирован через канал MIMO в каждой итерации. Чтобы смоделировать квазистатический канал, мы сбрасываем comm.MIMOChannel
объект получить новый набор канала получает для каждой передачи кода (итерация).
% Set up a figure to visualize BER results h1 = figure; grid on; hold on; ax = gca; ax.YScale = 'log'; xlim([snr(1), snr(end)]); ylim([1e-3 1]); xlabel('SNR (dB)'); ylabel('BER'); h1.NumberTitle = 'off'; h1.Name = 'Orthogonal Space-Time Block Coding'; h1.Renderer = 'zbuffer'; title('Alamouti-coded 2x2 System - High Coupling, High Correlation'); s = rng(108); % For repeatability [berNC, berMC] = deal(zeros(3,length(snr))); % Loop over SNR values for idx = 1:length(snr) awgnChanNC.SNR = snr(idx); awgnChanMC.SNR = snr(idx); reset(berCalcNC); reset(berCalcMC); while min(berNC(2,idx),berMC(2,idx)) <= maxNumErrs && (berNC(3,idx) <= maxNumBits) % Generate random data txData = randi([0 3], blkLen, 1); % Perform QPSK modulation and Alamouti encoding txSig = alamoutiEnc(qpskMod(txData)); % Pass through MIMO channel reset(mimoChanNC); reset(mimoChanMC); [chanOutNC, estChanNC] = mimoChanNC(txSig); [chanOutMC, estChanMC] = mimoChanMC(txSig); % Add AWGN rxSigNC = awgnChanNC(chanOutNC); rxSigMC = awgnChanMC(chanOutMC); % Perform Alamouti decoding with known channel state information decSigNC = alamoutiDec(rxSigNC, squeeze(estChanNC)); decSigMC = alamoutiDec(rxSigMC, squeeze(estChanMC)); % Perform QPSK demodulation rxDataNC = qpskDemod(decSigNC); rxDataMC = qpskDemod(decSigMC); % Update BER berNC(:, idx) = berCalcNC(txData, rxDataNC); berMC(:, idx) = berCalcMC(txData, rxDataMC); end % Plot results semilogy(snr(1:idx), berNC(1,1:idx), 'r*'); semilogy(snr(1:idx), berMC(1,1:idx), 'bo'); legend({'Channel Without Coupling', 'Channel With Coupling'}); drawnow; end % Perform curve fitting fitBERNC = berfit(snr, berNC(1,:)); fitBERMC = berfit(snr, berMC(1,:)); semilogy(snr, fitBERNC, 'r', snr, fitBERMC, 'b'); legend({'Channel Without Coupling', 'Channel With Coupling'});
rng(s); % Restore RNG
Эффект корреляции и взаимной связи на производительности BER может быть далее изучен путем изменения коэффициента корреляции и/или путем изменения интервала между элементами. Чем меньше интервал, тем выше связь. Подобно тому, что было сделано выше для высокой корреляции (0.9) и высокой связи (располагающий с интервалами = ) в Rx мы теперь показываем BER по сравнению с результатами ОСШ для низкой корреляции (0.1) и/или слабая связь (располагающий с интервалами = ).
Высоко связываясь (располагающий с интервалами = ), низкая корреляция (0.1)
Слабая связь (располагающий с интервалами = ), высокая корреляция (0.9)
Слабая связь (располагающий с интервалами = ), низкая корреляция (0.1)
Результаты симуляции похожи на тех, о которых сообщают в [1]. Интервал оказывает незначительное влияние на BER и при высоких и при низких условиях корреляции. Для случая с высокой связью, т.е. интервал элемента, результаты показывают, что в зависимости от условий корреляции, BER мог быть или выше или ниже, чем, если связь не была рассмотрена.
Этот пример использует следующие функции помощника:
[1] А. А. Абуда, Х. М. Эль-Сальяби и С. Г. Хэггмен, "Эффект взаимной связи на производительности BER схемы Alamouti", IEEE международный симпозиум по антеннам и распространению, июль 2006.
[2] Я. Дж. Гупта и А. А. Ксиенский, "Эффект взаимной связи на производительности адаптивных массивов", Сделка IEEE на Антеннах и Распространении, издании 31, № 5, стр 785-791, 1989.
[3] И. Ву, Дж. П. Линнарц, Дж. В. М. Бергмэнс и С. Атталла, "Эффекты антенны взаимная связь на производительности систем MIMO", Proc. 29-й симпозиум по теории информации в Бенилюксе, май 2008.