Этот пример показывает ортогональный пространственно-временной блочный код (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, которое имеет модуль среднего значения энергию. Свойство 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');
Системный объект кодирует информационные символы от TCM Encoder с помощью кода Аламути [1] для 2 передающих антенн. Выходом этого объекта является матрица 50x2, где значения на каждом столбце соответствуют данным, переданным с одной антенны.
Системный объект объединителя OSTBC использует одну антенну и декодирует принятый сигнал, используя информацию о состоянии канала (CSI). Выходы способа шага этого объекта представляют оценки переданных символов, которые затем подаются в демодулятор PSK TCM. В этом примере CSI принимается прекрасно известным на стороне приемника.
ostbcEnc = comm.OSTBCEncoder; ostbcComb = comm.OSTBCCombiner;
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. Основной цикл обрабатывает кадр за кадром данных, где передатчик модулирует случайные данные с помощью 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 в предыдущей схеме конкатенации по однократному входу с одним выходом (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
Этот раздел примера заменяет 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 коэффициента усиления кодирования по коду Аламути.
В этом примере используются следующий скрипт и вспомогательная функция:
S. M. Alamouti, «Простой метод разнесения передачи для радиосвязей», IEEE ® Journal on Selected Areas in Communications, vol. 16, no. 8, pp. 1451-1458, Oct. 1998.
В. Тарох, Х. Джафархами, и А. Р. Калдербанк, «Пространственно-временные блочные коды из ортогональных проектов», Транзакции IEEE по теории информации, том 45, № 5, стр. 1456-1467, Jul. 1999.
G. Ungerboeck, «Channel coding with multilevel/ фазы signals», IEEE Transactions on Information Theory, vol. IT-28, no. 1, pp. 55? 67, Jan. 1982.
С. М. Аламоути, В. Тэрох и П. Пун, «Закодированная решеткой модуляция и передает разнообразие: Критерии расчета и оценка результатов деятельности», на Слушаниях Международной конференции IEEE по вопросам Universal Personal Communications (ICUPC '98), Флоренция, Италия, издание 1, 5-9 октября 1998, стр 703-707.
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.