Этот пример показывает ортогональный пространственно-временной блочный код (ОСТБК), сцепленный с решетчатой модуляцией (TCM) для передачи информации по каналу с множеством входов и множеством выходов (MIMO) с 2 передающими антеннами и 1 приемной антенной. В примере используется коммуникационная система objects™ для моделирования этой системы.
OSTBC [1], [2] являются привлекательной технологией для беспроводной связи MIMO. Они используют полный порядок пространственного разнесения и пользуются декодированием с максимальным правдоподобием (ML). Однако они не обеспечивают никакого усиления кодирования. Объединитель для OSTBC на стороне приемника предоставляет мягкую информацию о переданных символах, которая может быть использована для декодирования или демодуляции внешнего кода.
TCM [3] является схемой эффективного использования полосы пропускания, которая интегрирует кодирование и модуляцию для обеспечения большого усиления кодирования. Конкатенация TCM с внутренним кодом обычно обеспечивает улучшенную производительность.
Этот пример иллюстрирует преимущества схемы конкатенации OSTBC и TCM: коэффициент усиления пространственного разнесения, предлагаемый OSTBC, и коэффициент усиления кодирования, предлагаемый TCM. Для сравнения также предусмотрены две эталонные системы, содержащие только TCM или OSTBC. Преимущества разнесения и кодирования схемы конкатенации по эталонным моделям можно четко наблюдать из результатов моделирования. Более подробно о конкатенации OSTBC и TCM можно найти, например, в [4], [5] и ссылках на них.
Сценарий configureTCMOSTBCDem.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, которая имеет единицу средней энергии. Свойство TrellisStructure принимает структуру MATLAB ® для указания решетки TCM. Свойство SharingOrder указывает размер совокупности PSK. В этом примере используется схема TCM Ungerboeck для 8-PSK созвездия с 8 состояниями решетки [3] и устанавливается соответствующее свойство TrellisStructure для результата poly2trellis ([2 3], [1 2 0; 4 1 2]). Этот объект имеет выходную длину 50, так как каждые два входных бита образуют один символ.
Объект Система демодулятора PSK TCM использует алгоритм Витерби для TCM для декодирования сигналов от объединителя OSTBC. В примере свойство TerminationMethod устанавливается в значение «» Усеченный «»; поэтому каждый кадр обрабатывается независимо. В примере также устанавливается свойство TracebackDepth равным 30, которое по сравнению с длиной ограничения TCM является достаточно длинным, чтобы обеспечить производительность почти без потерь.
psktcmMod = comm.PSKTCMModulator(trellis, ... 'TerminationMethod', 'Truncated');
psktcmDemod = comm.PSKTCMDemodulator(trellis, ... 'TerminationMethod', 'Truncated', ... 'TracebackDepth', 30, ... 'OutputDataType', 'logical');
Системный объект кодера OSTBC кодирует информационные символы из кодера TCM с использованием кода Аламути [1] для 2 передающих антенн. Выходной сигнал этого объекта представляет собой матрицу 50x2, где записи в каждом столбце соответствуют данным, передаваемым с одной антенны.
Объект системы объединения OSTBC использует одну антенну и декодирует принятый сигнал, используя информацию о состоянии канала (CSI). Выходной сигнал ступенчатого способа этого объекта представляет оценки переданных символов, которые затем подаются в демодулятор PSK TCM. В этом примере предполагается, что CSI хорошо известна на стороне приемника.
ostbcEnc = comm.OSTBCEncoder; ostbcComb = comm.OSTBCCombiner;
Объект системы MIMO с замиранием 2x1 моделирует пространственно независимый плоский Rayleigh с замиранием канал от 2 передающих антенн к 1 приемной антенне.
В примере свойство maximumDopplerShift объекта канала устанавливается равным 30. Причина использования этого значения состоит в том, чтобы заставить канал MIMO вести себя как квазистатический канал замирания, то есть он остается постоянным во время передачи одного кадра и изменяется вдоль нескольких кадров. В примере устанавливается значение «true» для свойства StartExpresentedOutputPort, чтобы использовать значения усиления тракта канала в качестве идеальных оценок CSI. Пример также устанавливает свойство RandomStream равным «mt19937ar with seed», так что объект использует автономный генератор случайных чисел для генерации повторяющихся коэффициентов канала. Канал 2x1 MIMO имеет нормализованные коэффициенты усиления тракта.
mimoChan = comm.MIMOChannel(... 'SampleRate', 1/Tsamp, ... 'MaximumDopplerShift', maxDopp, ... 'SpatialCorrelationSpecification', 'None', ... 'NumReceiveAntennas', 1, ... 'RandomStream', 'mt19937ar with seed', ... 'PathGainsOutputPort', true);
Этот раздел кода вызывает цикл обработки для конкатенированной системы OSTBC. Главная петля обрабатывает покадровые данные, где передатчик модулирует случайные данные, используя 8-PSK модулятор TCM и затем применяет кодирование Alamouti. Два переданных сигнала от кодера OSTBC проходят через канал 2x1 MIMO Rayleigh с замиранием и также нарушаются AWGN. Объединитель OSTBC использует одну приемную антенну и обеспечивает мягкие входы в демодулятор 8-PSK TCM. Пример сравнивает выходной сигнал демодулятора с сгенерированными случайными данными для получения частоты ошибок кадра (ЧОК).
Потоковая обработка
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.
frameErrorRate = fer(1)
frameErrorRate =
0.1481
Этот раздел примера моделирует TCM в предыдущей схеме конкатенации по плоскому релеевскому каналу замирания с одним входом и одним выходом (SISO) без пространственно-временного кодирования. Канал замирания имеет ту же спецификацию, что и один подканал канала замирания 2x1 MIMO в предыдущей системе. В этом разделе примера свойство NumTransmissAntennas объекта системы с замиранием канала устанавливается равным 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
Этот раздел примера заменяет 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
Для выполнения моделирования набора значений SNR можно добавить цикл for вокруг предыдущих циклов обработки. Моделирование выполнялось в автономном режиме для значений SNR (10:2:24) дБ, целевого количества ошибок, равного 1000, и максимального количества передач, равного 5e6. На следующем рисунке показаны результаты этого моделирования.

В этом примере используется несколько объектов System для моделирования конкатенированного OSTBC с TCM по плоскому релеевскому затухающему каналу 2x1. Эта базовая система была модифицирована для моделирования системы TCM по каналу плоского замирания SISO и системы OSTBC по тому же каналу плоского замирания Rayleigh 2x1. Производительность системы измеряли с использованием кривых ЧОК, полученных с помощью объекта системы измерения частоты ошибок. Этот пример показал, что схема конкатенации обеспечивает значительное усиление разнесения по схеме TCM и приблизительно 2dB усиление кодирования по коду Аламути.
В этом примере используется следующий сценарий и вспомогательная функция:
С. М. Аламути, «Простой метод разнесения передачи для беспроводной связи», IEEE ® Journal on Selected Areas in Communications, том 16, № 8, стр. 1451-1458, октябрь 1998.
В. Тарох, Х. Джафархами и А. Р. Калдербанк, «Пространственно-временные блочные коды из ортогональных конструкций», IEEE Transactions on Information Theory, vol. 45, no. 5, pp. 1456-1467, Jul. 1999.
Г. Унгербек, «Канальное кодирование многоуровневыми/фазовыми сигналами», IEEE Transactions on Information Theory, vol. IT-28, no. 1, pp. 55? 67, Jan. 1982.
С. М. Аламути, В. Тарох и П. Пун, «Модуляция и разнесение передачи с трелисовым кодированием: критерии проектирования и оценка эффективности», в Трудах Международной конференции IEEE по универсальным личным коммуникациям (ICUPC '98), Флоренция, Италия, том 1, октябрь 5-9, 1998, стр. 703-707.
Y. Gong и K. B. Letaief, «Конкатенированное пространственно-временное блочное кодирование с решетчатой модуляцией в замирающих каналах», IEEE Transactions on Wireless Communications, том 1, № 4, стр. 580-590, октябрь 2002.