В этом примере показано, как использовать блок DVBS2 Symbol Demodulator, чтобы демодулировать символы комплексных данных к значениям LLR. Сгенерируйте набор комплексных случайных входных параметров и обеспечьте их как вход с блоком и функцией MATLAB® refDVBS2SymDemod
. Сравните выход блока с выходом refDVBS2SymDemod
функция. Эта ссылочная функция использует comm.PSKDemodulator
объект и dvbsapskdemod
функция от Communications Toolbox™.
Настройте входные переменные. Можно изменить значения переменных в этом разделе на основе требований.
rng(0); framesize = 8; % framesize must be a multiple of 8 modIdx = [1;3;0;2;4]; % modIdx must be 0, 1, 2, 3, and 4, % which correspond to the modulation schemes % QPSK, 8-PSK, 16-APSK, 32-APSK and % pi/2-BPSK, respectively codeRateIdx = [5;10;6;7;9;8]; % codeRateIdx values can be 5, 6, 7, 8, 9, 10 % that correspond to the code rates 2/3, % 3/4, 4/5, 5/6, 8/9, and 9/10, respectively UnitAvgCheckBox = 'on'; % on to enable and off to disable Unit average power option % Initialize variables numframes = length(modIdx); dataSymbols = cell(1,numframes); modSelTmp = cell(1,numframes); modOrder = cell(1,numframes); codeRateStr = cell(1,numframes); referenceOutput = cell(1,numframes); codeRateIndTmp = cell(1,numframes);
Сгенерируйте системы координат комплексных случайных выборок с помощью функции MATLAB randn
.
for ii = 1:numframes dataSymbols{ii} = complex(randn(framesize,1),randn(framesize,1)); modSelTmp{ii} = fi(modIdx(ii)*ones(framesize,1),0,3,0); codeRateIndTmp{ii} = fi(codeRateIdx(ii)*ones(framesize,1),0,4,0); end if strcmp(UnitAvgCheckBox,'on') UnitAvgPower = true; else UnitAvgPower = false; end
Преобразуйте системы координат комплексных случайных выборок к потоку комплексных случайных выборок, чтобы предоставить их, как введено блоку.
idlecyclesbetweensamples = 0; idlecyclesbetweenframes = 0; [dataIn, ctrl] = whdlFramesToSamples(dataSymbols,idlecyclesbetweensamples, ... idlecyclesbetweenframes); [modInd, ~] = whdlFramesToSamples(modSelTmp,idlecyclesbetweensamples, ... idlecyclesbetweenframes); [codeRateInd, ~] = whdlFramesToSamples(codeRateIndTmp,idlecyclesbetweensamples, ... idlecyclesbetweenframes); startIn = logical(ctrl(:,1)'); endIn = logical(ctrl(:,2)'); validIn = logical(ctrl(:,3)'); sampletime = 1; samplesizeIn = 1; simTime = size(ctrl,1)*8;
HDL DVBS2 Symbol Demodulator
подсистема содержит блок DVBS2 Symbol Demodulator. Выполнение модели импортирует переменные dataIn
входного сигнала,
startIn
, endIn
, validIn
, modIdx
, и codeRateIdx
с блоком из скрипта и экспорта поток демодулируемых выходных выборок dataOut
и шина управления, содержащая startOut
, endOut
, и validOut
сигналы от блока до рабочего пространства MATLAB.
modelname = 'HDLDVBS2SymbolDemodulator'; open_system(modelname); set_param([modelname '/DVBS2SymbolDemod/DVBS2 Symbol Demodulator'],'UnitAveragePower',UnitAvgCheckBox) symDemodOut = sim(modelname);
Чтобы демодулировать поток случайных выборок, предоставьте их, как введено refDVBS2SymDemod
функция. Можно использовать выход этой функции как ссылка, чтобы сравнить выход блока.
for ii = 1:numframes inpParamFr.modIdx = modIdx(ii); inpParamFr.codeRateIdx = codeRateIdx(ii); referenceOutput{ii} = refDVBS2SymDemod(dataSymbols{ii},inpParamFr,UnitAvgCheckBox); end
Сравните выход блока DVBS2 Symbol Demodulator с выходом refDVBS2SymDemod
функция.
startIdx = find(symDemodOut.startOut.Data); endIdx = find(symDemodOut.endOut.Data); actualData = cell(1,numframes); for ii = 1:numframes idx = startIdx(ii):endIdx(ii); tmpDataOut = symDemodOut.dataOut.Data(:,idx); dataOutSqueezed = squeeze(tmpDataOut); tmpValidOut = symDemodOut.validOut.Data(:,idx); demodOut = tmpDataOut(:,tmpValidOut); actualData{ii} = double(demodOut(:)); end referenceOutput = double(cell2mat(referenceOutput.')); actualData = double(cell2mat(actualData.')); figure(1) stem(actualData,'-bo') hold on stem(referenceOutput,'-r*') grid on legend('Reference Output','Block Output') xlabel('Sample Index') ylabel('Magnitude') title('Comparison of Simulink Block and MATLAB Function')
DVBS2 Symbol Demodulator | comm.PSKDemodulator
| dvbsapskdemod