В этом примере показано, как использовать блок LTE OFDM Demodulator, чтобы возвратить сетку ресурса LTE в потоковую передачу выборок. Можно сгенерировать HDL-код от этого блока.
Сгенерируйте символы входа LTE OFDM с помощью LTE Toolbox™. Выберите ссылочный канал на основе NDLRB и задайте тип циклического префикса.
enb = lteRMCDL('R.5'); enb.TotSubframes = 1; enb.CyclicPrefix = 'Normal'; % or 'Extended' % ------------------------------------------------------------ % NDLRB | Reference Channel % ------------------------------------------------------------ % 6 | R.4 % 15 | R.5 % 25 | R.6 % 50 | R.7 % 75 | R.8 % 100 | R.9 % ------------------------------------------------------------ [waveform,LTEGrid,info] = lteRMCDLTool(enb,[1;0;0;1]); %%In this example, the Input data sample rate parameter is set to |Use % maximum input data sample rate|. Hence, the LTE OFDM Demodulator block % expects input samples at 30.72 MHz sample rate to correspond to the % size of the FFT. The sample rate of |waveform| depends on NDLRB, % so the generated waveform might be at a lower rate. To generate % a test waveform, upsample the signal to 30.72 MHz, normalize the power, % and add noise. Scale the signal magnitude to be in the range -1 to 1 for % easy conversion to fixed-point types. FsRx = 30.72e6; FsTx = info.SamplingRate; % -------------------------------------------------------------- % NDLRB | Sampling Rate (MHz) % ------------------------------------------------------------ % 1) 6 | 1.92 % 2) 15 | 3.84 % 3) 25 | 7.68 % 4) 50 | 15.36 % 5) 75 | 30.72 % 6) 100 | 30.72 % ------------------------------------------------------------ tx = resample(waveform,FsRx,FsTx); avgTxPower = (tx' * tx) / length(tx); tx = tx / sqrt(avgTxPower); n = 0.1 * complex(randn(length(tx),1),randn(length(tx),1)); rx = tx + n; rx = 0.99 * rx / max(abs(rx));
Используйте функцию LTE Toolbox в качестве поведенческой ссылки для демодуляции OFDM. Downsample тестовая форма волны к фактической частоте дискретизации для выбранного NDLRB. Затем компенсируйте масштабный коэффициент, который следует из различия в размерах БПФ.
refInput = resample(rx,FsTx,FsRx); refGrid = lteOFDMDemodulate(info,refInput); refGrid = refGrid * FsRx/FsTx;
Настройте входные данные модели Simulink™. Преобразуйте тестовую форму волны в тип данных с фиксированной точкой, чтобы смоделировать результат 12-битного ADC. Шаг расчета Simulink составляет 30,72 МГц.
Модель Simulink импортирует демонстрационный поток dataIn
и validIn
, входные параметры NDLRB
и cyclicPrefixType
, и переменная stopTime
.
NDLRB = info.NDLRB; if strcmp(info.CyclicPrefix,'Normal') cyclicPrefixType = false; else cyclicPrefixType = true; end sampling_time = 1/FsRx; dataIn = fi(rx,1,12,11); validIn = true(length(dataIn),1);
Вычислите время симуляции Simulink, объяснив задержку блока LTE OFDM Demodulator. Задержка БПФ фиксируется, потому что блок использует БПФ с 2048 точками. Примите максимальную возможную задержку циклического префиксного удаления и операций выбора поднесущей. Симуляция должна запуститься достаточно долго, чтобы применить входные данные плюс задержка итогового вводимого символа.
FFTlatency = 4137; CPRemove_max = 512; % extended CP carrierSelect_max = 424; % NDRLB 100 stopTime = sampling_time*(length(dataIn)+CPRemove_max+FFTlatency+carrierSelect_max);
Запустите модель Simulink. Модель импортирует dataIn
и validIn
структуры и возвращают dataOut
и validOut
.
modelname = 'LTEOFDMDemodulatorExample'; open(modelname) set_param(modelname,'SampleTimeColors','on'); set_param(modelname,'SimulationCommand','Update'); sim(modelname)
Сравните выход модели Simulink против поведенческих результатов и вычислите SQNR оптимизированного HDL блока LTE OFDM Demodulator.
rxgridSimulink = dataOut(validOut); figure('units','normalized','outerposition',[0 0 1 1]) subplot(2,1,1) plot(real(refGrid(:))) hold on plot(squeeze(real(rxgridSimulink))) legend('Real part of behavioral waveform','Real part of HDL-optimized waveform') title('Comparison of LTE Time-Domain Downlink Waveform') xlabel('OFDM Subcarriers') ylabel('Real Part of Time-Domain Waveform') subplot(2,1,2) plot(imag(refGrid(:))) hold on plot(squeeze(imag(rxgridSimulink))) legend('Imag part of behavioral waveform','Imag part of HDL-optimized waveform') title('Comparison of LTE Time-Domain Downlink Waveform') xlabel('OFDM Subcarriers') ylabel('Imag Part of Time-Domain Waveform') sqnrRealdB = 10*log10(var(real(rxgridSimulink))/abs(var(real(rxgridSimulink))-var(real(refGrid(:))))); sqnrImagdB = 10*log10(var(imag(rxgridSimulink))/abs(var(imag(rxgridSimulink))-var(imag(refGrid(:))))); fprintf('\n LTE OFDM Demodulator: \n SQNR of real part is %.2f dB',sqnrRealdB) fprintf('\n SQNR of imaginary part is %.2f dB\n',sqnrImagdB)
LTE OFDM Demodulator: SQNR of real part is 25.98 dB SQNR of imaginary part is 23.23 dB