Это часть моего кода и одна из базовых c ссылок, которые я использовал для этого: https://www.mathworks.com/help/comm/examples/llr-vs-hard-decision-demodulation.html
pskModulator = comm.BPSKModulator;
pskDemodulator = comm.BPSKDemodulator('DecisionMethod','Log-likelihood ratio');
scalQuant = dsp.ScalarQuantizerEncoder('Partitioning','Unbounded');
ConEnc = comm.ConvolutionalEncoder('TrellisStructure',poly2trellis(7, [171 133]));
Vit = comm.ViterbiDecoder('TrellisStructure',poly2trellis(7, [171 133]),'InputFormat','Soft', ...
'SoftInputWordLength',3,'TracebackDepth',32);
%Generate data
data = randi([0 1],FrameLength*bitsPerSymbol,1);
%convolution
codedData = ConEnc(data);
% Modulate
modData = pskModulator(codedData); % Modulate
% Demodulate
rxData = pskDemodulator(modData); % Demodulate
%viterbi
quantizedValue = scalQuant(-rxData);
decodedData= Vit(double(quantizedValue));