CRC NR кодирует и декодирует данные о потоковой передаче

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

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

Блоки

Функции