Viterbi Decoding Algorithm for Convolutional Codes 
Program1: 
input_seq = [1 0 1]; % Original input sequence 
input_seq = [1 0 1]; % Original input sequence 
g = [1 0 1; 1 1 1]; % Generator polynomials for (2,1) code 
% Create trellis structure 
trellis = poly2trellis(3,[5,7]); 
% Convolutional encoding 
encoded_seq = convenc(input_seq, trellis); 
disp('Encoded Sequence:'); 
disp(encoded_seq); 
% Simulate transmission with noise (introducing errors) 
received_seq = encoded_seq; 
% error_indices = randperm(length(encoded_seq), 2); % Introduce 
2 errors 
% received_seq(error_indices) = ~received_seq(error_indices); % 
Flip bits 
% disp('Received Sequence (with errors):'); 
disp(received_seq); 
% Viterbi decoding 
decoded_seq = vitdec(received_seq, trellis, 2, 'trunc','hard'); 
disp('Decoded Sequence:'); 
disp(decoded_seq); 
Program2 
trellis = poly2trellis([4 3],[4 5 17;7 4 2]); 
x = ones(100,1); 
code = convenc(x,trellis); 
tb = 2; 
decoded = vitdec(code,trellis,tb,'trunc','hard'); 
isequal(decoded,ones(100,1))