抽头法原理图
代码和卫星编号
len表示码片长度,不同型号的卫星码片长度不尽相同
number1/number2数组表示不同的卫星编号
以上两参数都可自己填写,根据不同编号
function ca=CAgenerate(number1,number2)
%CA码的生成
%%%%%%%%%%%%%%%%%抽头法%%%%%%%%%%%%%%%%%%%%%%%%%%
number1=input('请选择第一个信号的编号(1-10的整数):');
number2=input('请选择第二个信号的编号(1-10的整数):');
code_chip=1023; %码片数
G1=ones(1,10);
G2=ones(1,10);%选择卫星1的初始10个码片的始化
G3=ones(1,10);
G4=ones(1,10);%选择卫星2的初始10个码片的始化
G2Table=[2,3,4,5,1,2,1,2,3,2;
6,7,8,9,9,10,8,9,10,3]; %1-10号卫星亦或上下一一对应的亦或码片的编号
for i=1:code_chip
R1(1)=mod(G2(G2Table(1,number1))+G2(G2Table(2,number1)),2); %选取卫星1 G1的码片
R2(1)=mod(G4(G2Table(1,number2))+G4(G2Table(2,number2)),2); %选取卫星2 G4的码片
rd1(i)=mod(R1(1)+G1(10),2);
rd2(i)=mod(R2(1)+G3(10),2);%扩频码输出
newBit1=mod(G1(3)+G1(10),2);%G1取码片模2(或亦或)
newBit2=mod(G3(3)+G3(10),2);%G1取码片模2(或亦或)
G1=[newBit1 G1(1:9)]; %G1码片右移
G3=[newBit2 G3(1:9)]; %G3码片右移
newBit3=[mod(G2(2)+G2(3)+G2(6)+G2(8)+G2(9)+G2(10),2)];%G2取码片模2(或者亦或)
newBit4=[mod(G4(2)+G4(3)+G4(6)+G4(8)+G4(9)+G4(10),2)];%G2取码片模2(或者亦或)
G2=[newBit3 G2(1:9)];%G2码片右移
G4=[newBit4 G4(1:9)];%G4码片右移
end
rd1(rd1==0)=-1;%扩频码只存在正负1;
rd2(rd2==0)=-1;%扩频码只存在正负1;
figure(1);
% subplot(211);
plot(1:code_chip,rd1);%绘制扩频码
% subplot(212);
axis([0 1100 -1.25 1.25]);
figure(2);
plot(1:code_chip,rd2);%绘制扩频码
axis([0 1100 -1.25 1.25]);%调整坐标轴
cacode1=[rd1 rd1];%复制延长
cacode2=[rd2 rd2];%复制延长
code_len1=length(cacode1);
code_len2=length(cacode2);
xk1=fft(cacode1,code_len1);%傅里叶变换到频域
xk2=fft(cacode2,code_len2);%傅里叶变换到频域
rm1=real(ifft(conj(xk1).*xk1))/code_len1;%共轭相乘取模,傅里叶逆变换,取实部(求自相关)
rm2=real(ifft(conj(xk2).*xk2))/code_len2;
rm3=real(ifft(conj(xk2).*xk1))/code_len1;%互相关
figure(3);
plot(0:code_len1-1,rm1);
axis([0 code_len1+25 -0.25 1.25])
title('CA的自相关函数,卫星1');
figure(4);
plot(0:code_len2-1,rm2);
axis([0 code_len2+25 -0.25 1.25])
title('CA的自相关函数,卫星2');
figure(5);
plot(0:code_len1-1,rm3);
axis([0 code_len1+25 -0.25 1.25])
title('CA的互相关函数,卫星1/2');
第一次GNSS小作业,前几天的想法不对,matlab自带的相关函数那是线性相关,应该采用循环相关,经过老师点拨和同学的提醒,最后自己琢磨了一下,感觉这次要正确一点,特此分享