Демодулируйте сигнал частотной области, использующий ортогональное частотное разнесение (OFDM)
выполняет демодуляцию OFDM на входном сигнале области времени, заданном в outSym
= ofdmdemod(ofdmSig
,nfft
,cplen
)ofdmSig
, использование размера БПФ задано nfft
и длина циклического префикса задана cplen
. Для получения информации см. Демодуляцию OFDM.
удаляет пустые поднесущие из местоположений, заданных в outSym
= ofdmdemod(ofdmSig
,nfft
,cplen
,symOffset
,nullidx
)nullidx
. Для этого синтаксиса смещение выборки символа применяется к каждому символу OFDM, и количеством строк в выходе является nfft
– длина (
, который составляет удаление пустых поднесущих. Используйте пустые поднесущие с учетом поднесущие DC и защитных полос. Для получения информации смотрите Распределение поднесущих и Защитные полосы.nullidx
)
[
возвращает пилотные поднесущие для экспериментальных индексов, заданных в outSym
,pilots
] = ofdmdemod(ofdmSig
,nfft
,cplen
,symOffset
,nullidx
,pilotidx
)pilotidx
. Для этого синтаксиса смещение выборки символа применяется к каждому символу OFDM, и количеством строк в выходе является nfft
– длина (
– nullidx
)длина (
, который составляет удаление пустого указателя и пилотных поднесущих. Функция принимает, что местоположение пилотных поднесущих является тем же самым через каждый символ OFDM и передающую антенну.pilotidx
)
OFDM-демодулируйте сигнал с различными длинами CP для различных символов.
Инициализируйте входные параметры, задав местоположения для пустых и пилотных поднесущих. Сгенерируйте случайные данные и выполните модуляцию OFDM.
nfft = 64; cplen = [16 32]; nSym = 2; dataIn = complex(randn(nfft,nSym),randn(nfft,nSym)); y1 = ofdmmod(dataIn,nfft,cplen);
Демодулируйте символы OFDM. Сравните результаты с исходными входными данными. Различие между сигналами незначительно.
x1 = ofdmdemod(y1,nfft,cplen); max(x1-dataIn)
ans = 1×2 complex
10-15 ×
0.2220 - 0.7772i 0.2498 - 0.8882i
Примените OFDM, мультиплексирующий к 16-QAM сигналу, отфильтрованному ссылкой SISO с Релеевским замиранием.
Инициализируйте переменные симуляции и создайте Канал с релеевским замиранием и объекты схемы созвездия.
s1 = RandStream('mt19937ar','Seed',12345); nFFT = 64; cpLen = 16; nullIdx = [1:6 33 64-4:64].'; numTones = nFFT-length(nullIdx); k = 4; % bits per symbol M = 2^k; constSym = qammod((0:M-1),M,'UnitAveragePower',true); % reference constellation symbols maxDopp = 1; pathDelays = [0 4e-3 8e-3]; pathGains = [0 -2 -3]; sRate = 1000; sampIdx = round(pathDelays/(1/sRate)) + 1; chan = comm.RayleighChannel('PathGainsOutputPort',true, ... 'MaximumDopplerShift',maxDopp, ... 'PathDelays',pathDelays, ... 'AveragePathGains',pathGains, ... 'SampleRate',sRate, ... 'RandomStream','mt19937ar with seed'); cdScope = comm.ConstellationDiagram('ShowReferenceConstellation',true, ... 'ReferenceConstellation',constSym);
Сгенерируйте данные сигнала и примените 16-QAM модуляцию.
data = randi(s1,[0 M-1],numTones,1);
modOut = qammod(data,M,'UnitAveragePower',true);
Примените модуляцию OFDM и передайте сигнал через канал.
y = ofdmmod(modOut,nFFT,cpLen,nullIdx); [fadSig,pg] = chan(y);
Определите смещение выборки символа.
symOffset = min(max(sampIdx),cpLen)
symOffset = 9
OFDM демодулируют полученный сигнал с временным сдвигом. Отобразите схему созвездия перед эквализацией.
x = ofdmdemod(fadSig,nFFT,cpLen,symOffset,nullIdx); cdScope(x);
Преобразуйте вектор из усилений пути, pg
, к скалярным усилениям касания, которые соответствуют поднесущим данных, h_datasubcarr
. Используйте h_datasubcarr
коснитесь усилений для эквализации во время восстановления сигнала.
hImp = complex(zeros(nFFT,1)); hImp(sampIdx) = mean(pg,1); hall = fftshift(fft(hImp)); dataIdx = setdiff((1:nFFT)',nullIdx); h_datasubcarr = hall(dataIdx);
Компенсируйте сигнал. Отобразите схему созвездия после эквализации.
eqSig = x ./ h_datasubcarr; cdScope(eqSig);
Демодулируйте 16-QAM символы, чтобы восстановить сигнал. Вычислите коэффициент ошибок символа.
rxSym = qamdemod(eqSig,M,'UnitAveragePower',true); numErr = symerr(data,rxSym); disp(['Number of symbol errors: ' num2str(numErr) ' out of ' num2str(length(data)) ' symbols.'])
Number of symbol errors: 2 out of 52 symbols.
OFDM-демодулируйте ввод данных, который включает пустую и экспериментальную упаковку.
Инициализируйте входные параметры, задав местоположения для пустых и пилотных поднесущих. Сгенерируйте случайные данные и выполните модуляцию OFDM.
nfft = 64; cplen = 16; nSym = 10; nullIdx = [1:6 33 64-4:64]'; pilotIdx = [12 26 40 54]'; numDataCarrs = nfft-length(nullIdx)-length(pilotIdx); dataIn = complex(randn(numDataCarrs,nSym),randn(numDataCarrs,nSym)); pilots = repmat(pskmod((0:3).',4),1,nSym); y2 = ofdmmod(dataIn,nfft,cplen,nullIdx,pilotIdx,pilots);
Демодулируйте символы OFDM. Сравните результаты с исходными входными данными, чтобы показать, что существует незначительное различие между демодулируемым сигналом и исходными данными и экспериментальными сигналами.
symOffset = cplen; [x2,rxPilots] = ofdmdemod(y2,nfft,cplen,symOffset,nullIdx,pilotIdx); max(x2-dataIn)
ans = 1×10 complex
10-15 ×
0.5551 + 0.2220i 0.2220 + 0.4441i 0.4441 - 0.2220i 0.4718 - 0.3331i -0.1665 - 0.4441i -0.3331 - 0.8049i 0.6661 - 0.2220i 0.0000 + 0.5829i 0.2220 + 0.4441i 0.3331 + 0.4441i
max(rxPilots-pilots)
ans = 1×10 complex
10-15 ×
0.0000 + 0.3331i 0.1837 - 0.2220i -0.4441 - 0.2776i 0.2220 + 0.2220i 0.2220 - 0.1665i 0.0000 - 0.3445i 0.3331 + 0.0441i -0.4441 - 0.1225i 0.4441 + 0.1943i 0.4441 + 0.3192i
ofdmSig
— Модулированные символы OFDMМодулированные символы OFDM в виде 2D массива комплексных символов.
Типы данных: double |
single
Поддержка комплексного числа: Да
nfft
— Длина БПФДлина БПФ в виде целого числа, больше, чем или равный 8. nfft
эквивалентно количеству поднесущих, используемых в процессе демодуляции.
Типы данных: double
cplen
— Длина циклического префиксаДлина циклического префикса в виде скаляра или как вектор-строка из длины N Sym.
Когда вы задаете cplen
как скаляр, длина циклического префикса является тем же самым для всех символов через все антенны.
Когда вы задаете cplen
как вектор-строка из длины N Sym, длина циклического префикса может варьироваться через символы, но остается та же длина через все антенны.
Типы данных: double
symOffset
— Выборка символа возмещенаcplen
(значение по умолчанию) | скаляр | вектор-строкаСмещение выборки символа в виде значений от 0 до cplen
.
Если вы не задаете symOffset
, значением по умолчанию является смещение, равное cplen
.
Если вы задаете symOffset
как скаляр, то же смещение используется для всех символов.
Если вы задаете symOffset
как вектор-строка, значение смещения может отличаться для каждого символа.
Для получения информации смотрите Смещение Работы с окнами и Символа.
Типы данных: double
nullidx
— Индексы местоположений пустой поднесущейИндексы местоположений пустой поднесущей в виде вектор-столбца со значениями элемента от 1 до nfft
. Если вы задаете nullidx
, количество строк в outSym
(
. Для получения информации смотрите Распределение поднесущих и Защитные полосы.nfft
- длина (nullidx
))
Типы данных: double
pilotidx
— Индексы местоположения пилотных поднесущихИндексы местоположения пилотных поднесущих в виде вектор-столбца со значениями элемента от 1 до nfft
. Если вы задаете pilotidx
, количество строк в outSym
(
Информация о.For, смотрите Распределение поднесущих и Защитные полосы.nfft
- длина (nullidx
) - длина (pilotidx
))
Типы данных: double
outSym
— Выведите демодулируемые символыВыведите демодулируемые символы, возвращенные как N D NSym NR массивом символов. N D должен равняться nfft
– длина (
– nullidx
)длина (
. N Sym является количеством символов OFDM на антенну. N R является количеством, получают антенны. Для получения информации см. Демодуляцию OFDM.pilotidx
)
pilots
— Пилотные поднесущиеПилотные поднесущие, возвращенные как Пилот N NSym NR массивом символов. Пилот N должен равняться длине pilotidx
. N Sym является количеством символов OFDM на антенну. N R является количеством, получают антенны. Функция принимает, что местоположение пилотных поднесущих является тем же самым через каждый символ OFDM и передающую антенну. Используйте comm.OFDMDemodulator
варьироваться местоположение пилотных поднесущих через символы OFDM или антенны.
Демодулятор OFDM демультиплексирует сигнал временной области мультиподнесущей с помощью ортогональной модуляции деления частоты.
Демодуляция OFDM использует операцию FFT, которая приводит к потокам данных параллели N. Демодулятор 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 символа.
Пока промежуток дисперсии времени не превышает длительность циклического префикса, преимущество циклической префиксной вставки обеспечено.
Вставка циклического префикса приводит к частичному сокращению пользовательской пропускной способности, потому что циклический префикс занимает пропускную способность, которая могла бы использоваться для передачи данных.
Чтобы уменьшать интерференцию межсимвола (ISI), введенный работой с окнами сигнала, примененной в передатчике, функция применяет дробное смещение символа перед демодуляцией каждого символа OFDM. К работе с окнами сигнала часто применяются переданные символы OFDM, чтобы сглаживать разрыв между последовательными символами OFDM. Работа с окнами уменьшает межсимвол внеполосный ISI эмиссии но увеличений.
Оконный символ OFDM состоит из циклического префикса (CP), данных о символе ODFM, плюс области работы с окнами вначале и конец символа. Начальные и конечные плечи работы с окнами имеют хвосты как показано на рисунке.
Чтобы уменьшать ISI, можно выровнять демонстрационную синхронизацию сигнала путем определения смещения выборки символа, которое применяется перед демодуляцией символа OFDM.
Задайте смещение выборки символа как значение с 0 на CP L.
Когда смещение выборки символа является скаляром с 0 на CP L, окно FFT начинает в X +1 выборку длины CP.
Когда смещение выборки символа является нулем, никакое смещение не применяется, и окно FFT запускается на первой выборке символа.
Когда смещение выборки символа является длиной циклического префикса, CP L, окно FFT начинается после последней выборки CP. Это смещение является настройкой по умолчанию, если смещение выборки символа не задано.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.