Демодуляция символа NR символов комплексных данных

В этом примере показано, как использовать блок NR Symbol Demodulator, чтобы демодулировать комплексные символы данных NR к битам данных или значениям LLR. Рабочий процесс выполняет эти шаги:

  1. Настройте параметры входных данных.

  2. Сгенерируйте системы координат случайных входных выборок.

  3. Преобразуйте структурированные входные данные в поток выборок и импортируйте поток в Simulink.

  4. Запустите модель Simulink®, которая содержит блок NR Symbol Demodulator.

  5. Экспортируйте поток демодулируемых выборок от Simulink до рабочей области MATLAB®.

  6. Демодулируйте символы данных с nrSymbolDemodulate функционируйте, чтобы использовать его выход в качестве справочных данных.

  7. Сравните выходные данные блока Simulink со ссылочной функцией MATLAB выход.

Настройте параметры входных данных.

Сопоставьте имена модуляции к значениям. Численные значения используются, чтобы настроить блок NR Symbol Demodulator. Строки используются, чтобы сконфигурировать nrSymbolDemodulator функция.

rng(0);
framesize = 10;

% 0 - BPSK
% 1 - QPSK
% 2 - 16-QAM
% 3 - 64-QAM
% 4 - 256-QAM
% 5 - pi/2-BPSK
% others - QPSK
modSelVal = [0;1;2;3;4;5];
modSelStr = {'BPSK','QPSK','16QAM','64QAM','256QAM','pi/2-BPSK'};

decType = 'Soft';

numframes = length(modSelVal);
dataSymbols  = cell(1,numframes);
modSelTmp = cell(1,numframes);
nrFcnOutput = cell(1,numframes);

Сгенерируйте системы координат случайных входных выборок.

for ii = 1:numframes
    dataSymbols{ii} = complex(randn(framesize,1),randn(framesize,1));
    modSelTmp{ii} = fi(modSelVal(ii)*ones(framesize,1),0,3,0);
end

Преобразуйте обрамленные входные данные в поток выборок и введите поток к блоку Simulink Демодулятора Символа NR.

idlecyclesbetweensamples = 0;
idlecyclesbetweenframes  = 0;
[sampleIn, ctrl] = ltehdlFramesToSamples(dataSymbols,idlecyclesbetweensamples,...
    idlecyclesbetweenframes);
[modSel, ~] = ltehdlFramesToSamples(modSelTmp,idlecyclesbetweensamples,...
    idlecyclesbetweenframes);
validIn = logical(ctrl(:,3)');

sampletime = 1;
samplesizeIn = 1;
simTime = size(ctrl,1)*8;

Запустите модель Simulink.

modelname = 'nrhdlSymbolDemodulatorModel';
open_system(modelname);
set_param([modelname '/NRDemod/NR Symbol Demodulator'],'DecisionType',decType)
sim(modelname);

Экспортируйте поток демодулируемых выборок от Simulink до рабочего пространства MATLAB.

sampleOut = squeeze(sampleOut.Data).';
validOut  = squeeze(validOut.Data);
nrHDLOutput = sampleOut(validOut);

Демодулируйте символы данных с nrSymbolDemodulate функционируйте и используйте его выход в качестве справочных данных.

for ii = 1:numframes
 nrFcnOutput{ii} = nrSymbolDemodulate(dataSymbols{ii},modSelStr{ii},'DecisionType',decType,1).';
end

Сравните выход модели Simulink против выхода nrSymbolDemodulate функция.

fprintf('\nNR Symbol Demodulator\n');
nrFcnOutput = double(cell2mat(nrFcnOutput));
difference = abs(nrHDLOutput-nrFcnOutput(1:length(nrHDLOutput)));
avgError = sum(difference)/length(nrHDLOutput);

figure(1)
stem(nrHDLOutput,'b')
hold on
stem(nrFcnOutput,'--r')
grid on
legend('Reference','Simulink')
xlabel('Sample Index')
ylabel('Magnitude')
title('Comparison of Simulink block and MATLAB function')
NR Symbol Demodulator

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

Блоки