%P码产生的子程序Pcode:
function pcode=Pcode(a,NumberPCode,NumberShift) % P码产生
reg1a=[0 0 0 1 0 0 1 0 0 1 0 0];
reg1b=[0 0 1 0 1 0 1 0 1 0 1 0];
reg2a=[1 0 1 0 0 1 0 0 1 0 0 1];
reg2b=[0 0 1 0 1 0 1 0 1 0 1 0];
rx1a=0;
rx1b=0;
rx2a=0;
rx2b=0;
x1bWork=1;
x2aWork=1;
x2bWork=1;
N=NumberShift;
C1=4092*3750;
C2=4093*3749;
z1a=mod(N,4092);%取余数
x1a=mod([(N-z1a)/4092],3750);
y1a=(N-z1a-4092*x1a)/C1;
if ((N-C1*y1a)>=C2)
z1b=4092;
x1bWork=0;
x1b=3748;
else
z1b=mod((N-C1*y1a),4093);
x1bWork=1;
x1b=(N-z1b-C1*y1a)/4093;
end
m=mod(N,(C1+37));
y2a=(N-m)/(C1+37);
if (m>=C1)
dv=m-C1;
else
dv=0;
end
z2a=mod((m-dv),4092);
x2a=mod((((m-dv)-z2a)/4092),3750);
z2b=mod((m-dv),4093);
if (m>=C2)
x2b=3748;
else
x2b=(m-z2b)/4093;
end %各移位寄存器的状态
for i=1:z1a
slave1a=mod(reg1a(6)+reg1a(8)+reg1a(11)+reg1a(12),2);
reg1a(2:12)= reg1a(1:11);
reg1a(1)=slave1a;
end
for i=1:z1b
slave1b=mod(reg1b(1)+reg1b(2)+reg1b(5)+reg1b(8)+reg1b(9)+reg1b(10)+reg1b(11)+reg1b(12),2);
reg1b(2:12)=reg1b(1:11);
reg1b(1)=slave1b;
end
for i=1:z2a
slave2a=mod(reg2a(1)+reg2a(3)+reg2a(4)+reg2a(5)+reg2a(7)+reg2a(8)+reg2a(9)+reg2a(10)+reg2a(11+reg2a(12)) ,2);
reg2a(2:12)=reg2a(1:11);
reg2a(1)=slave2a;
end
for i=1:z2b
slave2b=mod(reg2b(2)+reg2b(3)+reg2b(4)+reg2b(8)+reg2b(9)+reg2b(12) ,2);
reg2b(2:12)=reg2b(1:11);
reg2b(1)=slave2b;
end %各控制变量的判断
if z1a==4091
rx1a=1;
end
if z1b==4092
rx1b=1;
end
if z2a==4091
rx2a=1;
x2aWork=0;
end
if z2b==4092
rx2b=1;
x2bWork=0;
end %开始产生P码
p=zeros(NumberPCode,1);
x1acou=0;
x1bcou=0;
x2acou=0;
x2bcou=0;
cou37=dv;
x2(1:a)=1;
for i=1:(NumberPCode+37)
x1(i)=mod( reg1a(12)+reg1b(12),2);
x2(i+a)=mod( reg2a(12)+reg2b(12),2); %寄存器x1b的移位函数
if x1bWork==1
if rx1b==0
slave1b=mod(reg1b(1)+reg1b(2)+reg1b(5)+reg1b(8)+reg1b(9)+reg1b(10)+reg1b(11)+reg1b(12),2);
reg1b(2:12)=reg1b(1:11);
reg1b(1)=slave1b;
else if rx1b==1
reg1b=[0 0 1 0 1 0 1 0 1 0 1 0];
rx1b=0;
end
end
else if x1bWork==0
end
end
if reg1b==[0 1 0 1 0 1 0 1 0 1 0 0 ]
rx1b=1;
x1bcou=x1bcou+1;
if x1bcou==3749
x1bwork=0;
x1bcou=0;
end
end %寄存器x1a的移位函数
if rx1a==0
slave1a=mod(reg1a(6)+reg1a(8)+reg1a(11)+reg1a(12),2);
reg1a(2:12)=reg1a(1:11);
reg1a(1)=slave1a;
else if rx1a==1
reg1a=[0 0 0 1 0 0 1 0 0 1 0 0];
rx1a=0;
end
end
if reg1a==[0 0 1 0 0 1 0 0 1 0 0 0]
rx1a=1;
x1acou=x1acou+1;
if x1acou==3750
x1bwork=1;
x1acou=0;
end
end %寄存器x2b的移位函数
if x2bWork==1
if rx2b==0
slave2b=mod(reg2b(2)+reg2b(3)+reg2b(4)+reg2b(8)+reg2b(9)+reg2b(12) ,2);
reg2b(2:12)=reg2b(1:11);
reg2b(1)=slave2b;
else if rx2b==1
x2bout=reg2b(11);
reg2b=[0 0 1 0 1 0 1 0 1 0 1 0];
rx2b=0;
end
end
else if x2bWork==0
reg2b=[0 0 1 0 1 0 1 0 1 0 1 0];
x2bWork=1;
rx2b=0;
end
end
if reg2b==[0 1 0 1 0 1 0 1 0 1 0 0]
rx2b=1;
x2bcou=x2bcou+1;
if x2bcou==3749
x2bWork=0;
x2bcou=0;
end
end %寄存器x2a的移位函数
if x2aWork==1
if rx2a==0
slave2a=mod(reg2a(1)+reg2a(3)+reg2a(4)+reg2a(5)+reg2a(7)+reg2a(8)+reg2a(9)+reg2a(10)+reg2a(11)+reg2a(12) ,2);
reg2a(2:12)=reg2a(1:11);
reg2a(1)=slave2a;
else if rx2a==1
reg2a=[1 0 1 0 0 1 0 0 1 0 0 1];
rx2a=0;
end
end
else if x2aWork==0
if rx2a==1
cou37=cou37+1;
if cou37==37
rx2a=0;
x2awork=1;
cou37=0;
end
end
end
end
if reg2a==[0 1 0 0 1 0 0 1 0 0 1 1]
rx2a=1;
x2acou=x2acou+1;
if x2acou==3750
x2awork=0;
x2acou=0;
end
end
end
for i=1:NumberPCode
p(i)= mod( x1(i)+x2(i),2);
end
p=p';
pcode=p';
评论7