文档介绍:
matlab卷积码程序
1、卷积码编码
function [output]=cnv_encd(input)
%output=cnv_encd(g,k0,input) 卷积码编码函数 %g end if( (state_metric(nextstate(j+1,1)+1,2)>state_metric(j+1,1)+branch_metric) | flag(nextstate(j+1,1)+1)==0 )
state_metric(nextstate(j+1,1)+1,2)=state_metric(j+1,1)+branch_metric; survivor_state(nextstate(j+1,1)+1,i+1)=j; flag(nextstate(j+1,1)+1)=1; end end
state_metric=state_metric(:,2:-1:1); end
% 从最正确路径中产生解码
% 译码过程可从数组survivor_state的最终一个位置向前逐级译码 state_sequence=zeros(1,depth_of_trellis+1);
state_sequence(1,depth_of_trellis)=survivor_state(1,depth_of_trellis+1); for i=1:depth_of_trellis
state_sequence(1,depth_of_trellis-i+1)=survivor_state((state_sequence(1,depth_of_trellis+2-i)+1),depth_of_trellis-i+2); end
decoder_output_matrix=zeros(k,depth_of_trellis-N+1); for i=1:depth_of_trellis-N+1
% 依据数组input的定义来得出从当前状态到下一个状态的输入信号矢量 dec_output_deci=input(state_sequence(1,i)+1,state_sequence(1,i+1)+1); dec_output_bin=deci2bin(dec_output_deci,k); % 将一次译码存入译码输出矩阵decoder_output_matrix相应的位置 decoder_output_matrix(:,i)=dec_output_bin(k:-1:1)'; end
decoder_output=reshape(decoder_output_matrix,1,k*(depth_of_trellis-N+1)); cumulate