Этот пример показывает, что ортогональный пространственно-временной блочный код (OSTBC), конкатенированный с закодированной решеткой модуляцией (TCM) для информационной передачи по нескольким - ввел, несколько - выводят (MIMO), канал с 2 передающими антеннами и 1 получает антенну. Пример использует систему связи objects™, чтобы симулировать эту систему.
OSTBCs [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
Системный объект модулятора TCM PSK модулирует случайные данные о сообщении к созвездию PSK, которое имеет модульную среднюю энергию. Свойство TrellisStructure принимает, что структура MATLAB® задает решетку TCM. Свойство ModulationOrder задает размер созвездия PSK. Этот пример использует схему Ungerboeck TCM созвездия 8-PSK с 8 состояниями решетки [3] и устанавливает соответствующее свойство TrellisStructure на результат poly2trellis ([2 3], [1 2 0; 4 1 2]). Этот объект имеет продолжительность выхода 50, когда каждые два входных бита производят один символ.
PSK Системный объект демодулятора TCM использует алгоритм 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 при помощи кода [1] Alamouti для 2 передающих антенн. Выход этого объекта 50x2 матрица, где записи на каждом столбце соответствуют данным, переданным от одной антенны.
Системный объект объединителя OSTBC использует одну антенну и декодирует полученный сигнал, использующий информацию о состоянии канала (CSI). Выход метода шага этого объекта представляет оценки переданных символов, которые затем поданы в PSK демодулятор TCM. В этом примере CSI принят отлично известный в стороне приемника.
ostbcEnc = comm.OSTBCEncoder; ostbcComb = comm.OSTBCCombiner;
2x1 MIMO, исчезающий, Системный объект канала симулирует пространственно независимый плоский Канал с релеевским замиранием от этих 2 передающих антенн до этого 1, получают антенну.
Пример устанавливает maximumDopplerShift свойство объекта канала к 30. Причина использования этого значения состоит в том, чтобы заставить канал MIMO вести себя как квазистатический исчезающий канал, i.e., это сохраняет постоянным во время одной передачи системы координат и варьируется вдоль нескольких систем координат. Пример устанавливает 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 8-PSK и затем применяет кодирование Alamouti. Два переданных сигнала от энкодера OSTBC проходят 2x1 Канал с релеевским замиранием MIMO и также повреждаются AWGN. Объединитель OSTBC использует, каждый получает антенну, и предоставляет мягкие входные параметры демодулятору TCM 8-PSK. Пример сравнивает выход демодулятора со сгенерированными случайными данными, чтобы получить коэффициент ошибок системы координат (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 вокруг предыдущих циклов обработки, чтобы запустить симуляции для набора значений ОСШ. Симуляции были запущены оффлайн для значений ОСШ (10:2:24) дБ, целевое количество ошибок, равных 1 000, и максимальное количество передач, равных 5e6. Следующий рисунок показывает результаты этой симуляции.
Этот пример использовал несколько Системных объектов, чтобы симулировать конкатенированный OSTBC с TCM по 2x1 плоский Канал с релеевским замиранием. Эта основная система была изменена, чтобы смоделировать систему TCM по SISO плоский исчезающий канал и система OSTBC по тому же самому 2x1 плоский Канал с релеевским замиранием. Производительность системы была измерена с помощью кривых FER, полученных с объектом системы измерения коэффициента ошибок. Этот пример показал, что схема конкатенации обеспечивает значительное усиление разнообразия по схеме TCM и приблизительно 2 дБ, кодирующие усиление по коду Alamouti.
Этот пример использует следующий скрипт и функцию помощника:
С. М. Аламоути, "Простой метод разнообразия передачи для радиосвязей", Журнал IEEE® на Выбранных областях в Коммуникациях, издании 16, № 8, стр 1451-1458, октябрь 1998.
V. Tarokh, Х. Джэфархэми и А. Р. Колдербэнк, "Пространственно-временные блочные коды из ортогональных проектов", Транзакции IEEE на Теории информации, издании 45, № 5, стр 1456-1467, июль 1999.
Г. Анджербоек, "Кодирование канала с многоуровневыми сигналами / сигналами фазы", Транзакции IEEE на Теории информации, издании IT-28, № 1, стр 55? 67, январь 1982.
С. М. Аламоути, В. Тэрох и П. Пун, "Закодированная решеткой модуляция и разнообразие передачи: Критерии расчета и оценка результатов деятельности", в Продолжениях Международной конференции IEEE по вопросам Universal Personal Communications (ICUPC '98), Флоренция, Италия, издание 1, 5-9 октября 1998, стр 703-707.
Y. Гонг и К. Б. Летэиф, "Конкатенированное пространственно-временное блочное кодирование с решеткой закодировало модуляцию в исчезающих каналах", Транзакции IEEE на Радиосвязях, издании 1, № 4, стр 580-590, октябрь 2002.