exponenta event banner

Модуляция символов NR битов данных

В этом примере показано, как использовать блок модулятора символов 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 

См. также

Блоки