Этот пример показывает, как антенна, взаимной связи влияет на эффективность передачи ортогонального пространственно-временного блочного кода (OSTBC) по каналу с несколькими входами, несколькими выходами (MIMO). Передатчик и приемник имеют два дипольных антенных элементов. BER по сравнению с кривыми ОСШ построены при различной корреляции и связывающихся сценариях. Чтобы запустить этот пример, вам нужен Antenna Toolbox™.
QPSK модулированный Alamouti OSTBC моделируется по квазистатическому частотно-плоскому Релейному каналу [[1]] 2x2. Система работает на частоте 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 модуляции и демодуляции, кодирования и объединения Аламути, канала 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 с соединением и без него. Комбинированная матрица пространственной корреляции назначается в каждом случае. The 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;
Симулируйте модулированный QPSK код Аламути для каждого значения ОСШ с антенной связью и без нее. Один код Аламути моделируется через канал 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)
Эти результаты симуляции аналогичны тем, о которых сообщалось в первой ссылке. Интервал оказывает незначительное влияние на BER как в условиях высокой, так и в условиях низкой корреляции. Для случая с высокой связью, т.е., интервалы между элементами, результатами указывают, что в зависимости от условий корреляции BER может быть либо выше, либо ниже, чем если бы связь не рассматривалась.
В этом примере используются следующие вспомогательные функции:
[1] А. А. Абуда, Х. М. Эль-Саллаби, и С. Г. Хаггман, «Эффект взаимной связи на эффективность BER схемы Аламути», Международный симпозиум IEEE по антеннам и распространению, июль 2006 года.
[2] Гупта, И. и А. Ксиенски. «Эффект взаимного взаимодействия на эффективность адаптивных массивов». Транзакции IEEE по антеннам и распространению 31, № 5 (сентябрь 1983 года): 785-91. https://doi.org/10.1109/TAP.1983.1143128.
[3] Y. Wu, J. P. Linnartz, J. W. M. Bergmans, and S. Attallah, «Effects of Antenna Mutual Coupling on the Performance of MIMO Systems», Proc. 29-й симпозиум по теории информации в Бенилюксе, май 2008.