Этот пример объясняет, как OFDM функционирует (nrOFDMModulate
, nrOFDMInfo
, и nrOFDMDemodulate
) установите значение по умолчанию для входа размера быстрого преобразования Фурье (FFT), Nfft
, когда вы вызываете функцию OFDM, и эти условия применяются.
Вы задаете пользовательское значение для входа частоты дискретизации, SampleRate
.
Вы не задаете значение для Nfft
введите или вы задаете 'Nfft',[]
.
Значение, которое вы устанавливаете для SampleRate
введите определяет частоту дискретизации формы волны.
Номинальная частота дискретизации, соответствующая размеру БПФ, используемому в модуляции OFDM, , равно Nfft * carrier.SubcarrierSpacing * 1000
, где carrier
входной параметр вызова функции, задавая настройку несущей.
Поскольку передискретизация OFDM-модулируемой формы волны на коэффициент SampleRate/
, передискретизация является дорогостоящей если SampleRate
и не имейте больших общих множителей.
Значение по умолчанию установлено для Nfft
введите удовлетворяет этим условиям.
Nfft
является кратным 128, то есть, Nfft = 128 *
Y
(чтобы гарантировать длины циклического префикса с целочисленным знаком).
Нижняя граница Y
равно ceil((carrier.NSizeGrid * 12 / 0.85) / 128)
, то есть, нижняя граница зависит максимального заполнения БПФ 85%.
Верхняя граница Y
равно ceil((2 * SampleRate / (carrier.SubcarrierSpacing * 1000)) / 128)
, то есть, верхняя граница зависит от частоты дискретизации, которую вы задаете.
Y
максимизирует общие множители номинальных и заданных частот дискретизации, то есть, gcd
(, SampleRate
).
Создайте объект настройки несущей.
carrier = nrCarrierConfig;
Установите SampleRate
для каждого NSizeGrid
значение, чтобы дать заполнение точно 75%.
nSizeGrids = 1:275; userSampleRateDefaultNfft = zeros(1,275); fftOccupancy = zeros(1,275); for nSizeGrid = 1:275 carrier.NSizeGrid = nSizeGrid; % Transmission bandwidth of OFDM waveform txBW = carrier.NSizeGrid * 12 * carrier.SubcarrierSpacing * 1000; sr = txBW / 0.75; ofdmInfo = nrOFDMInfo(carrier,'SampleRate',sr); userSampleRateDefaultNfft(nSizeGrid) = ofdmInfo.Nfft; fftOccupancy(nSizeGrid) = carrier.NSizeGrid * 12 / ofdmInfo.Nfft; end
Постройте получившийся Nfft
значения.
figure; plot(nSizeGrids,userSampleRateDefaultNfft,'x'); title({'Nfft for Custom SampleRate' 'with Bandwidth Occupancy of 75%'}); axis([1 275 min(userSampleRateDefaultNfft) max(userSampleRateDefaultNfft)]); xlabel('NSizeGrid'); xticks([1 52 106 160 216 275]); ylabel('Nfft'); yticks([min(userSampleRateDefaultNfft) 1024:1024:8192 max(userSampleRateDefaultNfft)]);
Постройте получившееся заполнение БПФ.
figure; plot(nSizeGrids,fftOccupancy,'x'); title({'FFT Occupancy for Custom SampleRate' 'with Bandwidth Occupancy of 75%'}); axis([1 275 0 1]); xlabel('NSizeGrid'); xticks([1 52 106 160 216 275]); ylabel('FFT Occupancy');