В этом примере показано, как использовать Энкодер CRC NR и блоки NR CRC Decoder Simulink® и выдержать сравнение, оптимизированные оборудованием результаты с результатами 5G Toolbox™ функционирует nrCRCEncode (5G Toolbox) и nrCRCDecode (5G Toolbox), соответственно. Эти блоки поддерживают скалярные и векторные входные параметры. Энкодер CRC NR и блоки Декодера CRC NR поддерживают аппаратную генерацию кода.
Сгенерируйте случайные системы координат входных данных и управляющего сигнала, который указывает на контуры системы координат. Разрыв системы координат вмещает задержку блока NR CRC Encoder.
CRCType = 'CRC24A'; numFrames = 4; scalar = true; % true for scalar inputs and false vector inputs parallel = false; % true for parallel architecture and false for % serial architecture msg = {numFrames}; dataIn = []; encStartIn = []; encEndIn = []; encValidIn = []; [poly,crcLen] = NRCRCEncodeAndDecoderHDLInitScript(CRCType); if parallel listN = divisors(crcLen); % Factors of length of CRC polynomial dataWidth = randsrc(1,1,listN(2:end)); else dataWidth = 1; end frameGap = 120; % Frame gap selected based on CRCType and dataWidth for ii = 1:numFrames len = randsrc(1,1,1:1000); frameLen = len*dataWidth; msg{ii} = randi([0 1],1,frameLen); % Generate data based on the selected dataWidth if scalar data = reshape(msg{ii},dataWidth,len); encIn = zeros(1,size(data,2)); for i = 1:size(data,2) encIn(i) = bit2int(data(:,i).',length(data(:,i))).'; %#ok<*SAGROW> end dataIn = fi([dataIn encIn zeros(size(encIn,1),frameGap)],0,dataWidth,0); else encIn = reshape(msg{ii},dataWidth,len); %#ok<*UNRCH> dataIn = logical([dataIn encIn zeros(size(encIn,1),frameGap)]); end encStartIn = logical([encStartIn 1 zeros(1,len-1) zeros(1,frameGap)]); encEndIn = logical([encEndIn zeros(1,len-1) 1 zeros(1,frameGap)]); encValidIn = logical([encValidIn ones(1,len) zeros(1,frameGap)]); end encSampleIn = timeseries(dataIn'); sampleTime = 1; simTime = length(encValidIn);
HDLNRCRCEncodeDecode подсистема содержит HDL NR CRC Encoder и HDL NR CRC Decoder подсистемы, которые содержат Энкодер CRC NR и блоки Декодера CRC NR, соответственно. Выполнение модели импортирует переменные encSampleIn входного сигнала, encStartIn, encEndIn, и encValidIn и переменные encSampleOut экспорта и encCtrlOut к рабочей области MATLAB®.
open_system('NRCRCEncodeAndDecodeHDLModel'); set_param('NRCRCEncodeAndDecodeHDLModel/HDLNRCRCEncodeDecode/HDL NR CRC Encoder/NR CRC Encoder','CRCType',CRCType); set_param('NRCRCEncodeAndDecodeHDLModel/HDLNRCRCEncodeDecode/HDL NR CRC Decoder/NR CRC Decoder','CRCType',CRCType); modelOut = sim('NRCRCEncodeAndDecodeHDLModel');

HDL NR CRC Encoder подсистема содержит блок NR CRC Encoder. Преобразуйте вывод данных потоковой передачи блока NR CRC Encoder к системам координат, и затем сравните выходные системы координат с выходом nrCRCEncode Функция 5G Toolbox.
encOut = squeeze(modelOut.encSampleOut.Data); startIdx = find(modelOut.encCtrlOut.start.Data); endIdx = find(modelOut.encCtrlOut.end.Data); encValidOut = squeeze(modelOut.encCtrlOut.valid.Data); vector = ~scalar && parallel; for ii = 1:numFrames refEncBits{ii} = nrCRCEncode(msg{ii}',poly); % Extract actual encoded bits from output idx = startIdx(ii):endIdx(ii); if (vector) % For vector inputs encBits = encOut(:,idx); encBits = encBits(:,encValidOut(idx)); actEncBits{ii} = encBits(:); else encBits = encOut(idx); encBits = encBits(encValidOut(idx)); encBits = dec2bin(encBits,dataWidth)-'0'; actEncBits{ii} = reshape(encBits',length(refEncBits{ii}),1); end error = sum(abs(refEncBits{ii}-double(actEncBits{ii}))); fprintf(['CRC-encoded frame %d: Behavioral and ' ... 'HDL simulation differ by %d bits\n'],ii,error); end
CRC-encoded frame 1: Behavioral and HDL simulation differ by 0 bits CRC-encoded frame 2: Behavioral and HDL simulation differ by 0 bits CRC-encoded frame 3: Behavioral and HDL simulation differ by 0 bits CRC-encoded frame 4: Behavioral and HDL simulation differ by 0 bits
HDL NR CRC Decoder подсистема содержит блок NR CRC Decoder. HDL NR CRC Encoder подсистема выходные параметры предоставляется как вход HDL NR CRC Decoder подсистема. HDL NR CRC Decoder подсистема экспортирует поток декодируемых выходных выборок decSampleOut и decErrOut наряду с управляющим сигналом decCtrlOut к рабочему пространству MATLAB. Сравните их с выходом nrCRCDecode функция.
dataOut = squeeze(modelOut.decSampleOut.Data); errOut = squeeze(modelOut.decErrOut.Data); startIdx = find(modelOut.decStartOut.Data); endIdx = find(modelOut.decEndOut.Data); validOut = squeeze(modelOut.decValidOut.Data); for ii = 1:numFrames [refDecBits{ii},refErr{ii}] = nrCRCDecode(double(actEncBits{ii}),poly); % Extract actual decoded bits from output idx = startIdx(ii):endIdx(ii); if (vector) % For vector inputs dataOutTmp = dataOut(:,idx); validOutTmp = validOut(:,idx); decBits = dataOutTmp(:,validOutTmp); actDecBits{ii} = decBits(:); else dataOutTmp = dataOut(idx); validOutTmp = validOut(idx); decBits = dataOutTmp(validOutTmp); decBits = dec2bin(decBits,dataWidth) - '0'; actDecBits{ii} = reshape(decBits',length(refDecBits{ii}),1); end actErr{ii} = errOut(endIdx(ii)); error_data = sum(abs(refDecBits{ii} - double(actDecBits{ii}))); error_err = double(refErr{ii}) - double(actErr{ii}); fprintf(['CRC-decoded frame %d: Behavioral and ' ... 'HDL simulation differ by %d bits and %d errors\n'],ii,error_data,error_err); end
CRC-decoded frame 1: Behavioral and HDL simulation differ by 0 bits and 0 errors CRC-decoded frame 2: Behavioral and HDL simulation differ by 0 bits and 0 errors CRC-decoded frame 3: Behavioral and HDL simulation differ by 0 bits and 0 errors CRC-decoded frame 4: Behavioral and HDL simulation differ by 0 bits and 0 errors
nrCRCEncode (5G Toolbox) | nrCRCDecode (5G Toolbox)