comm.OFDMModulator

Модулируйте сигнал с помощью метода OFDM

Описание

OFDMModulator объект модулирует сигнал с помощью ортогонального метода модуляции деления частоты. Выход представляет собой репрезентацию модулированного сигнала.

Модулировать сигнал с помощью OFDM:

  1. Создайте comm.OFDMModulator объект и набор его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?.

Создание

Описание

пример

hMod = comm.OFDMModulator создает Систему модулятора OFDM object™.

пример

hMod = comm.OFDMModulator(Name,Value) задает Свойства с помощью одного из большего количества аргументов пары "имя-значение". Заключите каждое имя свойства в кавычки. Например, comm.OFDMModulator('NumSymbols',8) задает восемь символов OFDM в сетке частоты времени.

пример

hMod = comm.OFDMModulator(hDemod) устанавливает свойства системного объекта модулятора OFDM на основе заданного системного объекта демодулятора OFDM comm.OFDMDemodulator.

Свойства

развернуть все

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release функция разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.

Количество Быстрого преобразования Фурье (FFT) указывает в виде положительного целого числа. Длина БПФ, БПФ N, должна быть больше или быть равна 8 и эквивалентна количеству поднесущих.

Типы данных: double

Количество поднесущих, выделенных левым и правым защитным полосам в виде двухэлементного вектор-столбца целых чисел. Количество поднесущих должно находиться в пределах [0, NFFT/2  − 1]. Этот вектор имеет форму [N leftG, N rightG], где N leftG и N rightG задают левые и правые защитные полосы, соответственно.

Типы данных: double

Опция, чтобы вставить пустой указатель DC в виде числового или логического 0 ложь) или 1 TRUE). Поднесущая DC является центром диапазона частот и имеет значение индекса:

  • (FFTLength / 2) + 1, когда FFTLength является четным

  • (FFTLength + 1) / 2, когда FFTLength является нечетным

Опция, чтобы задать экспериментальный вход в виде числового или логического 0 ложь) или 1 TRUE). Если этим свойством является 1 TRUE), можно присвоить отдельные поднесущие для экспериментальной передачи. Если этим свойством является 0 ложь), экспериментальная информация принята, чтобы быть встроенной во входные данные.

Экспериментальные индексы поднесущей в виде вектор-столбца. Если свойство PilotCarrierIndices установлено в 1 TRUE), можно задать индексы экспериментальных поднесущих. Можно присвоить индексы тем же или различным поднесущим для каждого символа. Точно так же экспериментальные индексы поставщика услуг могут отличаться через несколько антенн передачи. В зависимости от желаемого уровня управления для присвоений индекса варьируются размерности свойства. Допустимые экспериментальные индексы падают в области значений

[NleftG+1,NFFT/2][NFFT/2+2,NFFTNrightG],

где значение индекса не может превысить количество поднесущих. Когда экспериментальные индексы являются тем же самым для каждого символа и передают антенну, свойство имеет размерности N pilot-1. Когда экспериментальные индексы варьируются через символы, свойство имеет размерности N pilot-by-Nsym. Если вы передаете только один символ, но несколько антенн передачи, свойство имеет размерности пилот N 1 Nt., где N t. является количеством антенн передачи. Если индексы варьируются через количество символов и передают антенны, свойство имеет размерности пилот N Nsym Nt. Если количество антенн передачи больше один, гарантируйте, что индексы на символ должны быть взаимно отличными через антенны, чтобы минимизировать интерференцию.

Чтобы включить это свойство, установите PilotInputPort свойство к 1 TRUE).

Длина циклического префикса в виде положительного целого числа. Если вы задаете скаляр, длина префикса является тем же самым для всех символов через все антенны. Если вы задаете вектор-строку из длины N sym, длина префикса может варьироваться через символы, но остается то же самое через все антенны.

Типы данных: double

Опция, чтобы применить повышенное окно косинуса между символами OFDM в виде true или false. Работа с окнами является процессом, в котором символ OFDM умножается на повышенное окно косинуса перед передачей, чтобы более быстро уменьшить мощность внеполосных поднесущих. Работа с окнами уменьшает спектральный перерост.

Длина повышенного окна косинуса в виде положительной скалярной величины. Это значение должно быть меньше чем или равно минимальной длине циклического префикса. Например, в настройке четырех символов с длинами циклического префикса 12, 14, 16, и 18, длина окна должна быть меньше чем или равна 12.

Чтобы включить это свойство, установите Windowing свойство к 1 TRUE).

Количество символов OFDM в сетке частоты времени в виде положительного целого числа.

Количество антенн передачи, используемых, чтобы передать OFDM модулируемый сигнал в виде положительного целого числа.

Использование

Описание

waveform = hMod(insignal) применяет модуляцию OFDM заданный сгенерированный модулированный сигнал и возвращает модулируемый сгенерированный модулированный сигнал OFDM.

waveform = hMod(data,pilot) присваивает экспериментальный сигнал, pilot, в поднесущие частоты, заданные значением свойства PilotCarrierIndices hMod системный объект. Чтобы включить этот синтаксис устанавливает свойство PilotCarrierIndices на true.

Входные параметры

развернуть все

Введите сгенерированный модулированный сигнал в виде матрицы или трехмерного массива числовых значений. Входной сгенерированный модулированный сигнал должен иметь размер N f Nsym Nt. где N f является количеством поднесущих частоты, исключая пустой указатель DC и защитные полосы.

Типы данных: double
Поддержка комплексного числа: Да

Входные данные в виде матрицы или трехмерного массива. Вход должен быть числовым из размера N d Nsym Nt. где N d является количеством поднесущих данных в каждом символе. Для получения дополнительной информации о том, как вычисляется N d, смотрите свойство PilotCarrierIndices.

Типы данных: double
Поддержка комплексного числа: Да

Экспериментальный сигнал в виде трехмерного массива числовых значений. Экспериментальный сигнал должен иметь размер пилот N Nsym Nt.

Типы данных: double
Поддержка комплексного числа: Да

Выходные аргументы

развернуть все

OFDM Модулируемый сгенерированный модулированный сигнал, возвращенный как 2D массив. Если CyclicPrefixLength свойство является скаляром, выходом waveform имеет размер ((NFFT+CPlen) ⁎Nsym)-by-Nt. В противном случае размер (NFFT⁎Nsym + ∑ (CPlen))-by-Nt.

Типы данных: double
Поддержка комплексного числа: Да

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

infoПредоставьте информацию об определении размеров для модулятора OFDM
showResourceMappingПокажите отображение поднесущей символов OFDM, созданных Системным объектом модулятора OFDM
stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

свернуть все

Создайте и отобразите Систему модулятора OFDM object™ со значениями свойств по умолчанию.

hMod = comm.OFDMModulator
hMod = 
  comm.OFDMModulator with properties:

               FFTLength: 64
    NumGuardBandCarriers: [2x1 double]
            InsertDCNull: false
          PilotInputPort: false
      CyclicPrefixLength: 16
               Windowing: false
              NumSymbols: 1
     NumTransmitAntennas: 1

Измените количество поднесущих и символов.

hMod.FFTLength = 128;
hMod.NumSymbols = 2;

Проверьте что количество поднесущих и количество измененных символов.

disp(hMod)
  comm.OFDMModulator with properties:

               FFTLength: 128
    NumGuardBandCarriers: [2x1 double]
            InsertDCNull: false
          PilotInputPort: false
      CyclicPrefixLength: 16
               Windowing: false
              NumSymbols: 2
     NumTransmitAntennas: 1

Используйте showResourceMapping возразите функции, чтобы показать отображение данных, пилота и пустых поднесущих в пространстве частоты времени.

showResourceMapping(hMod)

Figure OFDM Subcarrier Mapping for All Tx Antennas contains an axes. The axes with title OFDM Subcarrier Mapping for All Tx Antennas contains an object of type image.

Создайте Систему демодулятора OFDM object™ со значениями свойств по умолчанию. Затем задайте экспериментальные индексы для отдельного символа и двух антенн передачи.

Установка PilotCarrierIndices свойство демодулятора влияет на количество антенн передачи в модуляторе OFDM, когда вы используете демодулятор в создании модулятора. Количество получает антенны в демодуляторе, является некоррелированым с количеством антенн передачи.

ofdmDemod = comm.OFDMDemodulator;
ofdmDemod.PilotOutputPort = true;
ofdmDemod.PilotCarrierIndices = cat(3,[12; 26; 40; 54],[13; 27; 41; 55]);

Используйте демодулятор OFDM, чтобы создать модулятор OFDM.

ofdmMod = comm.OFDMModulator(ofdmDemod);

Отобразите свойства OFDM modulatorand демодулятор, проверив, что применимые свойства соответствуют.

disp(ofdmMod)
  comm.OFDMModulator with properties:

               FFTLength: 64
    NumGuardBandCarriers: [2x1 double]
            InsertDCNull: false
          PilotInputPort: true
     PilotCarrierIndices: [4x1x2 double]
      CyclicPrefixLength: 16
               Windowing: false
              NumSymbols: 1
     NumTransmitAntennas: 2
disp(ofdmDemod)
  comm.OFDMDemodulator with properties:

               FFTLength: 64
    NumGuardBandCarriers: [2x1 double]
         RemoveDCCarrier: false
         PilotOutputPort: true
     PilotCarrierIndices: [4x1x2 double]
      CyclicPrefixLength: 16
              NumSymbols: 1
      NumReceiveAntennas: 1

showResourceMapping метод отображает отображение ресурса частоты времени для каждой антенны передачи.

Создайте модулятор OFDM.

mod = comm.OFDMModulator;

Примените showResourceMapping метод.

showResourceMapping(mod)

Figure OFDM Subcarrier Mapping for All Tx Antennas contains an axes. The axes with title OFDM Subcarrier Mapping for All Tx Antennas contains an object of type image.

Вставьте пустой указатель DC.

mod.InsertDCNull = true;

Покажите ресурс, сопоставляющий после добавления пустого указателя DC.

showResourceMapping(mod)

Figure OFDM Subcarrier Mapping for All Tx Antennas contains an axes. The axes with title OFDM Subcarrier Mapping for All Tx Antennas contains an object of type image.

Создайте модулятор OFDM и задайте индексы поднесущей для экспериментальных сигналов. Задайте индексы для каждого символа и передайте антенну. Когда количество антенн передачи будет больше один, установите различные экспериментальные индексы для каждого символа между антеннами.

Создайте Системный объект модулятора OFDM, задав два символа и вставив пустой указатель DC.

mod = comm.OFDMModulator('FFTLength',128,'NumSymbols',2,...
    'InsertDCNull',true);

Включите экспериментальный входной порт, таким образом, можно задать экспериментальные индексы.

mod.PilotInputPort = true;

Задайте те же экспериментальные индексы для обоих символов.

mod.PilotCarrierIndices = [12; 56; 89; 100];

Визуализируйте размещение пилота, сигнализирует и аннулирует в сетке частоты времени OFDM при помощи showResourceMapping объектная функция.

showResourceMapping(mod)

Figure OFDM Subcarrier Mapping for All Tx Antennas contains an axes. The axes with title OFDM Subcarrier Mapping for All Tx Antennas contains an object of type image.

Задайте различные индексы для второго символа путем конкатенации второго столбца экспериментальных индексов к PilotCarrierIndices свойство.

mod.PilotCarrierIndices = cat(2,mod.PilotCarrierIndices, ...
    [17; 61; 94; 105]);

Проверьте, что экспериментальные индексы поднесущей отличаются между этими двумя символами.

showResourceMapping(mod)

Figure OFDM Subcarrier Mapping for All Tx Antennas contains an axes. The axes with title OFDM Subcarrier Mapping for All Tx Antennas contains 2 objects of type image, line.

Увеличьте число антенн передачи к два.

mod.NumTransmitAntennas = 2;

Задайте экспериментальные индексы для каждой из двух антенн передачи. Чтобы обеспечить индексы для нескольких антенн при минимизации интерференции среди антенн, установите PilotCarrierIndices свойство как трехмерный массив, таким образом, что индексы для каждого символа отличаются среди антенн.

mod.PilotCarrierIndices = cat(3,[20; 50; 70; 110], [15; 60; 75; 105]);

Отобразите отображение ресурса для двух антенн передачи. Серые линии обозначают вставку пользовательских пустых указателей. Пустые указатели создаются объектом минимизировать интерференцию среди экспериментальных символов от различных антенн.

showResourceMapping(mod)

Figure OFDM Subcarrier Mapping for Tx Antenna 1 contains an axes. The axes with title OFDM Subcarrier Mapping for Tx Antenna 1 contains an object of type image.

Figure OFDM Subcarrier Mapping for Tx Antenna 2 contains an axes. The axes with title OFDM Subcarrier Mapping for Tx Antenna 2 contains an object of type image.

Задайте длину циклического префикса для каждого символа OFDM.

Создайте модулятор OFDM, задав пять символов, четыре оставленных и три правильных поднесущие защитной полосы и длину циклического префикса для каждого символа OFDM.

mod = comm.OFDMModulator('NumGuardBandCarriers',[4;3],...
    'NumSymbols',5,...
    'CyclicPrefixLength',[12 10 14 11 13]);

Отобразите свойства модулятора OFDM, проверив, что длина циклического префикса изменяется через символы.

disp(mod)
  comm.OFDMModulator with properties:

               FFTLength: 64
    NumGuardBandCarriers: [2x1 double]
            InsertDCNull: false
          PilotInputPort: false
      CyclicPrefixLength: [12 10 14 11 13]
               Windowing: false
              NumSymbols: 5
     NumTransmitAntennas: 1

Получите размерности данных о модуляторе OFDM при помощи info объектная функция.

Создайте Систему модулятора OFDM object™ с заданными пользователями экспериментальными индексами, вставленным пустым указателем DC, и задайте две антенны передачи.

hMod = comm.OFDMModulator('NumGuardBandCarriers',[4;3], ...
    'PilotInputPort',true, ...
    'PilotCarrierIndices',cat(3,[12; 26; 40; 54], ...
    [11; 25; 39; 53]), ...
    'InsertDCNull',true, ...
    'NumTransmitAntennas',2);

Используйте info возразите функции, чтобы получить входные данные модулятора, экспериментальные входные данные и размеры выходных данных.

info(hMod)
ans = struct with fields:
     DataInputSize: [48 1 2]
    PilotInputSize: [4 1 2]
        OutputSize: [80 2]

Сгенерируйте модулируемые символы OFDM для использования в симуляциях уровня ссылки.

Создайте модулятор OFDM со вставленным пустым указателем DC, семью поднесущими защитной полосы и двумя символами, имеющими различные экспериментальные индексы для каждого символа.

mod = comm.OFDMModulator('NumGuardBandCarriers',[4;3],...
'PilotInputPort',true, ...
'PilotCarrierIndices',[12 11; 26 27; 40 39; 54 55], ...
'NumSymbols',2, ...
'InsertDCNull',true);

Определите входные данные, пилота и размерности выходных данных.

modDim = info(mod);

Сгенерируйте случайные символы данных для модулятора OFDM. Переменная структуры, modDim, определяет количество символов данных.

dataIn = complex(randn(modDim.DataInputSize),randn(modDim.DataInputSize));

Создайте экспериментальный сигнал, который имеет правильные размерности.

pilotIn = complex(rand(modDim.PilotInputSize),rand(modDim.PilotInputSize));

Примените модуляцию OFDM к данным и экспериментальным сигналам.

modData = step(mod,dataIn,pilotIn);

Используйте объект модулятора OFDM создать соответствующий демодулятор OFDM.

demod = comm.OFDMDemodulator(mod);

Демодулируйте сигнал OFDM и выведите данные и экспериментальные сигналы.

[dataOut, pilotOut] = step(demod,modData);

Проверьте, что в рамках жесткого допуска входные данные и экспериментальные символы совпадают с выходными данными и экспериментальными символами.

isSame = (max(abs([dataIn(:) - dataOut(:); ...
    pilotIn(:) - pilotOut(:)])) < 1e-10)
isSame = logical
   1

Больше о

развернуть все

Ссылки

[1] Дэхлмен, Эрик, Стефан Парквол и Йохан Скелд. 4G LTE/LTE-Advanced для Мобильной Широкополосной связи. Амстердам: Elsevier, Acad. Нажмите, 2011.

[2] Эндрюс, J. G. А. Гош и Р. Мухэмед. Основные принципы WiMAX. Верхний Сэддл-Ривер, NJ: Prentice Hall, 2007.

[3] Agilent Technologies, Inc., “OFDM Повышенная Работа с окнами Косинуса”, http://rfmw.em.keysight.com/wireless/helpfiles/n7617a/ofdm_raised_cosine_windowing.htm.

[4] Монтре, L., Р. Продэн и Т. Колз. “Символ TX OFDM, Формирующий 802,3 миллиарда”, https://www.ieee802.org/3/bn/public/jan13/montreuil_01a_0113.pdf. Broadcom, 2013.

[5] “Стандарт IEEE 802.16TM-2009”, Нью-Йорк: IEEE, 2009.

Расширенные возможности

Смотрите также

Функции

Объекты

Блоки

Введенный в R2014a