Декодируйте тростник-Solomon CCSDS и сверточный каскадный код

В этом примере показано, как использовать блок CCSDS RS Decoder с блоком Viterbi Decoder, чтобы декодировать Тростник-Solomon (RS) и сверточный каскадный код по данным Консультативного Комитета по Системам передачи и обработки данных Пробела (CCSDS) стандарт. Подуровень кодирования синхронизации и канала стандарта TM CCSDS включает схему каскадного кодирования с кодом Рида-Соломона как внешний код и сверточный код как внутренний код. Пример поддерживает генерацию HDL-кода для HDL CCSDS Concatenated Decoder подсистема.

Настройте параметры каскадного кода

Задайте входные переменные. Можно изменить только k и i значения переменных в этом разделе на основе ваших требований.

% Reed-Solomon code parameters
n = 255;  % Codeword length
k = 223;  % Message length
i = 1;    % Interleaving depth

% Convolutional code parameters
convRate = '1/2';     % Convolutional code rate
K = 7;                % Constraint length
codePoly = [171 133]; % Code generator polynomial
trBackDepth = 32;     % Traceback depth

Сгенерируйте форму волны передатчика

Сгенерируйте форму волны передатчика с помощью ccsdsTMWaveformGenerator (Satellite Communications Toolbox) Система object™ в Satellite Communications Toolbox. Системный объект выполняет кодирование RS, сверточное кодирование и модуляцию QPSK на входных данных и генерирует форму волны передатчика.

% Generate random input data
dataBits = randi([0,1],k*i*8,1);

% Configure |ccsdsTMWaveformGenerator| System object
obj = ccsdsTMWaveformGenerator('WaveformSource','synchronization and channel coding',...
    'ChannelCoding','concatenated',...
    'ConvolutionalCodeRate',convRate,...
    'RSInterleavingDepth',i,...
    'RSMessageLength',223,...
    'HasRandomizer',false,...
    'HasASM',false,...
    'PulseShapingFilter','none',...
    'Modulation','QPSK');

% Call System object to generate RS and convolutional encoded and QPSK
% modulated transmitter waveform
tmWaveform = obj(dataBits);

Добавьте канал AWGN

Добавьте белый Гауссов шум в форму волны передатчика.

snrdB = 5; % SNR of noise in dB
snr = 10^(snrdB/10);
noiseVar = 1/snr;

% Generate noise with unit power
awgnUnitPow = (1/sqrt(2))*(randn(length(tmWaveform),1) ...
              +1i*randn(length(tmWaveform),1));

% Add noise to the transmitter waveform
chOut = tmWaveform + sqrt(noiseVar)*awgnUnitPow;

Демодулируйте форму волны приемника

Демодулируйте полученный канал AWGN выходная форма волны с помощью comm.PSKDemodulator Системный объект и готовит вход к модели Simulink®.

% Configure the |comm.PSKDemodulator| System object for QPSK demodulation
qpskDemod = comm.PSKDemodulator('ModulationOrder',4,...
    'PhaseOffset',pi/4,...
    'SymbolMapping','Custom',...
    'CustomSymbolMapping',[0 2 3 1],...  % Mapping as per the CCSDS standard
    'BitOutput',true,...
    'DecisionMethod','Approximate log-likelihood ratio',...
    'Variance',noiseVar);

% Call the System object to demodulate the received waveform and output the
% LLR values
demodOut = qpskDemod(chOut);

% Invert every alternate LLR value (starting from second LLR) to remove
% symbol inversion, according to the CCSDS standard
demodOut(2:2:end) = -demodOut(2:2:end);

% Normalize all LLR values with required soft wordlength
llrWL = 4;
maxDemodOut = max(abs(demodOut));
vitInput = fi(-demodOut*(2^(llrWL-1))/maxDemodOut,1,llrWL,0);

Декодируйте демодулируемую форму волны Используя модель Simulink

Чтобы декодировать демодулируемую форму волны, симулируйте CCSDSConcatenateDecoder.slx модель. Модель содержит Декодер Витерби и блоки Декодера CCSDS RS.

% Input signals for the Simulink model
dataIn = vitInput;
startIn = true;
endIn = [false(length(dataIn)/2 -1,1); true];
validIn = true(length(dataIn)/2,1);

% Set mask parameters of CCSDS RS Decoder block
modelName = 'CCSDSConcatenateDecoder';
subsystem = 'HDL CCSDS Concatenated Decoder';
open_system(modelName);
set_param([modelName '/' subsystem '/CCSDS RS Decoder'], ...
        'MessageLength',num2str(k), ...
        'InterleavingDepth',num2str(i));

% Stop time
vitLatency = 148;
upsampleFac = 8;
rsLatency = 3065; % Maximum latency of the CCSDS RS Decoder block
rsOutLen = k*i;
pipelineDelay = 17;
stopTime = vitLatency + (rsLatency+rsOutLen)*upsampleFac + pipelineDelay;

% Simulate the model
sim(modelName);

Сравните блок Simulink Выход с входом системного объекта MATLAB

Сравните выход блока CCSDS RS Decoder с входом ccsdsTMWaveformGenerator Системный объект.

fprintf('\nHDL CCSDS RS Decoder\n');
fprintf('Number of bits mismatched between decoded block output and System object input: %d',nnz(decodedBits~=dataBits))
HDL CCSDS RS Decoder
Number of bits mismatched between decoded block output and System object input: 0

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

Блоки

Функции