Этот пример показывает, как взаимная связь антенны влияет на производительность передачи ортогонального пространственно-временного блочного кода (ОСТБК) по каналу с множеством входов и множеством выходов (MIMO). Передатчик и приемник имеют по два дипольных антенных элемента. Кривые BER и SNR строятся в различных сценариях корреляции и связи. Для выполнения этого примера требуется Toolbox™ антенны.
Модулированный Alamouti OSTBC QPSK моделируется по квазистатическому частотно-плоскому релеевскому каналу 2x2 [1]. Система работает на частоте 2,4 ГГц. Моделируемый диапазон SNR составляет от 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;
Моделирование модулированного кода Аламути QPSK для каждого значения SNR с подключением антенны и без него. Один код Аламути моделируется через канал 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 и SNR для низкой корреляции (0,1) и/или низкой связи (интервал = ).
Высокая связь (интервал = ), низкая корреляция (0,1)

Низкая связь (интервал = ), высокая корреляция (0,9)

Низкая связь (шаг = ), низкая корреляция (0.1)

Результаты моделирования аналогичны приведенным в [1]. Интервал оказывает незначительное влияние на BER как в условиях высокой, так и низкой корреляции. Для случая с высокой связью, т.е. интервалом между элементами 0,1λ, результаты показывают, что в зависимости от условий корреляции РВК может быть либо выше, либо ниже, чем если бы связь не рассматривалась.
В этом примере используются следующие вспомогательные функции:
1 - А. А. Абуда, Х. М. Эль-Саллаби и С. Г. Хаггман, «Влияние взаимной связи на эффективность BER схемы Аламути», Международный симпозиум IEEE по антеннам и распространению, июль 2006 года.
2 - И. Дж. Гупта и А. А. Ксиенски, «Влияние взаимной связи на производительность адаптивных массивов», IEEE Trans. on Antennas and Propagation, vol. 31, no. 5, pp. 785-791, 1989.
3 - Ю. Ву, Дж. П. Линнарц, Дж. В. М. Бергманс и С. Атталлах, «Влияние взаимной связи антенн на производительность систем MIMO», Proc. 29-й симпозиум по теории информации в Бенилюксе, май 2008 года.