В этом примере показано, как использовать блок 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);
Добавьте белый Гауссов шум в форму волны передатчика.
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);
Чтобы декодировать демодулируемую форму волны, симулируйте 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);
Сравните выход блока 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
ccsdsRSDecode
(Satellite Communications Toolbox) | ccsdsTMWaveformGenerator
(Satellite Communications Toolbox)