LTE демодуляция OFDM потоковой передачи выборок

В этом примере показано, как использовать блок 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

Смотрите также

Блоки