В этом примере показано, как использовать блок модулятора символов LTE для модуляции битов данных на сложные символы данных. Из этого блока можно создать код HDL.
Настройка параметров входных данных. Выберите длину данных для каждого типа модуляции. Длина данных должна быть целочисленной кратной количеству битов на символ.
rng(0); framesize = 240; % Map modulation names to values % 0 - BPSK % 1 - QPSK % 2 - 16-QAM % 3 - 64-QAM % 4 - 256-QAM % others - QPSK % For LTE Symbol Modulator Simulink block modSelVal = [0;1;2;3;4]; % For |lteSymbolModulate| function modSelStr = {'BPSK','QPSK','16QAM','64QAM','256QAM'}; outWordLength = 16; numframes = length(modSelVal); dataBits = cell(1,numframes); modSelTmp = cell(1,numframes); lteFcnOutput = 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
Преобразование кадрированных входных данных в поток выборок и ввод потока в блок имитации модулятора символов LTE.
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 = 'ltehdlSymbolModulatorModel';
open_system(modelname);
sim(modelname);

Экспорт потока модулированных образцов из Simulink в рабочую область MATLAB.
sampleOut = squeeze(sampleOut).'; lteHDLOutput = sampleOut(squeeze(validOut));
Модулировать биты данных с помощью lteSymbolModulate и использовать его вывод в качестве ссылочных данных.
for ii = 1:numframes lteFcnOutput{ii} = lteSymbolModulate(dataBits{ii},modSelStr{ii}).'; end
Сравнение выходных данных модели Simulink с выходными данными lteSymbolModulate функция.
fprintf('\nLTE Symbol Modulator\n'); lteFcnOutput = fi(cell2mat(lteFcnOutput),1,outWordLength,outWordLength-2); difference = sum(abs(lteHDLOutput-lteFcnOutput(1:length(lteHDLOutput)))); fprintf('\nTotal number of samples differed between Simulink block output and Reference data output: %d \n',difference);
LTE Symbol Modulator Total number of samples differed between Simulink block output and Reference data output: 0