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

Этот пример показывает системы Нескольких входов нескольких выходов (MIMO), которые используют несколько антенн в концах передатчика и получателя системы радиосвязи. Системы MIMO все больше принимаются в системах связи для потенциальных усилений в способности, которую они понимают при использовании нескольких антенн. Несколько антенн используют пространственную размерность в дополнение ко времени и единицам частоты, не изменяя требования пропускной способности системы.

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

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

PART 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 помогают дальнейшему исследованию для заинтересованных пользователей.

PART 2: пространственно-временное блочное кодирование с оценкой канала

Основываясь на теории ортогональных проектов, Tarokh и др. [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 помогает дальнейшему экспериментированию для заинтересованных пользователей.

PART 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. V. Tarokh, Х. Джэфархэми и А.Р. Колдербэнк, "Пространственно-временные блочные коды из ортогональных проектов", Транзакции IEEE на Теории информации, Издании 45, № 5, июль 1999, стр 1456-1467.

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

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