基于MATLAB的GPS信号仿真完整源代码123.docx
- 文档编号:6363542
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:19
- 大小:17.96KB
基于MATLAB的GPS信号仿真完整源代码123.docx
《基于MATLAB的GPS信号仿真完整源代码123.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的GPS信号仿真完整源代码123.docx(19页珍藏版)》请在冰豆网上搜索。
基于MATLAB的GPS信号仿真完整源代码123
配套毕业设计论文见XX文库
请搜索
《基于MATLAB的GPS信号仿真123》
附录C仿真程序代码
1、数据码的产生
functiondatacode=data(x)
y=rand(1,x);
fori=1:
x
ify(i)<0.5
datacode(i)=0;
else
datacode(i)=1;
end
end
y
(1)=0;
show2
(1)=datacode
(1);
q=2;
fori=1:
length(datacode)
forj=1:
100
y(q)=i-1+j*0.01;
show2(q)=datacode(i);
q=q+1;
end
end
plot(y,show2);
axis([0length(datacode)-0.21.2]);
1、C/A码的产生及扩频调制
clc;
c=input('请输入数据码的长度:
c=');
y=rand(1,c);
fori=1:
c
ify(i)<0.5
datacode(i)=0;
else
datacode(i)=1;
end
end
x
(1)=0;
show
(1)=datacode
(1);
p=2;
fori=1:
c
forj=1:
100
x(p)=i-1+j*0.01;
show(p)=datacode(i);
p=p+1;
end
end
subplot(4,1,1);
plot(x,show);
title('数据码');
axis([0c-0.21.2]);
number=input('请输入卫星PRN号码:
number=');
cacode=CAgenerate(number);
temp=cacode(1:
100)
x
(1)=0;
show
(1)=temp
(1);
p=2;
%下面的循环是为了将结果显示成方波形式
fori=1:
length(temp)
forj=1:
100
x(p)=i-1+j*0.01;
show(p)=temp(i);
p=p+1;
end
end
%画出仿真结果图
subplot(4,1,2);
plot(x,show);
title('C/A码');
axis([0100-0.21.2]);
%截取CA码的前十个数据进行扩频,每个数据插入5个CA序列
cacode1=cacode(1:
10);
fori=1:
c
ifdatacode(i)==1
datacodek((i-1)*50+1:
i*50)=ones(1,50);
else
datacodek((i-1)*50+1:
i*50)=zeros(1,50);
end
end
fori=1:
c
forj=1:
50
addr=rem(((i-1)*50+j),10);
ifaddr==0
addr=10;
end
kuopindata((i-1)*50+j)=xor(datacodek((i-1)*50+j),cacode1(addr));
end
end
%下面的循环是为了将结果显示成方波形式
x
(1)=0;
show
(1)=kuopindata
(1);
p=2;
fori=1:
length(kuopindata)
forj=1:
100
x(p)=i-1+j*0.01;
show(p)=kuopindata(i);
p=p+1;
end
end
subplot(4,1,3);
plot(x,show);
title('扩频数据');
axis([0length(kuopindata)-0.21.2]);
%每位数据通过正弦波来调制
Sinwave=sin([0:
2*pi/8:
2*pi*7/8]);
Sinwave=single(Sinwave);
GPSsignal=zeros(1,1);
Sinwave=[SinwaveSinwaveSinwaveSinwaveSinwave];
fori=1:
length(kuopindata)
GPSsignal=[GPSsignalkuopindata(i)*Sinwave];
end
GPSsignal=GPSsignal(2:
length(GPSsignal));
subplot(4,1,4);
plot(GPSsignal(1:
500));
title('调制后数据');
C/A码产生的子程序CAgenerate:
functioncacode=CAgenerate(number)
if(number<1)|(number>37)
disp('输入参数必须在1~37之间取值');
return
end
CACode=zeros(1,1023);%生成一个1*1023的零矩阵
%设置寄存器初相
Reg1=[1,1,1,1,1,1,1,1,1,1];
Reg2=[1,1,1,1,1,1,1,1,1,1];
%设置反馈点,1表示需要反馈
gp1=[0,0,1,0,0,0,0,0,0,1];
gp2=[0,1,1,0,0,1,0,1,1,1];
%抽头
G2Table=[2,3,4,5,1,2,1,2,3,2,3,5,6,7,8,9,1,2,3,4,5,6,1,4,5,6,7,8,1,2,3,4,5,4,1,2,4;
6,7,8,9,9,10,3,4,6,7,8,9,10,4,5,6,7,8,9,3,6,7,8,9,10,6,7,8,9,10,10,7,8,10;]
%生成一个周期的伪码序列
form=1:
1023
CACode(m)=mod(Reg1(10)+Reg2(G2Table(1,number))+Reg2(G2Table(2,number)),2);
Reg1=[mod(Reg1*gp1',2),Reg1(1:
9)];
Reg2=[mod(Reg2*gp2',2),Reg2(1:
9)];
end
cacode=CACode;
2、C/A码的相关性分析
clc;
n=input('请输入卫星PRN号码:
n=');
cacode1=CAgenerate(n);
%在G2序列中找出-1并转换为0,找出1并转换为1
ind1=find(cacode1==1);
ind2=find(cacode1==0);
cacode1(ind1)=-ones(1,length(ind1));
cacode1(ind2)=ones(1,length(ind2));
N=1023;
z=zeros(1,1023);
fori=0:
N-1
fork=i+1:
N-1
z1(k)=cacode1(k)*cacode1(k-i);
z(i+1)=z(i+1)+z1(k);
end
z(i+1)=z(i+1)/N;
end
subplot(2,1,1);
plot(z);
title('自相关特性');
axis([-501300-0.51.2]);
n=input('请输入卫星PRN号码:
n=');
cacode2=CAgenerate(n);
ind1=find(cacode2==1);
ind2=find(cacode2==0);
cacode2(ind1)=-ones(1,length(ind1));
cacode2(ind2)=ones(1,length(ind2));
N=1023;
h=zeros(1,1023);
fori=0:
N-1
fork=i+1:
N-1
h1(k)=cacode1(k)*cacode2(k-i);
h(i+1)=h(i+1)+h1(k);
end
h(i+1)=h(i+1)/N;
end
subplot(2,1,2);
plot(h);
title('互相关特性');
axis([-501300-0.51]);
4、P码的产生及扩频调制
clc;
c=input('请输入数据码的长度:
c=');
y=rand(1,c);
fori=1:
c
ify(i)<0.5
datacode(i)=0;
else
datacode(i)=1;
end
end
x
(1)=0;
show
(1)=datacode
(1);
p=2;
fori=1:
c
forj=1:
100
x(p)=i-1+j*0.01;
show(p)=datacode(i);
p=p+1;
end
end
subplot(4,1,1);
plot(x,show);
title('数据码');
axis([0c-0.21.2]);
NumberPCode=input('entertheNumberPcode=');
NumberShift=input('entertheNumberShift=');
a=input('entera=');
pcode=Pcode(a,NumberPCode,NumberShift);
x
(1)=0;
show
(1)=pcode
(1);
p=2;
fori=1:
length(pcode)
forj=1:
100
x(p)=i-1+j*0.01;
show(p)=pcode(i);
p=p+1;
end
end
subplot(4,1,2);
plot(x,show);
title('P码');
axis([0length(pcode)-0.21.2]);
pcode=pcode(1:
10);
fori=1:
c
ifdatacode(i)==1
datacodek((i-1)*50+1:
i*50)=ones(1,50);
else
datacodek((i-1)*50+1:
i*50)=zeros(1,50);
end
end
fori=1:
c
forj=1:
50
addr=rem(((i-1)*50+j),10);
ifaddr==0
addr=10;
end
kuopindata((i-1)*50+j)=xor(datacodek((i-1)*50+j),pcode(addr));
end
end
x
(1)=0;
show
(1)=kuopindata
(1);
p=2;
%下面的循环是为了将结果显示成方波形式
fori=1:
length(kuopindata)
forj=1:
100
x(p)=i-1+j*0.01;
show(p)=kuopindata(i);
p=p+1;
end
end
subplot(4,1,3);
plot(x,show);
title('扩频数据');
axis([0length(kuopindata)-0.21.2]);
%每位数据通过正弦波来调制
Sinwave=sin([0:
2*pi/8:
2*pi*7/8]);
Sinwave=single(Sinwave);
GPSsignal=zeros(1,1);
Sinwave=[SinwaveSinwaveSinwaveSinwaveSinwave];
fori=1:
length(kuopindata)
GPSsignal=[GPSsignalkuopindata(i)*Sinwave];
end
GPSsignal=GPSsignal(2:
length(GPSsignal));
subplot(4,1,4);
title('调制后数据');
plot(GPSsignal(1:
500));
以下是P码产生的子程序Pcode:
functionpcode=Pcode(a,NumberPCode,NumberShift)
%P码产生
reg1a=[000100100100];
reg1b=[001010101010];
reg2a=[101001001001];
reg2b=[001010101010];
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
%各移位寄存器的状态
fori=1:
z1a
slave1a=mod(reg1a(6)+reg1a(8)+reg1a(11)+reg1a(12),2);
reg1a(2:
12)=reg1a(1:
11);
reg1a
(1)=slave1a;
end
fori=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
fori=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
fori=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
%各控制变量的判断
ifz1a==4091
rx1a=1;
end
ifz1b==4092
rx1b==1;
end
ifz2a==4091
rx2a=1;
x2aWork=0;
end
ifz2b==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;
fori=1:
(NumberPCode+37)
x1(i)=mod(reg1a(12)+reg1b(12),2);
x2(i+a)=mod(reg2a(12)+reg2b(12),2);
%寄存器x1b的移位函数
ifx1bWork==1
ifrx1b==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;
elseifrx1b==1
reg1b=[001010101010];
rx1b=0;
end
end
elseifx1bWork==0
end
end
ifreg1b==[010101010100]
rx1b=1;
x1bcou=x1bcou+1;
ifx1bcou==3749
x1bwork=0;
x1bcou=0;
end
end
%寄存器x1a的移位函数
ifrx1a==0
slave1a=mod(reg1a(6)+reg1a(8)+reg1a(11)+reg1a(12),2);
reg1a(2:
12)=reg1a(1:
11);
reg1a
(1)=slave1a;
elseifrx1a==1
reg1a=[000100100100];
rx1a=0;
end
end
ifreg1a==[001001001000]
rx1a=1;
x1acou=x1acou+1;
ifx1acou==3750
x1bwork=1;
x1acou=0;
end
end
%寄存器x2b的移位函数
ifx2bWork==1
ifrx2b==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;
elseifrx2b==1
x2bout=reg2b(11);
reg2b=[001010101010];
rx2b=0;
end
end
elseifx2bWork==0
reg2b=[001010101010];
x2bWork=1;
rx2b=0;
end
end
ifreg2b==[010101010100]
rx2b=1;
x2bcou=x2bcou+1;
ifx2bcou==3749
x2bWork=0;
x2bcou=0;
end
end
%寄存器x2a的移位函数
ifx2aWork==1
ifrx2a==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;
elseifrx2a==1
reg2a=[101001001001];
rx2a=0;
end
end
elseifx2aWork==0
ifrx2a==1
cou37=cou37+1;
ifcou37==37
rx2a=0;
x2awork=1;
cou37=0;
end
end
end
end
ifreg2a==[010010010011]
rx2a=1;
x2acou=x2acou+1;
ifx2acou==3750
x2awork=0;
x2acou=0;
end
end
end
fori=1:
NumberPCode
p(i)=mod(x1(i)+x2(i),2);
end
p=p';
pcode=p';
5、P码的相关性分析
clc;
NumberPCode=input('enterthenumberPcode=');
NumberShift=input('enterthenumbershift=');
a=input('entera=');
pcode=Pcode(a,NumberPCode,NumberShift);
ind1=find(pcode==1);
ind2=find(pcode==0);
pcode(ind1)=-ones(1,length(ind1));
pcode(ind2)=ones(1,length(ind2));
M=NumberPCode;
z=zeros(1,M);
fori=0:
M-1
fork=i+1:
M-1
z1(k)=pcode(k)*pcode(k-i);
z(i+1)=z(i+1)+z1(k);
end
z(i+1)=z(i+1)/M;
end
subplot(2,1,1);
plot(z);
title('自相关特性');
axis([-50M-0.51.2]);
a=input('entera=');
NumberShift=input('enterthenumbershift=');
pcode2=Pcode(a,NumberPCode,NumberShift);
h=zeros(1,M);
fori=0:
M-1
fork=i+1:
M-1
h1(k)=pcode(k)*pcode2(k-i);
h(i+1)=h(i+1)+h1(k);
end
h(i+1)=h(i+1)/M;
end
subplot(2,1,2);
plot(h);
title('互相关特性');
axis([-50M-0.51]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB GPS 信号 仿真 完整 源代码 123