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

Этот пример показывает системы Multiple Входа Выхода (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: Пространственно-временное блочное кодирование с оценкой канала

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

В этом разделе мы изучаем эффективность такой схемы с двумя приемными антеннами (то есть системой 2x2) с оценкой канала и без нее. В реалистичном сценарии, когда информация о состоянии канала не известна в приемнике, это должно быть извлечено из принятого сигнала. Мы принимаем, что блок оценки канала выполняет это, используя ортогональные пилот-сигналы, которые подготовлены к каждому пакету [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. Это улучшается с увеличением количества пилотных символов на систему координат, но добавляет к служебной информации ссылки. В этом сравнении мы сохраняем переданное ОСШ на символ одинаковым в обоих случаях.

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

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

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

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

Эти результаты занимают некоторое время, чтобы сгенерироваться на одном ядре. Если у вас нет установленного Parallel Computing Toolbox™ (PCT), мы загружаем результаты предыдущей симуляции. Включен функциональный скрипт ostbc4m.m, который наряду с mrc1m.m и ostbc2m.m использовался для генерации этих результатов. Если PCT установлен, эти симуляции выполняются параллельно. В этом случае используются функциональные скрипты 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 ® о выбранных областях в коммуникациях, том 16, № 8, октябрь 1998, стр. 1451-1458.

  2. В. Тарох, Х. Джафархами, и А. Р. Калдербанк, «Пространственно-временные блочные коды из ортогональных проектов», Транзакции IEEE по теории информации, том 45, № 5, июль 1999, стр. 1456-1467.

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

  4. В. Тарох, Х. Джафархами, и А. Р. Калдербанк, «Пространственно-временные блочные коды для беспроводной связи: Результаты эффективности», Журнал IEEE по отдельным областям в коммуникациях, том 17, № 3, Мар. 1999, стр. 451-460.