Этот пример показывает, что ортогональный пространственно-временной блочный код (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 вести себя как квазистатический исчезающий канал, т.е. это сохраняет постоянным во время одной передачи системы координат и варьируется вдоль нескольких систем координат. Пример устанавливает 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.