Конкатенированный OSTBC с TCM

Этот пример показывает ортогональный пространственно-временной блочный код (OSTBC), конкатенированный с решетчатой модуляцией (TCM) для передачи информации по каналу с несколькими входами и несколькими выходами (MIMO) с 2 передающими антеннами и 1 приемной антенной. Пример использует Коммуникационная Система objects™, чтобы симулировать эту систему.

Введение

OSTBC [1], [2] являются привлекательным методом для беспроводной связи MIMO. Они используют полный порядок пространственного разнесения и пользуются символьным декодированием с максимальной вероятностью (ML). Однако они не предлагают никакого усиления кодирования. Объединитель для OSTBC на стороне приемника предоставляет мягкую информацию переданных символов, которая может использоваться для декодирования или демодуляции внешнего кода.

TCM [3] является эффективной схемой полосы пропускания, которая интегрирует кодирование и модуляцию, чтобы обеспечить большой коэффициент усиления кодирования. Сцепление TCM с внутренним кодом обычно обеспечивает улучшенную производительность.

Этот пример иллюстрирует преимущества схем конкатенации OSTBC и TCM: коэффициент усиления пространственного разнесения, предлагаемый OSTBC, и коэффициент усиления кодирования, предлагаемый TCM. Для сравнения также предусмотрены две справочные системы, содержащие только TCM или OSTBC. Разнесение и усиления кодирования схемы конкатенации по образцам модели могут быть четко наблюдены из результатов симуляции. Больше дискуссий о конкатенировании OSTBC и TCM можно найти, например, в [4], [5] и их ссылках.

Скрипт configureTCMOSTBCDemo.m создает системные объекты, используемые для симуляции конкатенированной системы OSTBC. Это также инициализирует некоторые параметры симуляции.

% Trellis structure of the TCM modulator
trellis = poly2trellis([2, 3], [1, 2, 0; 4, 1, 2]);

% Create System objects of the concatenated OSTBC system and set simulation
% parameters such as SNR and frame length.
configureTCMOSTBCDemo

PSK TCM модулятор и демодулятор

Модулятор Системного объекта PSK TCM модулирует данные случайных сообщений в созвездие PSK, которое имеет модуль среднего значения энергию. Свойство TrellisStructure принимает структуру MATLAB ®, чтобы задать решетку TCM. Свойство ModulationOrder задает размер созвездия PSK. Этот пример использует схему Ungerboeck TCM для 8-PSK созвездия с 8 состояниями шпалеры [3] и устанавливает соответствующее свойство TrellisStructure на результат poly2trellis ([2 3], [1 2 0; 4 1 2]). Этот объект имеет выход длину 50, так как каждые два входа бита производят один символ.

Системный объект использует алгоритм Viterbi для TCM, чтобы декодировать сигналы от объединителя OSTBC. Пример устанавливает свойство TerminationMethod на 'Усеченный'; поэтому обрабатывает каждую систему координат независимо. Пример также устанавливает свойство TracebackDepth равным 30, что по сравнению с длиной ограничения TCM достаточно долго, чтобы гарантировать эффективность без потерь.

psktcmMod = comm.PSKTCMModulator(trellis, ...
                'TerminationMethod', 'Truncated');
psktcmDemod = comm.PSKTCMDemodulator(trellis, ...
                'TerminationMethod', 'Truncated', ...
                'TracebackDepth', 30, ...
                'OutputDataType', 'logical');

Ортогональные пространственно-временные блочные коды (OSTBC)

Системный объект кодирует информационные символы от TCM Encoder с помощью кода Аламути [1] для 2 передающих антенн. Выходом этого объекта является матрица 50x2, где значения на каждом столбце соответствуют данным, переданным с одной антенны.

Системный объект объединителя OSTBC использует одну антенну и декодирует принятый сигнал, используя информацию о состоянии канала (CSI). Выходы способа шага этого объекта представляют оценки переданных символов, которые затем подаются в демодулятор PSK TCM. В этом примере CSI принимается прекрасно известным на стороне приемника.

ostbcEnc = comm.OSTBCEncoder;
ostbcComb = comm.OSTBCCombiner;

Канал 2x1 MIMO с замираниями

MIMO-канал Системного объекта с замираниями 2x1 моделирует пространственно независимый плоский Канал с релеевским замиранием от 2 передающих антенн к 1 приемной антенне.

Пример устанавливает свойство maximumDopplerShift объекта канала в 30. Причина использования этого значения состоит в том, чтобы заставить канал MIMO вести себя как квазистатический канал с замираниями, т.е. он остается постоянным во время передачи одной системы координат и изменяется вдоль нескольких систем координат. Пример устанавливает свойство PathGainsOutputPort на true, чтобы использовать значения усиления пути канала в качестве совершенных оценок CSI. Пример также устанавливает свойство RandomStream на 'mt19937ar с seed', так что объект использует автономный генератор случайных чисел, чтобы сгенерировать повторяемые коэффициенты канала. Канал 2x1 MIMO имеет нормализованные усиления пути.

mimoChan = comm.MIMOChannel(...
                'SampleRate', 1/Tsamp, ...
                'MaximumDopplerShift', maxDopp, ...
                'SpatialCorrelationSpecification', 'None', ...
                'NumReceiveAntennas', 1, ...
                'RandomStream', 'mt19937ar with seed', ...
                'PathGainsOutputPort', true);

Конкатенированный OSTBC с TCM

Этот раздел кода вызывает цикл обработки для конкатенированной системы OSTBC. Основной цикл обрабатывает кадр за кадром данных, где передатчик модулирует случайные данные с помощью 8-PSK модулятора TCM и затем применяет кодирование Аламути. Два переданных сигнала от энкодера OSTBC проходят через канал Релея 2x1 MIMO и также нарушены AWGN. Объединитель OSTBC использует одну приемную антенну и обеспечивает мягкие входы к 8-PSK демодулятору TCM. Пример сравнивает выход демодулятора с сгенерированными случайными данными для получения частоты ошибки системы координат (FER).

Обработка потока

fer = zeros(3,1);
while (fer(3) < maxNumFrms) && (fer(2) < maxNumErrs)
  data      = logical(randi([0 1], frameLen, 1)); % Generate data
  modData   = psktcmMod(data);                    % Modulate
  txSignal  = ostbcEnc(modData);                  % Apply Alamouti coding
  [chanOut, chanEst] = mimoChan(txSignal);        % 2x1 fading channel
  rxSignal  = awgnChan(chanOut);                  % Add receiver noise
  modDataRx = ostbcComb(rxSignal, ...
                   squeeze(chanEst));             % Decode
  dataRx    = psktcmDemod(modDataRx);             % Demodulate
  frameErr  = any(dataRx - data);                 % Check frame error
  fer       = FERData(false, frameErr);           % Update frame error rate
end

Шаговый метод системного объекта измерения частоты ошибок, FERData, выводит вектор 3 на 1, содержащий обновления измеренного значения FER, количества ошибок и общего количества передач систем координат. Отображение значений FER.

frameErrorRate = fer(1)
frameErrorRate =

    0.1481

TCM по плоскому каналу с замираниями

Этот раздел примера моделирует TCM в предыдущей схеме конкатенации по однократному входу с одним выходом (SISO) плоскому каналу Канала с релеевским замиранием без пространственно-временного кодирования. Канал с замираниями имеет ту же спецификацию, что и один подканал канала с замираниями 2x1 MIMO в предыдущей системе. Таким образом, этот раздел примера устанавливает свойство NumTransmitAntennas затухающего канала Системного объекта равным 1 после его освобождения. Этот раздел примера также устанавливает свойство SignalPower канала Системного объекта AWGN равным 1, так как существует только один символ, переданный на период символа.

Инициализируйте цикл обработки

release(mimoChan);
mimoChan.NumTransmitAntennas = 1;
awgnChan.SignalPower = 1;
reset(FERData)
fer = zeros(3,1);

Цикл обработки потока

while (fer(3) < maxNumFrms) && (fer(2) < maxNumErrs)
  data      = logical(randi([0 1], frameLen, 1)); % Generate data
  modData   = psktcmMod(data);                    % Modulate
  [chanOut, chanEst] = mimoChan(modData);         % SISO fading channel
  rxSignal  = awgnChan(chanOut);                  % Add receiver noise
  modDataRx = (rxSignal.*conj(chanEst)) / ...
              (chanEst'*chanEst);                 % Equalize
  dataRx    = psktcmDemod(modDataRx);             % Demodulate
  frameErr  = any(dataRx - data);                 % Check frame error
  fer       = FERData(false, frameErr);           % Update frame error rate
end

OSTBC над 2x1 плоским Каналом с релеевским замиранием

Этот раздел примера заменяет TCM в предыдущей схеме конкатенации модуляцией QPSK, так что обе системы имеют одинаковую скорость символа ( системы координат). Он использует тот же плоский Канал с релеевским замиранием 2x1, что и в модели конкатенации TCM-OSTBC. Модулятор QPSK Системного объекта, qpskMod, отображает информационные биты в созвездие QPSK, а Системного объекта демодулятора QPSK, QPSKDemod, демодулирует сигналы от комбинатора OSTBC.

Инициализируйте цикл обработки

release(mimoChan);
mimoChan.NumTransmitAntennas = 2;
awgnChan.SignalPower = 2;
reset(FERData)
fer = zeros(3,1);

Цикл обработки потока

while (fer(3) < maxNumFrms) && (fer(2) < maxNumErrs)
  data      = logical(randi([0 1], frameLen, 1)); % Generate data
  modData   = qpskMod(data);                      % Modulate
  txSignal  = ostbcEnc(modData);                  % Apply Alamouti coding
  [chanOut, chanEst] = mimoChan(txSignal);        % 2x1 fading channel
  rxSignal  = awgnChan(chanOut);                  % Add receiver noise
  modDataRx = ostbcComb(rxSignal, ...
                   squeeze(chanEst));             % Decode
  dataRx    = qpskDemod(modDataRx);               % Demodulate
  frameErr  = any(dataRx - data);                 % Check frame error
  fer       = FERData(false, frameErr);           % Update frame error rate
end

Можно добавить цикл for-loop вокруг предыдущих циклов обработки, чтобы запустить симуляции для набора значений ОСШ. Симуляции выполнялись в автономном режиме для значений ОСШ (10:2:24) дБ, целевого количества ошибок, равного 1000, и максимального количества передач, равного 5e6. Следующий рисунок показывает результаты этой симуляции.

Сводные данные

Этот пример использовал несколько системных объектов, чтобы симулировать конкатенированный OSTBC с TCM по плоскому Каналу с релеевским замиранием 2x1. Эта базовая система была модифицирована, чтобы смоделировать систему TCM через плоский канал SISO и систему OSTBC на том же плоском Канале с релеевским замиранием 2x1. Производительность системы измеряли с помощью кривых FER, полученных с системным объектом измерения частоты ошибок. Этот пример показал, что схема конкатенации обеспечивает значительный коэффициент разнесения по схеме TCM и по поводу 2dB коэффициента усиления кодирования по коду Аламути.

Приложение

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

Избранная библиография

  1. S. M. Alamouti, «Простой метод разнесения передачи для радиосвязей», IEEE ® Journal on Selected Areas in Communications, vol. 16, no. 8, pp. 1451-1458, Oct. 1998.

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

  3. G. Ungerboeck, «Channel coding with multilevel/ фазы signals», IEEE Transactions on Information Theory, vol. IT-28, no. 1, pp. 55? 67, Jan. 1982.

  4. С. М. Аламоути, В. Тэрох и П. Пун, «Закодированная решеткой модуляция и передает разнообразие: Критерии расчета и оценка результатов деятельности», на Слушаниях Международной конференции IEEE по вопросам Universal Personal Communications (ICUPC '98), Флоренция, Италия, издание 1, 5-9 октября 1998, стр 703-707.

  5. Y. Gong and K. B. Letaief, «Concatenated space-time block coding with tellis coded modulation in blading channels», IEEE Transactions on Wireless Communications, vol. 1, no. 4, pp. 580-590, Oct. 2002.