www.pudn.com > matlab.rar > cnv_encd.m, change:2015-04-19,size:1009b


function [output]=cnv_encd(input) 
%output=cnv_encd(g,k0,input) 卷积码编码函数 
%g  生成矩阵(2,1,7) 
%k0 输入码长 
%input  输入信源序列 
%output 输出卷积编码序列 
g=[1 1 1 1 0 0 1;1 0 1 1 0 1 1];%编码矩阵 
%g=[1 1 1;1 0 1];                                                     %  (2,1,7)生成矩阵G=[1 1 1 1 0 0 1;1 0 1 1 0 1 1];  
k0=1; 
%input = [1 0 1 1] 
if rem(length(input),k0)>0      %为了确定输入的码组是否是整数 
   input=[input,zeros(size(1:k0-rem(length(input),k0)))]; 
end 
n=length(input)/k0;   %输入码组数 
 
if rem(size(g,2),k0)>0 
   error('Error,g is not of the right size.') 
end 
 
li=size(g,2)/k0;   %约束长度 
n0=size(g,1);    %输出端口数 
 
u=[zeros(size(1:(li-1)*k0)),input,zeros(size(1:(li-1)*k0))]; 
%li-1为寄存器个数,确保输入开始时与输出结束时寄存器为全零状态 
u1=u(li*k0:-1:1); 
for i=1:n+li-2 
   u1=[u1,u((i+li)*k0:-1:i*k0+1)];%每一个时钟周期寄存器的状态与当时的输入码字 
end 
uu=reshape(u1,li*k0,n+li-1);%每一个时钟周期要进行的编码 
 
output=reshape(rem(g*uu,2),1,n0*(n+li-1));