Передача OSTBC со связью антенны

В этом примере показано, как антенна, взаимная связь влияет на производительность передачи ортогонального пространственно-временного блочного кода (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';

Моделирование канала MIMO

Создайте два 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) и высокой связи (располагающий с интервалами = 0.1λ) в Rx мы теперь показываем BER по сравнению с результатами ОСШ для низкой корреляции (0.1) и/или слабая связь (располагающий с интервалами = 0.5λ).

  • Высоко связываясь (располагающий с интервалами = 0.1λ), низкая корреляция (0.1)

  • Слабая связь (располагающий с интервалами = 0.5λ), высокая корреляция (0.9)

  • Слабая связь (располагающий с интервалами = 0.5λ), низкая корреляция (0.1)

Заключение

Результаты симуляции похожи на тех, о которых сообщают в [1]. Интервал 0.5λ оказывает незначительное влияние на BER и при высоких и при низких условиях корреляции. Для случая с высокой связью, т.е. 0.1λ интервал элемента, результаты показывают, что в зависимости от условий корреляции, BER мог быть или выше или ниже, чем, если связь не была рассмотрена.

Приложение

Этот пример использует следующие функции помощника:

Ссылки

[1] А. А. Абуда, Х. М. Эль-Сальяби и С. Г. Хэггмен, "Эффект взаимной связи на производительности BER схемы Alamouti", IEEE международный симпозиум по антеннам и распространению, июль 2006.

[2] Я. Дж. Гупта и А. А. Ксиенский, "Эффект взаимной связи на производительности адаптивных массивов", Сделка IEEE на Антеннах и Распространении, издании 31, № 5, стр 785-791, 1989.

[3] И. Ву, Дж. П. Линнарц, Дж. В. М. Бергмэнс и С. Атталла, "Эффекты антенны взаимная связь на производительности систем MIMO", Proc. 29-й симпозиум по теории информации в Бенилюксе, май 2008.

Для просмотра документации необходимо авторизоваться на сайте