Модулировать сигнал методом OFDM
OFDMModulator объект модулирует сигнал, используя способ модуляции с ортогональным частотным разделением. Выходной сигнал является представлением модулированного сигнала в основной полосе частот.
Для модуляции сигнала с использованием OFDM:
Создать comm.OFDMModulator и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
создает object™ системы модулятора OFDM.hMod = comm.OFDMModulator
задает свойства, использующие один из нескольких аргументов пары имя-значение. Заключите каждое имя свойства в кавычки. Например, hMod = comm.OFDMModulator(Name,Value)comm.OFDMModulator('NumSymbols',8) задает восемь символов OFDM во временной частотной сетке.
устанавливает свойства объекта системы модулятора OFDM на основе указанного объекта системы демодулятора OFDM hMod = comm.OFDMModulator(hDemod)comm.OFDMDemodulator.
Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.
Если свойство настраивается, его значение можно изменить в любое время.
Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.
FFTLength - Количество точек БПФ64 (по умолчанию) | положительное целое числоЧисло точек быстрого преобразования Фурье (FFT), указанное как положительное целое число. Длина FFT, NFFT, должна быть больше или равна 8 и эквивалентна количеству поднесущих.
Типы данных: double
NumGuardBandCarriers - Количество поднесущих в левой и правой защитных полосах[6;5] (по умолчанию) | двухэлементный вектор-столбец целых чиселКоличество поднесущих, выделенных левой и правой защитным диапазонам, задаваемое как двухэлементный вектор-столбец целых чисел. Число поднесущих должно находиться в пределах [0, ⌊ NFFT/2 ⌋ − 1]. Этот вектор имеет вид [NleftG, NireG], где NleftG и NireG определяют левую и правую защитные полосы соответственно.
Типы данных: double
InsertDCNull - Параметр для вставки значения DC nullfalse или 0 (по умолчанию) | true или 1Параметр для вставки значения DC null, заданного как числовой или логический 0 (false) или 1 (true). Поднесущая постоянного тока является центром полосы частот и имеет значение индекса:
(FFTLength / 2) + 1, когда FFTLength является четным
(FFTLength + 1 )/2, когда FFTLength является нечетным
PilotInputPort - Опция для указания входного сигнала пилотаfalse или 0 (по умолчанию) | true или 1Параметр для указания входного сигнала пилота, заданного как числовой или логический 0 (false) или 1 (true). Если это свойство 1 (true), можно назначить отдельные поднесущие для передачи пилот-сигнала. Если это свойство 0 (false), предполагается, что информация пилот-сигнала встроена во входные данные.
PilotCarrierIndices - Индексы пилотных поднесущих[12; 26; 40; 54] (по умолчанию) | вектор столбцаИндексы пилотной поднесущей, заданные как вектор столбца. Если свойство PilotTaxingIndices имеет значение 1 (true), можно указать индексы пилотных поднесущих. Индексы можно назначить тем же или разным поднесущим для каждого символа. Аналогично, индексы несущих пилот-сигнала могут различаться в нескольких передающих антеннах. В зависимости от требуемого уровня управления для назначений индексов размеры свойства различаются. Допустимые индексы пилота попадают в диапазон
NireG],
где значение индекса не может превышать число поднесущих. Когда индексы пилот-сигнала одинаковы для каждого символа и передающей антенны, свойство имеет размеры Npilot-by-1. Если пилотные индексы различаются по символам, свойство имеет размеры Npilot-by-Nsym. Если передается только один символ, но несколько передающих антенн, свойство имеет размеры Npilot-by-1-by-Nt., где Nt. - количество передающих антенн. Если индексы изменяются по количеству символов и передающих антенн, свойство имеет размеры Npilot-by-Nsym-by-Nt. Если число передающих антенн больше единицы, убедитесь, что индексы на символ должны быть взаимно различимы между антеннами, чтобы минимизировать помехи.
Чтобы включить это свойство, установите значение PilotInputPort свойство для 1 (true).
CyclicPrefixLength - Длина циклического префикса16 (по умолчанию) | положительное целое число | вектор строкиДлина циклического префикса, заданная как положительное целое число. При указании скаляра длина префикса одинакова для всех символов через все антенны. Если задан вектор строки длиной Nsym, длина префикса может изменяться для разных символов, но остается одинаковой для всех антенн.
Типы данных: double
Windowing - Возможность применения приподнятого косинусного окна между символами OFDMfalse или 0 (по умолчанию) | true или 1Опция для применения приподнятого косинусного окна между символами OFDM, указанного как true или false. Оконное отображение - это процесс, в котором OFDM-символ умножается на увеличенное косинусное окно перед передачей для более быстрого снижения мощности внеполосных поднесущих. Оконная обработка уменьшает повторный рост спектра.
WindowLength - Длина приподнятого косинусного окна1 (по умолчанию) | положительный скалярДлина приподнятого окна косинуса, заданная как положительный скаляр. Это значение должно быть меньше или равно минимальной длине циклического префикса. Например, в конфигурации из четырех символов с длиной циклического префикса 12, 14, 16 и 18 длина окна должна быть меньше или равна 12.
Чтобы включить это свойство, установите значение Windowing свойство для 1 (true).
NumSymbols - Количество символов OFDM1 (по умолчанию) | положительное целое числоКоличество символов OFDM во временной частотной сетке, указанное как положительное целое число.
NumTransmitAntennnas - Количество передающих антенн1 (по умолчанию) | положительное целое числоКоличество передающих антенн, используемых для передачи модулированного сигнала OFDM, заданного как положительное целое число.
назначает пилот-сигнал, waveform = hMod(data,pilot)pilot, в частотные поднесущие, указанные значением свойства PilotTraIndices hMod системный объект. Чтобы включить этот синтаксис, задайте для свойства PilotTaxingIndices значение true.
insignal - Входной сигнал основной полосы частотВходной сигнал основной полосы частот, заданный как матрица или 3-D массив числовых значений. Входной сигнал основной полосы должен иметь размер Nf-by-Nsym-by-Nt. где Nf - количество частотных поднесущих, исключая защитные полосы и нуль постоянного тока.
Типы данных: double
Поддержка комплексного номера: Да
data - Входные данныеВходные данные, заданные как матрица или массив 3-D. Вход должен быть числовым размером Nd-by-Nsym-by-Nt. где Nd - количество поднесущих данных в каждом символе. Дополнительные сведения о том, как вычисляется Nd, см. в свойстве PilotTaxingIndices.
Типы данных: double
Поддержка комплексного номера: Да
pilot - Пилот-сигналПилот-сигнал, заданный как 3-D массив числовых значений. Пилот-сигнал должен иметь размер Nпилот-на-Нсым-на-Нт.
Типы данных: double
Поддержка комплексного номера: Да
waveform - OFDM модулированный сигнал основной полосы частотOFDM модулированный сигнал основной полосы частот, возвращаемый как 2-D массив. Если CyclicPrefixLength свойство - скаляр, выход waveform имеет размер ((NFFT + CPlen) ⁎ Nsym) -by-Nt. В противном случае размер равен (NFFT⁎Nsym+∑ (CPlen)) -by-Nt.
Типы данных: double
Поддержка комплексного номера: Да
Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:
release(obj)
comm.OFDMModulatorinfo | Предоставление информации о размерах для модулятора OFDM |
showResourceMapping | Отображение отображения поднесущих символов OFDM, созданных объектом системы модулятора OFDM |
Создание и отображение системного object™ модулятора OFDM со значениями свойств по умолчанию.
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)

Создайте системный object™ демодулятора OFDM со значениями свойств по умолчанию. Затем задайте индексы пилот-сигнала для одного символа и двух передающих антенн.
Установка 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 и демодулятора, проверка соответствия применимых свойств.
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)

Вставьте элемент DC null.
mod.InsertDCNull = true;
Отображение сопоставления ресурсов после добавления NULL контроллера домена.
showResourceMapping(mod)

Создайте модулятор 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)

Укажите различные индексы для второго символа путем объединения второго столбца пилотных индексов с PilotCarrierIndices собственность.
mod.PilotCarrierIndices = cat(2,mod.PilotCarrierIndices, ...
[17; 61; 94; 105]);Проверьте, что индексы пилотной поднесущей различаются между двумя символами.
showResourceMapping(mod)

Увеличьте число передающих антенн до двух.
mod.NumTransmitAntennas = 2;
Укажите индексы пилот-сигнала для каждой из двух передающих антенн. Чтобы обеспечить индексы для нескольких антенн при минимизации помех между антеннами, установите PilotCarrierIndices свойство как массив 3-D, так что индексы для каждого символа различаются между антеннами.
mod.PilotCarrierIndices = cat(3,[20; 50; 70; 110], [15; 60; 75; 105]);
Отображение отображения ресурсов для двух передающих антенн. Серые линии обозначают вставку пользовательских нулей. Нулевые значения создаются объектом для минимизации помех между пилотными символами от различных антенн.
showResourceMapping(mod)


Укажите длину циклического префикса для каждого символа OFDM.
Создайте модулятор OFDM, задающий пять символов, четыре левых и три правых поднесущих защитного диапазона и длину циклического префикса для каждого символа OFDM.
mod = comm.OFDMModulator('NumGuardBandCarriers',[4;3],... 'NumSymbols',5,... 'CyclicPrefixLength',[12 10 14 11 13]);
Отображение свойств модулятора OFDM, verifyING, в котором длина циклического префикса изменяется по символам.
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 объектная функция.
Создайте object™ системы модулятора OFDM с заданными пользователем индексами пилот-сигнала, вставленным нулевым 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
Операция OFDM делит высокоскоростной поток данных на субпотоки с более низкой скоростью передачи данных путем разложения полосы частот передачи на N смежных индивидуально модулированных поднесущих. Множество параллельных и ортогональных поднесущих переносят выборки с почти той же полосой пропускания, что и широкополосный канал. Используя узкие ортогональные поднесущие, сигнал OFDM повышает устойчивость по частотно-избирательному каналу замирания и устраняет помехи соседних поднесущих. Межсимвольные помехи (ISI) уменьшаются, поскольку субпотоки с меньшей скоростью передачи данных имеют длительность символов, большую, чем разброс задержки канала.
Представление частотной области ортогональных поднесущих в форме сигнала OFDM выглядит следующим образом:

Передатчик применяет обратное быстрое преобразование Фурье (IFFT) к N символам одновременно. Выходной сигнал IFFT представляет собой сумму N ортогональных синусоид:
0≤t≤T,
где {Xk} - символы данных, а T - время символа OFDM. Символы Xk данных обычно сложны и могут быть из любого алфавита цифровой модуляции (например, QPSK, 16-QAM, 64-QAM).
Интервал между поднесущими равен Δf = 1/T; обеспечение ортогональности поднесущих в течение каждого периода символа, как показано ниже:
для m≠n.
Модулятор OFDM состоит из последовательно-параллельного преобразования с последующим набором N комплексных модуляторов, индивидуально соответствующих каждой поднесущей OFDM.

Отдельные поднесущие OFDM выделяются как поднесущие данных, пилот-сигнала или нулевые поднесущие.
Как показано здесь, поднесущие обозначаются как поднесущие данных, DC, пилот-сигнала или защитной полосы.

Поднесущие данных передают данные пользователя.
Поднесущие пилот-сигнала используются для оценки канала.
Нулевые поднесущие не передают данных. Поднесущие без данных используются для обеспечения DC null и служат в качестве буферов между блоками ресурсов OFDM.
Нулевая поднесущая постоянного тока является центром полосы частот со значением индекса (nfft/ 2 + 1), еслиnfft является четным, или ((nfft + 1 )/2), если nfft нечетно.
Защитные полосы обеспечивают буферы между последовательными символами OFDM для защиты целостности передаваемых сигналов путем уменьшения межсимвольных помех.
Нулевые поднесущие позволяют моделировать защитные полосы и местоположения поднесущих постоянного тока для определенных стандартов, таких как различные форматы 802.11, LTE, WiMAX или для пользовательских назначений. Можно назначить расположение нулей, назначив вектор из нулевых индексов поднесущих.
Аналогично защитным полосам, защитные интервалы используются в OFDM для защиты целостности передаваемых сигналов путем уменьшения межсимвольных помех.
Назначение защитных интервалов аналогично назначению защитных полос. Можно моделировать защитные интервалы для обеспечения временного разделения между символами OFDM. Защитные интервалы помогают сохранять межсимвольную ортогональность после прохождения сигнала через каналы с временным разделением. Защитные интервалы создаются с помощью циклических префиксов. Вставка циклического префикса копирует последнюю часть символа OFDM как первую часть символа OFDM.

До тех пор, пока интервал временной дисперсии не превышает длительность циклического префикса, преимущество вставки циклического префикса сохраняется.
Вставка циклического префикса приводит к частичному снижению пропускной способности пользовательских данных, поскольку циклический префикс занимает полосу пропускания, которая может использоваться для передачи данных.
В то время как циклический префикс создает защитный период во временной области для сохранения ортогональности, OFDM-символ редко начинается с той же амплитуды и фазы, которые проявляются в конце предшествующего OFDM-символа, вызывая повторный рост спектра и, следовательно, расширение полосы пропускания сигнала из-за интермодуляционного искажения. Чтобы ограничить этот спектральный рост, желательно создать плавный переход между последней выборкой символа и первой выборкой следующего символа. Это можно сделать, используя циклический суффикс и приподнятые косинусные окна.
Для создания циклического суффикса первые выборки NWIN данного символа добавляются к концу этого символа. Однако для соответствия стандарту 802.11g, например, длина символа не может быть произвольно увеличена. Вместо этого циклический суффикс должен перекрываться по времени и эффективно суммируется с циклическим префиксом следующего символа. Этот перекрывающийся сегмент является местом применения оконной обработки. Применяются два окна, одно из которых является математическим обратным другому. Первое приподнятое косинусное окно применяется к циклическому суффиксу символа k и уменьшается от 1 до 0 по его длительности. Второе приподнятое косинусное окно применяется к циклическому префиксу символа k + 1 и увеличивается от 0 до 1 по его длительности. Этот процесс обеспечивает плавный переход от одного символа к другому.
Приподнятое косинусное окно w (t) во временной области может быть выражено как:
иначе
где:
T - длительность символа OFDM, включая защитный интервал.
TW - длительность окна.
Настройте длину циклического суффикса с помощью свойства установки длины окна, при этом длина суффикса будет находиться в диапазоне от 1 до минимальной длины циклического префикса. В то время как оконная обработка улучшает спектральный рост, она делает это за счет устойчивости к многолучевому замиранию. Это происходит потому, что избыточность в защитной полосе уменьшается, потому что значения выборки защитной полосы нарушаются сглаживанием.
На следующих рисунках показано применение приподнятого косинусного окна.

[1] Дальман, Эрик, Стефан Парквалл и Йохан Скёльд. 4G LTE/LTE-Advanced для мобильного широкополосного доступа. Амстердам: Elsevier, Acad. Press, 2011.
[2] Эндрюс, Дж. Г., А. Гош и Р. Мухамед. Основы WiMAX. Река Верхнее Седло, Нью-Джерси: Прентис Холл, 2007.
[3] Agilent Technologies, Inc., «Увеличение косинусного окна OFDM», http://rfmw.em.keysight.com/wireless/helpfiles/n7617a/ofdm_raised_cosine_windowing.htm.
[4] Монтрёй, Л., Р. Продан и Т. Кользе. «Формирование символов TX OFDM 802,3млрд», https://www.ieee802.org/3/bn/public/jan13/montreuil_01a_0113.pdf. Вещание, 2013.
[5] «Стандарт IEEE 802.16TM-2009,» Нью-Йорк: IEEE, 2009.
Примечания и ограничения по использованию:
См. Системные объекты в создании кода MATLAB (кодер MATLAB).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.