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. Понижайте форму тестового сигнала до фактической частоты дискретизации для выбранного NDLRB. Затем компенсируйте коэффициент шкалы, который является результатом различия размеров БПФ.

refInput = resample(rx,FsTx,FsRx);
refGrid = lteOFDMDemodulate(info,refInput);
refGrid = refGrid * FsRx/FsTx;

Настройте входные данные модели Simulink™. Преобразуйте тестовую форму сигнала в тип данных с фиксированной точкой, чтобы смоделировать результат от 12-битного АЦП. Шаг расчета 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

См. также

Блоки