Модулируйте сигнал с помощью метода OFDM
OFDMModulator
объект модулирует сигнал с помощью ортогонального метода модуляции деления частоты. Выход представляет собой репрезентацию модулированного сигнала.
Модулировать сигнал с помощью OFDM:
Создайте comm.OFDMModulator
объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?
создает Систему модулятора OFDM object™.hMod
= comm.OFDMModulator
задает Свойства с помощью одного из большего количества аргументов пары "имя-значение". Заключите каждое имя свойства в кавычки. Например, hMod
= comm.OFDMModulator(Name
,Value
)comm.OFDMModulator('NumSymbols',8)
задает восемь символов OFDM в сетке частоты времени.
устанавливает свойства системного объекта модулятора OFDM на основе заданного системного объекта демодулятора OFDM hMod
= comm.OFDMModulator(hDemod
)comm.OFDMDemodulator
.
Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release
функция разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.
FFTLength
— Количество точек БПФ
(значение по умолчанию) | положительное целое числоКоличество Быстрого преобразования Фурье (FFT) указывает в виде положительного целого числа. Длина БПФ, БПФ N, должна быть больше или быть равна 8 и эквивалентна количеству поднесущих.
Типы данных: double
NumGuardBandCarriers
— Количество поднесущих к левым и правым защитным полосам
(значение по умолчанию) | двухэлементный вектор-столбец целых чиселКоличество поднесущих, выделенных левым и правым защитным полосам в виде двухэлементного вектор-столбца целых чисел. Количество поднесущих должно находиться в пределах [0, NFFT/2 − 1]. Этот вектор имеет форму [N leftG, N rightG], где N leftG и N rightG задают левые и правые защитные полосы, соответственно.
Типы данных: double
InsertDCNull
— Опция, чтобы вставить пустой указатель DCfalse
или 0
(значение по умолчанию) | true
или 1
Опция, чтобы вставить пустой указатель DC в виде числового или логического 0
ложь
) или 1
TRUE
). Поднесущая DC является центром диапазона частот и имеет значение индекса:
(FFTLength
/ 2) + 1, когда FFTLength
является четным
(FFTLength
+ 1) / 2, когда FFTLength
является нечетным
PilotInputPort
— Опция, чтобы задать экспериментальный входfalse
или 0
(значение по умолчанию) | true
или 1
Опция, чтобы задать экспериментальный вход в виде числового или логического 0
ложь
) или 1
TRUE
). Если этим свойством является 1
TRUE
), можно присвоить отдельные поднесущие для экспериментальной передачи. Если этим свойством является 0
ложь
), экспериментальная информация принята, чтобы быть встроенной во входные данные.
PilotCarrierIndices
— Индексы пилотной поднесущей
(значение по умолчанию) | вектор-столбецИндексы пилотной поднесущей в виде вектор-столбца. Если свойство PilotCarrierIndices установлено в 1
TRUE
), можно задать индексы пилотных поднесущих. Можно присвоить индексы тем же или различным поднесущим для каждого символа. Точно так же экспериментальные индексы несущей могут отличаться через несколько передающих антенн. В зависимости от желаемого уровня управления для присвоений индекса варьируются размерности свойства. Допустимые экспериментальные индексы падают в области значений
где значение индекса не может превысить количество поднесущих. Когда экспериментальные индексы являются тем же самым для каждого символа и передающей антенны, свойство имеет размерности N pilot-1. Когда экспериментальные индексы варьируются через символы, свойство имеет размерности N pilot-by-Nsym. Если вы передаете только один символ, но несколько передающих антенн, свойство имеет размерности пилот N 1 Nt., где N t. является количеством передающих антенн. Если индексы варьируются через количество символов и передающих антенн, свойство имеет размерности пилот N Nsym Nt. Если количество передающих антенн больше один, гарантируйте, что индексы на символ должны быть взаимно отличными через антенны, чтобы минимизировать интерференцию.
Чтобы включить это свойство, установите PilotInputPort
свойство к 1
TRUE
).
CyclicPrefixLength
— Длина циклического префикса
(значение по умолчанию) | положительное целое число | вектор-строкаДлина циклического префикса в виде положительного целого числа. Если вы задаете скаляр, длина префикса является тем же самым для всех символов через все антенны. Если вы задаете вектор-строку из длины N sym, длина префикса может варьироваться через символы, но остается то же самое через все антенны.
Типы данных: double
Windowing
— Опция, чтобы применить повышенное окно косинуса между символами OFDMfalse
или 0
(значение по умолчанию) | true
или 1
Опция, чтобы применить повышенное окно косинуса между символами OFDM в виде true
или false
. Работа с окнами является процессом, в котором символ OFDM умножается на повышенное окно косинуса перед передачей, чтобы более быстро уменьшить мощность внеполосных поднесущих. Работа с окнами уменьшает спектральный перерост.
WindowLength
— Длина повышенного окна косинуса
(значение по умолчанию) | положительная скалярная величинаДлина повышенного окна косинуса в виде положительной скалярной величины. Это значение должно быть меньше чем или равно минимальной длине циклического префикса. Например, в настройке четырех символов с длинами циклического префикса 12, 14, 16, и 18, длина окна должна быть меньше чем или равна 12.
Чтобы включить это свойство, установите Windowing
свойство к 1
TRUE
).
NumSymbols
— Количество символов OFDM
(значение по умолчанию) | положительное целое числоКоличество символов OFDM в сетке частоты времени в виде положительного целого числа.
NumTransmitAntennnas
— Количество передающих антенн
(значение по умолчанию) | положительное целое числоКоличество передающих антенн, используемых, чтобы передать OFDM модулируемый сигнал в виде положительного целого числа.
присваивает экспериментальный сигнал, waveform
= hMod(data
,pilot
)pilot
, в поднесущие частоты, заданные значением свойства PilotCarrierIndices hMod
системный объект. Чтобы включить этот синтаксис устанавливает свойство PilotCarrierIndices на true
.
insignal
— Введите сгенерированный модулированный сигналВведите сгенерированный модулированный сигнал в виде матрицы или трехмерного массива числовых значений. Входной сгенерированный модулированный сигнал должен иметь размер N f Nsym Nt. где N f является количеством поднесущих частоты, исключая пустой указатель DC и защитные полосы.
Типы данных: double
Поддержка комплексного числа: Да
data
— Входные данныеВходные данные в виде матрицы или трехмерного массива. Вход должен быть числовым из размера N d Nsym Nt. где N d является количеством поднесущих данных в каждом символе. Для получения дополнительной информации о том, как вычисляется N d, смотрите свойство PilotCarrierIndices.
Типы данных: double
Поддержка комплексного числа: Да
pilot
— Экспериментальный сигналЭкспериментальный сигнал в виде трехмерного массива числовых значений. Экспериментальный сигнал должен иметь размер пилот N Nsym Nt.
Типы данных: double
Поддержка комплексного числа: Да
waveform
— OFDM Модулируемый сгенерированный модулированный сигналOFDM Модулируемый сгенерированный модулированный сигнал, возвращенный как 2D массив. Если CyclicPrefixLength
свойство является скаляром, выходом waveform
имеет размер ((NFFT+CPlen) ⁎Nsym)-by-Nt. В противном случае размер (NFFT⁎Nsym + ∑ (CPlen))-by-Nt.
Типы данных: double
Поддержка комплексного числа: Да
Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj
, используйте этот синтаксис:
release(obj)
comm.OFDMModulator
info | Предоставьте информацию об определении размеров для модулятора OFDM |
showResourceMapping | Покажите отображение поднесущей символов OFDM, созданных Системным объектом модулятора OFDM |
Создайте и отобразите Систему модулятора 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)
Создайте Систему демодулятора 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)
Вставьте пустой указатель DC.
mod.InsertDCNull = true;
Покажите ресурс, сопоставляющий после добавления пустого указателя DC.
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
свойство как трехмерный массив, таким образом, что индексы для каждого символа отличаются среди антенн.
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, проверив, что длина циклического префикса изменяется через символы.
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
Операция OFDM делит высокоскоростной поток данных на подпотоки с более низкой скоростью передачи данных путем разложения частотной полосы передачи на N непрерывные индивидуально модулируемые поднесущие. Несколько параллельных и ортогональных поднесущих несут выборки почти с той же полосой пропускания как широкополосный канал. При помощи узких ортогональных поднесущих сигнал OFDM получает робастность по выборочному частотой исчезающему каналу и устраняет смежную интерференцию поднесущей. Интерференция межсимвола (ISI) уменьшается, потому что подпотоки с более низкой скоростью передачи данных имеют длительность символа, больше, чем распространение задержки канала.
Представление ортогональных поднесущих в частотной области в OFDM сигнале выглядит следующим образом:
Передатчик применяет обратное быстрое преобразование Фурье (ОБПФ) к символам N за один раз. Выход ОБПФ является суммой N ортогональные синусоиды:
где {X k} является символами данных, и T является длительностью OFDM символа. Символы данных X k является обычно комплексным и может быть от любого алфавита цифровых модуляций (например, QPSK, 16-QAM, 64-QAM).
Расстояние между поднесущими является Δf = 1/T; гарантирование, что поднесущие являются ортогональными по каждому символьному периоду, как показано ниже:
Модулятор OFDM состоит из преобразования из последовательной формы в параллельную, сопровождаемого банком комплексных модуляторов N, индивидуально соответствуя каждой OFDM поднесущей.
Отдельные OFDM поднесущие выделяются как данные, пилоты или пустые поднесущие.
Как показано здесь, поднесущие обозначены как данные, DC, пилот или поднесущие защитной полосы.
Поднесущие данных передают пользовательские данные.
Пилотные поднесущие используются для оценки канала.
Пустые поднесущие не передают данных. Поднесущие без данных используются, чтобы обеспечить пустой указатель DC и служить буферами между блоками ресурса OFDM.
Пустая поднесущая DC является центром диапазона частот со значением индекса (nfft
/2 + 1), если nfft
является четным, или ((nfft
+ 1) / 2), если nfft
является нечетным.
Защитные полосы обеспечивают буферы между последовательными OFDM символами, чтобы защитить целостность переданных сигналов путем сокращения межсимвольной интерференции.
Пустые поднесущие позволяют вам смоделировать защитные полосы и местоположения поднесущей DC для определенных стандартов, таких как различные виды 802.11, LTE, WiMAX, или для пользовательских распределений. Можно выделить местоположение нулей путем присвоения вектора индексов нулевых поднесущей.
Подобно защитным полосам защитные интервалы используются в OFDM, чтобы защитить целостность переданных сигналов путем сокращения межсимвольной интерференции.
Присвоение защитных интервалов походит на присвоение защитных полос. Можно смоделировать защитные интервалы, чтобы обеспечить временное разделение между OFDM символами. Защитные интервалы помогают сохранять межсимвольную ортогональность после прохождения сигнала по каналам с временной дисперсией. Защитные интервалы создаются с помощью циклических префиксов. Вставка циклического префикса копирует последнюю часть OFDM символа в качестве первой части OFDM символа.
Пока промежуток дисперсии времени не превышает длительность циклического префикса, преимущество циклической префиксной вставки обеспечено.
Вставка циклического префикса приводит к частичному сокращению пользовательской пропускной способности, потому что циклический префикс занимает пропускную способность, которая могла бы использоваться для передачи данных.
В то время как циклический префикс создает защитный период во временном интервале, чтобы сохранить ортогональность, символ OFDM редко начинается с той же амплитуды и фазы, показанной в конце предшествующего символа OFDM, вызывающего спектральный перерост и поэтому, распространение полосы пропускания сигнала из-за искажения интермодуляции. Чтобы ограничить этот спектральный перерост, это желаемо, чтобы создать плавный переход между последней выборкой символа и первой выборкой следующего символа. Это может быть сделано при помощи циклического суффикса и повышенной работы с окнами косинуса.
Чтобы создать циклический суффикс, первые выборки WIN N данного символа добавлены в конец того символа. Однако для того, чтобы выполнить стандарт 802.11g, например, длина символа не может быть произвольно удлинена. Вместо этого циклический суффикс должен перекрыться вовремя и эффективно суммирован с циклическим префиксом следующего символа. Этот перекрытый сегмент - то, где работа с окнами применяется. Два окна применяются, один из которых является математической инверсией другого. Первое повышенное окно косинуса применяется к циклическому суффиксу символа k и уменьшения от 1 до 0 по его длительности. Второе повышенное окно косинуса применяется к циклическому префиксу символа k +1 и увеличивается с 0 до 1 по его длительности. Этот процесс обеспечивает плавный переход от одного символа до следующего.
Повышенное окно косинуса, w (t), во временном интервале может быть описано как:
где:
T является длительностью символа OFDM включая защитный интервал.
T W является длительностью окна.
Настройте длину циклического суффикса через свойство установки длины окна с суффиксным набором длин между 1 и минимальная длина циклического префикса. В то время как работа с окнами улучшает спектральный перерост, она делает так за счет многопутевой исчезающей неприкосновенности. Это происходит, потому что сокращение в защитной полосе уменьшается, потому что демонстрационные значения защитной полосы поставились под угрозу сглаживанием.
Следующие фигуры отображают приложение повышенной работы с окнами косинуса.
[1] Дэхлмен, Эрик, Стефан Парквол и Йохан Скелд. 4G LTE/LTE-Advanced для Мобильной Широкополосной связи. Амстердам: Elsevier, Acad. Нажмите, 2011.
[2] Эндрюс, J. G. А. Гош и Р. Мухэмед. Основные принципы WiMAX. Верхний Сэддл-Ривер, NJ: Prentice Hall, 2007.
[3] Agilent Technologies, Inc., "OFDM Повышенная Работа с окнами Косинуса", https://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.16™-2009". Нью-Йорк: IEEE, 2009.
Указания и ограничения по применению:
Смотрите системные объекты в Генерации кода MATLAB (MATLAB Coder).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.