В этом примере показано, как использовать блок CCSDS RS Decoder, чтобы декодировать и восстановить сообщение с кодовой комбинации Тростника-Solomon (RS) по данным Консультативного Комитета по Системам передачи и обработки данных Пробела (CCSDS) стандарт. Сгенерируйте и закодируйте набор случайных входных параметров и затем предоставьте их, как введено ccsdsRSDecode
(Satellite Communications Toolbox) функция и блок CCSDS RS Decoder путем добавления ошибок. Сравните выход блока CCSDS RS Decoder с выходом ccsdsRSDecode
функция. Модель в качестве примера поддерживает генерацию HDL-кода для HDL CCSDS RS Decoder
подсистема.
Настройте переменные рабочей области для модели, чтобы использовать. Можно изменить эти значения переменных согласно требованиям. Блок поддерживает фиксированную длину кодовой комбинации 255.
k = 239; % Message length 223 or 239 s = k; % Shortened message length ranges from 1 to k i = 4; % Interleaving depth 1, 2, 3, 4, 5, or 8 numFrames = 3; % Number of input frames numErrors = 16; % Maximum number of correctable errors allowed in the input frame is (255-k)*i/2
Сгенерируйте случайные выборки с помощью заданной длины сообщения, сокращенной длины сообщения, и чередовав глубину. Закодируйте случайные выборки с помощью ccsdsRSEncode
функция, и затем вставляет numErrors
количество ошибок наугад местоположения в закодированных выборках.
% Generate random message samples msg = randi([0 255],s*i,1); % Encode message samples encoderOut = ccsdsRSEncode(msg,k,i,s); % Insert errors in encoded output errorLoc = randi([1 (255-k+s)*i],numErrors,1); errorVal = randi([1 255],numErrors,1); chOut = encoderOut; chOut(errorLoc) = errorVal;
Декодируйте закодированные данные, содержащие ошибки ccsdsRSDecode
функция.
[refOutput,refNErr] = ccsdsRSDecode(chOut,k,i,s); refOutput = repmat(refOutput,numFrames,1); refNErr = repmat(refNErr,numFrames,1);
Декодируйте закодированные данные, содержащие ошибки блок CCSDS RS Decoder. Выполнение модели импортирует переменные входного сигнала от рабочего пространства MATLAB до блока CCSDS RS Decoder в модели.
% Set frame gap between input frames if(k == 223 && (i == 1 || i == 2)) frameGap = 602-(255*i); else frameGap = 0; end % Assign inputs to model dataIn = repmat([chOut; zeros((k-s)*i,1); zeros(frameGap,1)],numFrames,1); startIn = repmat([true; false(255*i -1,1); false(frameGap,1)],numFrames,1); endIn = repmat([false((255-k+s)*i -1,1); true; false((k-s)*i,1); ... false(frameGap,1)],numFrames,1); validIn = repmat([true((255-k+s)*i,1); false((k-s)*i,1); ... false(frameGap,1)],numFrames,1); numOutputSamples = k*i; stopTime = (3065 + numOutputSamples)*numFrames; % Maximum latency of the % block is 3065 clock cycles % Run the Simulink model model_name = 'HDLCCSDSRSDecoder'; open_system(model_name); set_param([model_name '/HDL CCSDS RS Decoder/CCSDS RS Decoder'], ... 'MessageLength',num2str(k),'InterleavingDepth',num2str(i)); sim(model_name);
Сравните блок CCSDS RS Decoder выход с ccsdsRSDecode
функциональный выход.
dataOut = squeeze(decOut); validOut = squeeze(validOut); endOut = squeeze(endOut); numCorrErrOut = squeeze(numCorrErr); simOutput = dataOut(validOut); fprintf('\nHDL CCSDS RS Decoder\n'); difference = double(simOutput) - double(refOutput); fprintf(['\nTotal number of samples that differ between Simulink block output ' ... 'and MATLAB function output is: %d \n'],sum(difference));
HDL CCSDS RS Decoder Total number of samples that differ between Simulink block output and MATLAB function output is: 0
ccsdsRSDecode
(Satellite Communications Toolbox)