⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p-5.m

📁 这是在MATLAB上GPS的仿真程序
💻 M
字号:
%p5-1.m对收集到的数据执行捕获
clear;
%%%%%%%%%%%%初始状态设置%%%%%%%%%%%%
svnum=input('enter satellite number=');
intodat=10001;
fs=5e6;
ts=1/fs;
n=fs/1000;
nn=[0:n-1];
fc=1.25e6;
nsat=length(svnum);
%%%%%%%%%%%%%%%%%%输入数据文件%%%%%%%
fid=fopen('d:\gps\.....dat','r');
fseek(fid,intodat-1,'bof');
x2=fread(fid,6*n,'schar');
yy=zeros(21,n);
%%%%%%%执行捕获%%%%
code=digitizg(n,fs,0,svnum);
xf=fft(x2(1:n)');
for i=[1:21]
    fr=fc-10000+(i-1)*1000;
    lc=code.*exp(j*2*pi*fr*ts*nn);
    lcf=fft(lc);
    yy(i,:)=ifft(xf.*conj(lcf));
end
[amp crw]=max(max(abs(yy')));
[amp ccn]=max(max(abs(yy)));
pt_init=ccn;
cfrq=fc+1000*(crw-11);
%%%%%%%%%%%%%产生5ms剥离了CA码的数据%%%%%%%%%%
z5=x2(pt_int:pt_int+5*n-1);
za5=z5'.*[code code code code code];
%%%%%%%%%%%%%%%%%%%%找出分辨率400KHZ的中频%%%%%%
for i=[1:3]
    fr=cfrq-400+(i-1)*400;
    mfrq0(i)=sum(za5(1:5000).*exp(j*2*pi*fr*ts*nn));
    mfrq1(i)=abs(mfrq0(i));
end
[mamp mrw]=max(mfrq1);
mfrq=cfrq+200*(mrw-2);
fr=mfrq;
%%%%%%%%%%%找出精频%%%%%%
zb5=za5.*exp(j*2*pi*fr*ts*[0:5*n-1]);
zc5fix=zc5;
%%%%%%%%%%调整相位,去除可能的相位偏移%%%%%%%%
threshold=2.3*pi\5;
for i=1:4
    if abs(zc5(i))>threshold
        zc5(i)=zc5fix(i)-2*pi;
        if abs(zc5(i))>threshold
             zc5(i)=zc5fix(i)+2*pi;
              if abs(zc5(i))>2.2*pi\5
                  zc5(i)=zc5fix(i)-pi;
                  if abs(zc5(i))>threshold
                      zc5(i)=zc5fix(i)-3*pi;
                      if abs(zc5(i))>threshold
                          zc5(i)=zc5fix(i)+pi;
                      end
                  end
              end
        end
    end
end
dfrq=mean(zc5)*1000/(2*pi);
frr=fr+dfrq;
plot(abs(yy(crw,1:n)));
title(['GPS=' num2str(svnum) 'max at' num2str(pt init)];
figure
plot(abs(yy(:,ccn)),'*');
format
pt init
format long e
frr

%%%%%%%digitizg.m生成CA码并数字化%%%%%
function code2=digitizg(n,fs,offset,svnum);
gold_rate=1.023e6;
ts=1/fs;
tc=1/gold_rate;
cmd1=codegen(svnum);
code_in=cmd1;

%%%%%%%%%%%%形成数字化所用的16个CA码%%%%%%%%%
code_a=[code_in code_in code_in code_in];
code_a=[code_a code_a];
code_a=[code_a code_a];

%%%%%%%%%数字化%%%%%%%
b=[1:n];
c=ceil(ts*b+offset)/tc);
code=code_a(c);

%%%%%%%%调整初始点%%%%%%%
if offset>=0
    code2=[code(1) code(1:n-1)];
else
    code2=[code(n) code(1:n-1)];
end

%%%%%%%%codegen.m产生32个CA码中的一个%%%%%%%%%%%%%
function [ca used]=codegen(svnum);
g2s=[5;6;7;8;17;18;139;140;141;251;252;254;255;256;257;258;469;470;471;472;473;474;509;512;513;514;515;516;859;860;861;862];
g2shift=g2s(svnum,1);

%%%%%%%%%%%产生G1码中的一个%%%%%%%%%%%%%
%下载移位寄存器%%%%%
reg=-1*ones(1,10);
for i=1:1023
    g1(i)=reg(10);
    save1-reg(3)*reg(10);
    reg(1,2:10)=reg(1:1:9);
    reg(1)=save1;
end

%%%%%%产生G2码中的一个%%%%%%%
%下载移位寄存器%%%%%
reg=-1*ones(1,10);
for i=1:1023
    g2(i)=reg(10);
    save2=reg(2)*reg(3)*reg(6)*reg(8)*reg(9)*reg(10);
     reg(1,2:10)=reg(1:1:9);
    reg(1)=save2;
end
    
%%%%%%%%%移动G2码%%%%%%%
g2tmp(1,1:g2shift)=g2(1,1023-g2shift+1:1023);
g2tmp(1,g2shift+1:1023)=g2(1,1:1023-g2shift);
g2=g2tmp;
%%%%%%%%%%%%%%%%%通过G1和G2相称形成单个采样CA码%%%
ss_ca=g1.*g2;
caused=-ss_ca;

                      
                  
                  
        
        
      
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -