exponenta event banner

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

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

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

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

Пример показывает два нелинейных интерференционных метода отмены - Принуждение нуля (ZF) и Минимальную среднеквадратичную погрешность (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 = int2bit(0:2^(modOrd*N)-1, modOrd*N);
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, Бока-Ратон, FL, 2006.

  2. Г. Й. Фоскини, "Разделенная на уровни пространственно-временная архитектура для радиосвязи в исчезающей среде при использовании нескольких антенн", Белл Сис. Технология. Журналируйте, 1996, № 1, стр 41-59.

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

  4. X. Литий, Х. Ц. Хуан, А. Лозано, Г. Й. Фоскини, "Алгоритмы обнаружения Уменьшаемой сложности для систем с помощью многоэлементных массивов", Конференция IEEE® Global Telecommunications, 2000. Объем 2, 27 ноября 1 декабря 2000, стр 1072-76.

  5. И. Шан и Кс.-Г. Ся, "На быстрых рекурсивных алгоритмах для V-BLAST с оптимальным упорядоченным обнаружением SIC", Сделка IEEE. Радиосвязи, издание 8, № 6, стр 2860-2865, июнь 2009.