exponenta event banner

Пространственное мультиплексирование

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

Пространственное мультиплексирование требует мощных методов декодирования в приемнике. Из множества предложенных [1] этот пример выделяет две упорядоченные схемы обнаружения последовательного подавления помех (SIC). Эти схемы аналогичны оригинальным методикам Bell Labs Layered Space-Time (BLAST) согласно [2], [3].

Для наглядных преимуществ в примере используется базовая система 2x2 MIMO, использующая две передающие и две приемные антенны. Для некодированной QPSK-модулированной системы используется плоское релеевское замирание по независимым линиям передачи-приема. На конце приемника мы предполагаем совершенное знание канала без обратной связи с передатчиком, то есть систему пространственного мультиплексирования с разомкнутым контуром.

В примере показаны два метода подавления нелинейных помех - Zero-Forcing (ZF) и Minimum-Mean-Square-Error (MMSE) - с подавлением символов и сравнивается их производительность с оптимальным приемником максимального правдоподобия (ML).

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

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

N = 2;                  % Number of transmit antennas
M = 2;                  % Number of receive antennas
EbNoVec = 2:3:8;        % Eb/No in dB
modOrd = 2;             % constellation size = 2^modOrd

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

% Create a local random stream to be used by random number generators for
% repeatability.
stream = RandStream('mt19937ar');

% Create PSK modulator and demodulator System objects
pskModulator   = comm.PSKModulator(...
            'ModulationOrder',  2^modOrd, ...
            'PhaseOffset',      0, ...
            'BitInput',         true);
pskDemodulator = comm.PSKDemodulator( ...
            'ModulationOrder',  2^modOrd, ...
            'PhaseOffset',      0, ...
            'BitOutput',        true);

% Create error rate calculation System objects for 3 different receivers
zfBERCalc = comm.ErrorRate;
mmseBERCalc = comm.ErrorRate;
mlBERCalc = comm.ErrorRate;

% Get all bit and symbol combinations for ML receiver
allBits = de2bi(0:2^(modOrd*N)-1, 'left-msb')';
allTxSig = reshape(pskModulator(allBits(:)), N, 2^(modOrd*N));

% Pre-allocate variables to store BER results for speed
[BER_ZF, BER_MMSE, BER_ML] = deal(zeros(length(EbNoVec), 3));

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

% Set up a figure for visualizing BER results
fig = figure;
grid on;
hold on;
ax = fig.CurrentAxes;
ax.YScale = 'log';
xlim([EbNoVec(1)-0.01 EbNoVec(end)]);
ylim([1e-3 1]);
xlabel('Eb/No (dB)');
ylabel('BER');
fig.NumberTitle = 'off';
fig.Renderer = 'zbuffer';
fig.Name = 'Spatial Multiplexing';
title('2x2 Uncoded QPSK System');
set(fig,'DefaultLegendAutoUpdate','off');

% Loop over selected EbNo points
for idx = 1:length(EbNoVec)
    % Reset error rate calculation System objects
    reset(zfBERCalc);
    reset(mmseBERCalc);
    reset(mlBERCalc);

    % Calculate SNR from EbNo for each independent transmission link
    snrIndB = EbNoVec(idx) + 10*log10(modOrd);
    snrLinear = 10^(0.1*snrIndB);

    while (BER_ZF(idx, 3) < 1e5) && ((BER_MMSE(idx, 2) < 100) || ...
          (BER_ZF(idx, 2) < 100) ||  (BER_ML(idx, 2)   < 100))
        % Create random bit vector to modulate
        msg = randi(stream, [0 1], [N*modOrd, 1]);

        % Modulate data
        txSig = pskModulator(msg);

        % Flat Rayleigh fading channel with independent links
        rayleighChan = (randn(stream, M, N) +  1i*randn(stream, M, N))/sqrt(2);

        % Add noise to faded data
        rxSig = awgn(rayleighChan*txSig, snrIndB, 0, stream);

        % ZF-SIC receiver
        r = rxSig;
        H = rayleighChan; % Assume perfect channel estimation
        % Initialization
        estZF = zeros(N*modOrd, 1);
        orderVec = 1:N;
        k = N+1;
        % Start ZF nulling loop
        for n = 1:N
            % Shrink H to remove the effect of the last decoded symbol
            H = H(:, [1:k-1,k+1:end]);
            % Shrink order vector correspondingly
            orderVec = orderVec(1, [1:k-1,k+1:end]);
            % Select the next symbol to be decoded
            G = (H'*H) \ eye(N-n+1); % Same as inv(H'*H), but faster
            [~, k] = min(diag(G));
            symNum = orderVec(k);

            % Hard decode the selected symbol
            decBits = pskDemodulator(G(k,:) * H' * r);
            estZF(modOrd * (symNum-1) + (1:modOrd)) = decBits;

            % Subtract the effect of the last decoded symbol from r
            if n < N
                r = r - H(:, k) * pskModulator(decBits);
            end
        end

        % MMSE-SIC receiver
        r = rxSig;
        H = rayleighChan;
        % Initialization
        estMMSE = zeros(N*modOrd, 1);
        orderVec = 1:N;
        k = N+1;
        % Start MMSE nulling loop
        for n = 1:N
            H = H(:, [1:k-1,k+1:end]);
            orderVec = orderVec(1, [1:k-1,k+1:end]);
            % Order algorithm (matrix G calculation) is the only difference
            % with the ZF-SIC receiver
            G = (H'*H + ((N-n+1)/snrLinear)*eye(N-n+1)) \ eye(N-n+1);
            [~, k] = min(diag(G));
            symNum = orderVec(k);

            decBits = pskDemodulator(G(k,:) * H' * r);
            estMMSE(modOrd * (symNum-1) + (1:modOrd)) = decBits;

            if n < N
                r = r - H(:, k) * pskModulator(decBits);
            end
        end

        % ML receiver
        r = rxSig;
        H = rayleighChan;
        [~, k] = min(sum(abs(repmat(r,[1,2^(modOrd*N)]) - H*allTxSig).^2));
        estML = allBits(:,k);

        % Update BER
        BER_ZF(  idx, :) = zfBERCalc(msg, estZF);
        BER_MMSE(idx, :) = mmseBERCalc(msg, estMMSE);
        BER_ML(  idx, :) = mlBERCalc(msg, estML);
    end

    % Plot results
    semilogy(EbNoVec(1:idx), BER_ZF(  1:idx, 1), 'r*', ...
             EbNoVec(1:idx), BER_MMSE(1:idx, 1), 'bo', ...
             EbNoVec(1:idx), BER_ML(  1:idx, 1), 'gs');
    legend('ZF-SIC', 'MMSE-SIC', 'ML');
    drawnow;
end

% Draw the lines
semilogy(EbNoVec, BER_ZF(  :, 1), 'r-', ...
         EbNoVec, BER_MMSE(:, 1), 'b-', ...
         EbNoVec, BER_ML(  :, 1), 'g-');
hold off;

Мы видим, что приемник ML является лучшим по производительности, за которым следуют приемники MMSE-SIC и ZF-SIC, как также показано в [4]. С точки зрения сложности приемника ML растет экспоненциально с числом передающих антенн, в то время как ZF-SIC и MMSE-SIC являются линейными приемниками, объединенными с последовательным подавлением помех. Оптимизированные алгоритмы ZF-SIC и MMSE-SIC для снижения сложности представлены в [5].

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

openfig('spatMuxResults.fig');

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

Выбранные привязки

  1. Джордж Цулос, ред., «Системная технология MIMO для беспроводной связи», CRC Press, Boca Raton, FL, 2006.

  2. G. J. Foschini, «Многоуровневая пространственно-временная архитектура для беспроводной связи в затухающей среде при использовании нескольких антенн», The Bell Sys. Tech. Journal, 1996, № 1, стр. 41-59.

  3. П. В. Вольнянский, Г. Дж. Фоскини, Г. Д. Голден, Р. А. Валенсуэла, «V-BLAST: Архитектура для реализации очень высоких скоростей передачи данных по богатому беспроводному каналу рассеяния», Международный симпозиум URSI по сигналам, системам и электронике 1998 года, 29 Sep.-2 октябрь 1998 года, стр. 295-300

  4. X. Li, H.C. Huang, A.Lozano, G.J. Foschini, «Алгоритмы обнаружения пониженной сложности для систем, использующих многоэлементные массивы», IEEE ® Global Telecommunications Conference, 2000. Том 2, 27 Nov.-1 декабрь 2000 г., стр. 1072-76.

  5. Я. Шанг и X.-Г. Xia, «О быстрых рекурсивных алгоритмах для V-BLAST с оптимальным упорядоченным обнаружением SIC», IEEE Trans. Wireless Communications, том 8, № 6, стр. 2860-2865, июнь 2009.