В этом примере показано, как использовать блок NR Symbol Demodulator, чтобы демодулировать комплексные символы данных NR к битам данных или значениям LLR. Рабочий процесс выполняет эти шаги:
Настройте параметры входных данных.
Сгенерируйте системы координат случайных входных выборок.
Преобразуйте структурированные входные данные в поток выборок и импортируйте поток в Simulink.
Запустите модель Simulink®, которая содержит блок NR Symbol Demodulator.
Экспортируйте поток демодулируемых выборок от Simulink до рабочей области MATLAB®.
Демодулируйте символы данных с nrSymbolDemodulate
функционируйте, чтобы использовать его выход в качестве справочных данных.
Сравните выходные данные блока 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