function [caCode] = codeGen(prn);
%10阶的移位寄存器G1和G2
%G1,G2寄存器初始化
regG1 = 1 * ones(1,10);
regG2 = 1 * ones(1,10);
%获取卫星PRN号码
snum = prn;
%snum = input('enter the satellite number = ');
%确定CA码的抽头选择
switch snum
case 1 %1号星
m = 2; n = 6;
case 2 %2号星
m = 3; n = 7;
case 3 %3号星
m = 4; n = 8;
case 4 %4号星
m = 5; n = 9;
case 5 %5号星
m = 1; n = 9;
case 6
m = 2; n = 10;
case 7
m = 1; n = 8;
case 8
m = 2; n = 9;
case 9
m = 3; n = 10;
case 10
m = 2; n = 3;
case 11
m = 3; n = 4;
case 12
m = 5; n = 6;
case 13
m = 6; n = 7;
case 14
m = 7; n = 8;
case 15
m = 8; n = 9;
case 16
m = 9; n = 10;
case 17
m = 1; n = 4;
case 18
m = 2; n = 5;
case 19
m = 3; n = 6;
case 20
m = 4; n = 7;
case 21
m = 5; n = 8;
case 22
m = 6; n = 9;
case 23
m = 1; n = 3;
case 24
m = 4; n = 6;
case 25
m = 5; n = 7;
case 26
m = 6; n = 8;
case 27
m = 7; n = 9;
case 28
m = 8; n = 10;
case 29
m = 1; n = 6;
case 30 %30号星
m = 2; n = 7;
case 31 %31号星
m = 3; n = 8;
case 32 %32号星
m = 4; n = 9;
end
%reg1存储移位寄存器regG1的1023点输出
for i= 1:1023
reg1(i) = regG1(10); %G1输出存储到reg1
temp = xor(regG1(3),regG1(10)); %移位寄存器G1的反馈
regG1(1,2:10) = regG1(1,1:9); %G1移位
regG1(1) = temp; %反馈
end
%reg2存储移位寄存器regG2的1023点输出
for i= 1:1023
reg2(i) = xor(regG2(m),regG2(n)); %G2输出存储到reg2
temp1 = xor(xor(regG2(2),regG2(3)), regG2(6)); %移位寄存器G2的反馈
temp2 = xor(xor(regG2(8),regG2(9)), regG2(10));
temp = xor(temp1,temp2);
regG2(1,2:10) = regG2(1,1:9); %G2移位
regG2(1) = temp; %反馈
end
%reg1和reg2的各元素异或得到1023点CA码
% ca = xor(reg1,reg2); %这里的CA码是1和0的序列,如果要用于BPSK调制,还需要将其中的0变成-1
% %前面产生的ca由于采用了逻辑运算符,因此其值只能为0或1,所以要将其赋给另一个没有这个限制的数组
% caCode = ones(1,length(ca));
% for i= 1:1023
% caCode(i) = ca(i);
% end
caCode = mod(reg1 + reg2 , 2);
评论1