В этом примере показано, как использовать блок NR Symbol Modulator, чтобы модулировать биты данных к символам комплексных данных. Можно сгенерировать HDL-код от этого блока.
Настройте параметры входных данных. Выберите длину данных для каждого типа модуляции. Длина данных должна быть целочисленным количеством кратного битов на символ.
rng(0); framesize = 240; % Map modulation names to values % 0 - BPSK % 1 - QPSK % 2 - 16-QAM % 3 - 64-QAM % 4 - 256-QAM % 5 - pi/2-BPSK % others - QPSK % for NR Symbol Modulator Simulink block modSelVal = [0;1;2;3;4;5]; % for nrSymbolModulate function modSelStr = {'BPSK','QPSK','16QAM','64QAM','256QAM','pi/2-BPSk'}; outWordLength = 16; numframes = length(modSelVal); dataBits = cell(1,numframes); modSelTmp = cell(1,numframes); nrFcnOutput = cell(1,numframes);
Сгенерируйте системы координат случайных входных выборок.
for ii = 1:numframes dataBits{ii} = logical(randi([0 1],framesize,1)); modSelTmp{ii} = fi(modSelVal(ii)*ones(framesize,1),0,3,0); end
Преобразуйте обрамленные входные данные в поток выборок и введите поток к блоку Simulink.
idlecyclesbetweensamples = 0; idlecyclesbetweenframes = 0; [sampleIn, ctrl] = whdlFramesToSamples(dataBits,idlecyclesbetweensamples,... idlecyclesbetweenframes); [modSel, ~] = whdlFramesToSamples(modSelTmp,idlecyclesbetweensamples,... idlecyclesbetweenframes); load = logical(ctrl(:,1)'); validIn = logical(ctrl(:,3)'); sampletime = 1; samplesizeIn = 1; simTime = size(ctrl,1);
Запустите модель Simulink.
modelname = 'nrhdlSymbolModulatorModel';
open_system(modelname);
sim(modelname);
Экспортируйте поток модулируемых выборок от Simulink до рабочего пространства MATLAB.
sampleOut = squeeze(sampleOut).'; nrHDLOutput = sampleOut(squeeze(validOut));
Модулируйте биты данных системы координат с nrSymbolModulate, функционируют и используют выход этой функции как справочные данные.
for ii = 1:numframes nrFcnOutput{ii} = nrSymbolModulate(dataBits{ii},modSelStr{ii}).'; end
Сравните выход модели Simulink против выхода функции nrSymbolModulate.
fprintf('\nNR Symbol Modulator\n'); nrFcnOutput = fi(cell2mat(nrFcnOutput),1,outWordLength,outWordLength-2); error = sum(abs(nrHDLOutput-nrFcnOutput(1:length(nrHDLOutput)))); fprintf('\nTotal number of samples differed between Behavioral and HDL simulation: %d \n',error);
NR Symbol Modulator Total number of samples differed between Behavioral and HDL simulation: 0