exponenta event banner

Введение в системы MIMO

В этом примере показаны системы Multiple-Input-Multiple-Output (MIMO), которые используют множество антенн на концах передатчика и приемника системы беспроводной связи. Системы MIMO все чаще применяются в системах связи для потенциального увеличения пропускной способности, которое они реализуют при использовании множества антенн. Множество антенн используют пространственную размерность в дополнение к временной и частотной, без изменения требований к полосе пропускания системы.

Для общего канала связи этот пример фокусируется на разнесении передачи вместо традиционного разнесения приема. Используя канал Рэлея с плоским замиранием, он иллюстрирует концепцию ортогонального пространственно-временного блочного кодирования, которая используется при использовании множества передающих антенн. Здесь предполагается, что канал подвергается независимому замиранию между множеством пар передающая-принимающая антенна.

Для выбранной системы она также обеспечивает меру ухудшения рабочих характеристик, когда канал неверно оценивается в приемнике, по сравнению со случаем идеального знания канала в приемнике.

ЧАСТЬ 1: Разнесение передачи и разнесение приема

Использование разнесенного приема является хорошо известным способом уменьшения последствий замирания по линии связи. Однако он в основном был отведен на конец приемника. В [1] Аламути предлагает схему разнесения передачи, которая предлагает аналогичные усиления разнесения, используя множество антенн в передатчике. Это было задумано как более практичное, так как, например, потребуется только несколько антенн на базовой станции по сравнению с множеством антенн для каждой мобильной станции в сотовой системе связи.

Этот раздел подчеркивает это сравнение разнесения передачи и приема путем моделирования когерентной бинарной фазовой манипуляции (BPSK) модуляции по релеевским каналам с плоским замиранием. Для разнесения передачи мы используем две передающие антенны и одну приемную антенну (2x1 условно), в то время как для разнесения приема мы используем одну передающую антенну и две приемные антенны (1x2 условно).

Моделирование охватывает сквозную систему, показывающую кодированный и/или переданный сигнал, модель канала и прием и демодуляцию принятого сигнала. Он также обеспечивает канал без разнесения (случай одиночной передающей-приемной антенны) и теоретическую производительность канала разнесения второго порядка для сравнения. Здесь предполагается, что канал хорошо известен в приемнике для всех систем. Мы выполняем моделирование по диапазону точек Eb/No для генерации результатов BER, которые позволяют сравнивать различные системы.

Начнем с определения некоторых общих параметров моделирования.

frmLen = 100;       % frame length
numPackets = 1000;  % number of packets
EbNo = 0:2:20;      % Eb/No varying to 20 dB
N = 2;              % maximum number of Tx antennas
M = 2;              % maximum number of Rx antennas

и настройте моделирование.

% Create comm.BPSKModulator and comm.BPSKDemodulator System objects(TM)
P = 2;				% modulation order
bpskMod = comm.BPSKModulator;
bpskDemod = comm.BPSKDemodulator('OutputDataType','double');

% Create comm.OSTBCEncoder and comm.OSTBCCombiner System objects
ostbcEnc = comm.OSTBCEncoder;
ostbcComb = comm.OSTBCCombiner;

% Create two comm.AWGNChannel System objects for one and two receive
% antennas respectively. Set the NoiseMethod property of the channel to
% 'Signal to noise ratio (Eb/No)' to specify the noise level using the
% energy per bit to noise power spectral density ratio (Eb/No). The output
% of the BPSK modulator generates unit power signals; set the SignalPower
% property to 1 Watt.
awgn1Rx = comm.AWGNChannel(...
    'NoiseMethod', 'Signal to noise ratio (Eb/No)', ...
    'SignalPower', 1);
awgn2Rx = clone(awgn1Rx);

% Create comm.ErrorRate calculator System objects to evaluate BER.
errorCalc1 = comm.ErrorRate;
errorCalc2 = comm.ErrorRate;
errorCalc3 = comm.ErrorRate;

% Since the comm.AWGNChannel System objects as well as the RANDI function
% use the default random stream, the following commands are executed so
% that the results will be repeatable, i.e., same results will be obtained
% for every run of the example. The default stream will be restored at the
% end of the example.
s = rng(55408);

% Pre-allocate variables for speed
H = zeros(frmLen, N, M);
ber_noDiver  = zeros(3,length(EbNo));
ber_Alamouti = zeros(3,length(EbNo));
ber_MaxRatio = zeros(3,length(EbNo));
ber_thy2     = zeros(1,length(EbNo));
% Set up a figure for visualizing BER results
fig = figure;
grid on;
ax = fig.CurrentAxes;
hold(ax,'on');

ax.YScale = 'log';
xlim(ax,[EbNo(1), EbNo(end)]);
ylim(ax,[1e-4 1]);
xlabel(ax,'Eb/No (dB)');
ylabel(ax,'BER');
fig.NumberTitle = 'off';
fig.Renderer = 'zbuffer';
fig.Name = 'Transmit vs. Receive Diversity';
title(ax,'Transmit vs. Receive Diversity');
set(fig, 'DefaultLegendAutoUpdate', 'off');
fig.Position = figposition([15 50 25 30]);

% Loop over several EbNo points
for idx = 1:length(EbNo)
    reset(errorCalc1);
    reset(errorCalc2);
    reset(errorCalc3);
    % Set the EbNo property of the AWGNChannel System objects
    awgn1Rx.EbNo = EbNo(idx);
    awgn2Rx.EbNo = EbNo(idx);
    % Loop over the number of packets
    for packetIdx = 1:numPackets
        % Generate data vector per frame
        data = randi([0 P-1], frmLen, 1);

        % Modulate data
        modData = bpskMod(data);

        % Alamouti Space-Time Block Encoder
        encData = ostbcEnc(modData);

        % Create the Rayleigh distributed channel response matrix
        %   for two transmit and two receive antennas
        H(1:N:end, :, :) = (randn(frmLen/2, N, M) + ...
                         1i*randn(frmLen/2, N, M))/sqrt(2);
        %   assume held constant for 2 symbol periods
        H(2:N:end, :, :) = H(1:N:end, :, :);

        % Extract part of H to represent the 1x1, 2x1 and 1x2 channels
        H11 = H(:,1,1);
        H21 = H(:,:,1)/sqrt(2);
        H12 = squeeze(H(:,1,:));

        % Pass through the channels
        chanOut11 = H11 .* modData;
        chanOut21 = sum(H21.* encData, 2);
        chanOut12 = H12 .* repmat(modData, 1, 2);

        % Add AWGN
        rxSig11 = awgn1Rx(chanOut11);
        rxSig21 = awgn1Rx(chanOut21);
        rxSig12 = awgn2Rx(chanOut12);

        % Alamouti Space-Time Block Combiner
        decData = ostbcComb(rxSig21, H21);

        % ML Detector (minimum Euclidean distance)
        demod11 = bpskDemod(rxSig11.*conj(H11));
        demod21 = bpskDemod(decData);
        demod12 = bpskDemod(sum(rxSig12.*conj(H12), 2));

        % Calculate and update BER for current EbNo value
        %   for uncoded 1x1 system
        ber_noDiver(:,idx)  = errorCalc1(data, demod11);
        %   for Alamouti coded 2x1 system
        ber_Alamouti(:,idx) = errorCalc2(data, demod21);
        %   for Maximal-ratio combined 1x2 system
        ber_MaxRatio(:,idx) = errorCalc3(data, demod12);

    end % end of FOR loop for numPackets

    % Calculate theoretical second-order diversity BER for current EbNo
    ber_thy2(idx) = berfading(EbNo(idx), 'psk', 2, 2);

    % Plot results
    semilogy(ax,EbNo(1:idx), ber_noDiver(1,1:idx), 'r*', ...
             EbNo(1:idx), ber_Alamouti(1,1:idx), 'go', ...
             EbNo(1:idx), ber_MaxRatio(1,1:idx), 'bs', ...
             EbNo(1:idx), ber_thy2(1:idx), 'm');
    legend(ax,'No Diversity (1Tx, 1Rx)', 'Alamouti (2Tx, 1Rx)',...
           'Maximal-Ratio Combining (1Tx, 2Rx)', ...
           'Theoretical 2nd-Order Diversity');

    drawnow;
end  % end of for loop for EbNo

% Perform curve fitting and replot the results
fitBER11 = berfit(EbNo, ber_noDiver(1,:));
fitBER21 = berfit(EbNo, ber_Alamouti(1,:));
fitBER12 = berfit(EbNo, ber_MaxRatio(1,:));
semilogy(ax,EbNo, fitBER11, 'r', EbNo, fitBER21, 'g', EbNo, fitBER12, 'b');
hold(ax,'off');

% Restore default stream
rng(s);

Система разнесения передачи имеет сложность вычислений, очень аналогичную сложности системы разнесения приема.

Полученные результаты моделирования показывают, что использование двух передающих антенн и одной приемной антенны обеспечивает тот же порядок разнесения, что и комбинированная система максимального отношения (MRC) одной передающей антенны и двух приемных антенн.

Также следует отметить, что разнесение передачи имеет недостаток 3 дБ по сравнению с разнесением приема MRC. Это потому, что мы смоделировали общую передаваемую мощность, чтобы она была одинаковой в обоих случаях. Если мы откалибруем передаваемую мощность так, чтобы принимаемая мощность для этих двух случаев была одинаковой, то производительность будет одинаковой. Теоретическая производительность канала разнесения второго порядка соответствует системе разнесения передачи, когда она нормализует общую мощность по всем ветвям разнесения.

Сопровождающие функциональные сценарии, mrc1m.m и ostbc2m.m способствуют дальнейшему изучению для заинтересованных пользователей.

ЧАСТЬ 2: Пространственно-временное блочное кодирование с оценкой канала

Опираясь на теорию ортогональных конструкций, Тарох и др. [2] обобщенная схема разнесения передачи Аламути на произвольное количество передающих антенн, приводящая к концепции пространственно-временных блочных кодов. Для комплексных созвездий сигналов они показали, что схема Аламути является единственной полноскоростной схемой для двух передающих антенн.

В этом разделе мы изучаем производительность такой схемы с двумя приемными антеннами (т.е. системой 2х2) с оценкой канала и без нее. В реалистическом сценарии, когда информация о состоянии канала не известна в приемнике, она должна быть извлечена из принятого сигнала. Предполагается, что блок оценки канала выполняет это с использованием ортогональных пилот-сигналов, которые предшествуют каждому пакету [3]. Предполагается, что канал остается неизменным для длины пакета (т.е. он подвергается медленному замиранию).

Здесь используется моделирование, аналогичное тому, которое описано в предыдущем разделе, которое приводит к оценке эффективности BER для системы с пространственно-временным блочным кодированием с использованием двух передающих и двух приемных антенн.

Снова начнем с определения общих параметров моделирования.

frmLen = 100;           % frame length
maxNumErrs = 300;       % maximum number of errors
maxNumPackets = 3000;   % maximum number of packets
EbNo = 0:2:12;          % Eb/No varying to 12 dB
N = 2;                  % number of Tx antennas
M = 2;                  % number of Rx antennas
pLen = 8;               % number of pilot symbols per frame
W = hadamard(pLen);
pilots = W(:, 1:N);     % orthogonal set per transmit antenna

и настройте моделирование.

% Create a comm.MIMOChannel System object to simulate the 2x2 spatially
% independent flat-fading Rayleigh channel
chan = comm.MIMOChannel( ...
    'MaximumDopplerShift', 0, ...
    'SpatialCorrelationSpecification', 'None', ...
    'NumTransmitAntennas', N, ...
    'NumReceiveAntennas', M, ...
    'PathGainsOutputPort', true);

% Change the NumReceiveAntennas property value of the hAlamoutiDec System
% object to M that is 2
release(ostbcComb);
ostbcComb.NumReceiveAntennas = M;

% Release the hAWGN2Rx System object
release(awgn2Rx);

% Set the global random stream for repeatability
s = rng(55408);

% Pre-allocate variables for speed
HEst = zeros(frmLen, N, M);
ber_Estimate = zeros(3,length(EbNo));
ber_Known    = zeros(3,length(EbNo));
% Set up a figure for visualizing BER results
fig = figure;
grid on;
ax = fig.CurrentAxes;
hold(ax,'on');

ax.YScale = 'log';
xlim(ax,[EbNo(1), EbNo(end)]);
ylim(ax,[1e-4 1]);
xlabel(ax,'Eb/No (dB)');
ylabel(ax,'BER');
fig.NumberTitle = 'off';
fig.Name = 'Orthogonal Space-Time Block Coding';
fig.Renderer = 'zbuffer';
title(ax,'Alamouti-coded 2x2 System');
set(fig,'DefaultLegendAutoUpdate','off');
fig.Position = figposition([41 50 25 30]);

% Loop over several EbNo points
for idx = 1:length(EbNo)
    reset(errorCalc1);
    reset(errorCalc2);
    awgn2Rx.EbNo = EbNo(idx);

    % Loop till the number of errors exceed 'maxNumErrs'
    % or the maximum number of packets have been simulated
    while (ber_Estimate(2,idx) < maxNumErrs) && ...
          (ber_Known(2,idx) < maxNumErrs) && ...
          (ber_Estimate(3,idx)/frmLen < maxNumPackets)
        % Generate data vector per frame
        data = randi([0 P-1], frmLen, 1);

        % Modulate data
        modData = bpskMod(data);

        % Alamouti Space-Time Block Encoder
        encData = ostbcEnc(modData);

        % Prepend pilot symbols for each frame
        txSig = [pilots; encData];

        % Pass through the 2x2 channel
        reset(chan);
        [chanOut, H] = chan(txSig);

        % Add AWGN
        rxSig = awgn2Rx(chanOut);

        % Channel Estimation
        %   For each link => N*M estimates
        HEst(1,:,:) = pilots(:,:).' * rxSig(1:pLen, :) / pLen;
        %   assume held constant for the whole frame
        HEst = HEst(ones(frmLen, 1), :, :);

        % Combiner using estimated channel
        decDataEst = ostbcComb(rxSig(pLen+1:end,:), HEst);

        % Combiner using known channel
        decDataKnown = ostbcComb(rxSig(pLen+1:end,:), ...
                            squeeze(H(pLen+1:end,:,:,:)));

        % ML Detector (minimum Euclidean distance)
        demodEst   = bpskDemod(decDataEst);      % estimated
        demodKnown = bpskDemod(decDataKnown);    % known

        % Calculate and update BER for current EbNo value
        %   for estimated channel
        ber_Estimate(:,idx) = errorCalc1(data, demodEst);
        %   for known channel
        ber_Known(:,idx)    = errorCalc2(data, demodKnown);

    end % end of FOR loop for numPackets

    % Plot results
    semilogy(ax,EbNo(1:idx), ber_Estimate(1,1:idx), 'ro');
    semilogy(ax,EbNo(1:idx), ber_Known(1,1:idx), 'g*');
    legend(ax,['Channel estimated with ' num2str(pLen) ' pilot symbols/frame'],...
           'Known channel');
    drawnow;
end  % end of for loop for EbNo

% Perform curve fitting and replot the results
fitBEREst   = berfit(EbNo, ber_Estimate(1,:));
fitBERKnown = berfit(EbNo, ber_Known(1,:));
semilogy(ax,EbNo, fitBEREst, 'r', EbNo, fitBERKnown, 'g');
hold(ax,'off');

% Restore default stream
rng(s)

Для моделируемой системы 2x2 порядок разнесения отличается от порядка разнесения для систем 1x2 или 2x1 в предыдущем разделе.

Следует отметить, что при наличии 8 символов пилот-сигнала для каждых 100 символов данных оценка канала вызывает ухудшение рабочих характеристик приблизительно на 1 дБ для выбранного диапазона Eb/No. Это улучшается с увеличением количества пилот-символов на кадр, но увеличивает служебные данные линии связи. В этом сравнении мы сохраняем передаваемое SNR на символ одинаковым в обоих случаях.

Сопровождающий функциональный сценарий, ostbc2m_e.m помогает в дальнейших экспериментах для заинтересованных пользователей.

ЧАСТЬ 3: Ортогональное пространственно-временное блочное кодирование и дальнейшие исследования

В этом заключительном разделе представлены некоторые результаты производительности для ортогонального пространственно-временного блочного кодирования с использованием четырех передающих антенн (система 4x1) с использованием кода с половинной скоростью, G4, согласно [4].

Мы ожидаем, что система предложит порядок разнесения 4 и сравним его с системами 1x4 и 2x2, которые также имеют такой же порядок разнесения. Чтобы обеспечить справедливое сравнение, мы используем четвертичную PSK с полускоростным кодом G4 для достижения той же скорости передачи 1 бит/сек/Гц.

Эти результаты требуют некоторого времени для генерации на одном ядре. Если вы не установили Toolbox™ параллельных вычислений (PCT), мы загрузим результаты предыдущего моделирования. Включен функциональный сценарий ostbc4m.m, который наряду с mrc1m.m и ostbc2m.m использовался для генерации этих результатов. При установке РСТ эти имитации выполняются параллельно. В этом случае используются функциональные сценарии ostbc4m_pct.m, mrc1m_pct.m и ostbc2m_pct.m. Пользователю настоятельно рекомендуется использовать эти сценарии в качестве отправной точки для изучения других кодов и систем.

[licensePCT,~] = license( 'checkout' , 'Distrib_Computing_Toolbox');
if (licensePCT && ~isempty(ver('parallel')))
    EbNo = 0:2:20;
    [ber11, ber14, ber22, ber41] = mimoOSTBCWithPCT(100,4e3,EbNo);
else
    load ostbcRes.mat;
end

% Set up a figure for visualizing BER results
fig = figure;
grid on;
ax = fig.CurrentAxes;
hold(ax,'on');
fig.Renderer  = 'zbuffer';
ax.YScale = 'log';
xlim(ax,[EbNo(1), EbNo(end)]);
ylim(ax,[1e-5 1]);
xlabel(ax,'Eb/No (dB)');
ylabel(ax,'BER');
fig.NumberTitle = 'off';
fig.Name = 'Orthogonal Space-Time Block Coding(2)';
title(ax,'G4-coded 4x1 System and Other Comparisons');
set(fig,'DefaultLegendAutoUpdate','off');
fig.Position = figposition([30 15 25 30]);

% Theoretical performance of fourth-order diversity for QPSK
BERthy4 = berfading(EbNo, 'psk', 4, 4);

% Plot results
semilogy(ax,EbNo, ber11, 'r*', EbNo, ber41, 'ms', EbNo, ber22, 'c^', ...
         EbNo, ber14, 'ko', EbNo, BERthy4, 'g');
legend(ax,'No Diversity (1Tx, 1Rx), BPSK', 'OSTBC (4Tx, 1Rx), QPSK', ...
       'Alamouti (2Tx, 2Rx), BPSK', 'Maximal-Ratio Combining (1Tx, 4Rx), BPSK', ...
       'Theoretical 4th-Order Diversity, QPSK');

% Perform curve fitting
fitBER11 = berfit(EbNo, ber11);
fitBER41 = berfit(EbNo(1:9), ber41(1:9));
fitBER22 = berfit(EbNo(1:8), ber22(1:8));
fitBER14 = berfit(EbNo(1:7), ber14(1:7));
semilogy(ax,EbNo, fitBER11, 'r', EbNo(1:9), fitBER41, 'm', ...
         EbNo(1:8), fitBER22, 'c', EbNo(1:7), fitBER14, 'k');
hold(ax,'off');
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

Как и ожидалось, аналогичные наклоны кривых BER для систем 4x1, 2x2 и 1x4 указывают на идентичный порядок разнесения для каждой системы.

Также обратите внимание на штраф в 3 дБ для системы 4x1, который можно отнести к одному и тому же предположению общей передаваемой мощности, сделанному для каждой из трех систем. Если мы откалибруем передаваемую мощность так, чтобы принимаемая мощность для каждой из этих систем была одинаковой, то три системы будут работать одинаково. Опять же, теоретическая производительность соответствует производительности моделирования системы 4x1, когда общая мощность нормализуется по ветвям разнесения.

Приложение

В этом примере используются следующие вспомогательные функции:

Ссылки

  1. С. М. Аламути, «Простой метод разнесения передачи для беспроводной связи», IEEE ® Journal on Selected Areas in Communications, Vol. 16, No. 8, Oct. 1998, pp. 1451-1458.

  2. В. Тарох, Х. Джафархами и А. Р. Калдербанк, «Пространственно-временные блочные коды из ортогональных конструкций», IEEE Transactions on Information Theory, Vol. 45, No. 5, Jul. 1999, pp. 1456-1467.

  3. А. Ф. Нагиб, В. Тарох, Н. Шешадри и А. Р. Кальдербанк, «Пространственно-временные коды для высокоскоростной беспроводной связи: анализ несоответствия», Труды IEEE International Conf. on Communications, стр. 309-313, июнь 1997.

  4. В. Тарох, Х. Джафархами и А. Р. Калдербанк, «Пространственно-временные блочные коды для беспроводной связи: результаты производительности», IEEE Journal on Selected Areas in Communications, Vol. 17, No. 3, Mar. 1999, pp. 451-460.