В этом примере показано, как использовать блок модулятора символов NR для модуляции битов данных на сложные символы данных. Из этого блока можно создать код 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