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

Этот пример показывает, как использовать блок 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] = ltehdlFramesToSamples(dataBits,idlecyclesbetweensamples,...
    idlecyclesbetweenframes);
[modSel, ~] = ltehdlFramesToSamples(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_ts.Data).';
validOut  = squeeze(validOut_ts.Data);
nrHDLOutput = sampleOut(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 

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

Блоки