Code1=fGenerateNavigationData(x1,y1,z1)%产生导航电文,通过调用子函数fGenerateNavigationData实现
%将产生的Code1中的0找出转换为-1
index1=find(Code1==0)
Code1(index1)=-ones(1,length(index1))
SvNum=12 %设定卫星编号为12
Code2=zeros(1,1) %定义Code2的初值为0
Temp=fGenerateCAcode3(SvNum)%将编号为SvNum的卫星通过调用子函数fGenerateCAcode3生成C/A码
%将Temp中的0找出并转换为-1
index1=find(Temp==0)
Temp(index1)=-ones(1,length(index1))
Temp=[Temp Temp]
%生成Code2
for i=1:length(Code1)
Code2=[Code2 Code1(1,i)*Temp]
end
Code2=Code2(2:length(Code2))
%每位数据通过正弦波来调制
SinWave=sin([0:2*pi/8:2*pi*3/8])
SinWave=single(SinWave)
GPSsignals=zeros(1,1)
SinWave=[SinWave SinWave]
for i=1:length(Code2)
GPSsignals=[GPSsignals Code2(1,i)*SinWave]
end
whos
GPSsignals=GPSsignals(2:length(GPSsignals))
figure(2)
plot(GPSsignals)axis([100,4000,-1.5 1.5])
figure(3)
plot(10*log10(abs(fft(GPSsignals))))
产生C/A码的方法
clc
clear all
%产生C/A码的方法一
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%,%%%%%%%
k1=2k2=6delay=5 %定义参数k1、k2以及延迟
Reg=-ones(1,10) %定义寄存器1~10的初始值都为-1
%通过循环产生长度为1024的MLS序列以及G2序列
for j=1:1023
MLS(j)=Reg(10) %将士0号寄存器的输出作为MLS输出
modulo=Reg(2)*Reg(3)*Reg(6)*Reg(8)*Reg(9)*Reg(10)
Reg(2:10)=Reg(1:9)
Reg(1)=modulo
g2(j)=Reg(k1)*Reg(k2) %将参数k1和k2所代表的寄存器模2相加后作为G2输出
%g2即为输出
end
%将G2与MLS进行延迟检验
if MLS == g2([delay:1023 1:delay-1])
disp('OK')
else
disp('not match')
end
%在G2序列中找出-1并转换为0,找出1并转换为1
ind1=find(g2==1)
ind2=find(g2==1)
g2(ind1)=ones(1,length(ind1))
g2(ind2)=zeros(1,length(ind2))
temp=g2(1:120)
x(1)=0
Show(1)=temp(1)
P=2
%下面的循环是为了将结果显示成方波形式
for i=2:length(temp)
if temp(i)==temp(i-1)
x(P)=i-1
Show(P)=temp(i-1)
x(P+1)=i-1+0.01
Show(P+1)=temp(i)
P=P+2
else
Show(P)=temp(i)
x(P)=i
P=P+1
end
end
%画出仿真结果图
plot(x,Show+1)
axis([0 length(x)-60 -0.1 1.1])
grid on
子程序:
%子函数fGenerateNavigationData
function y=fGenerateNavigationData(x1,y1,z1)
%将传进的参数转换为十六进制数
%x=x1
%y=y1
%z=z1
x=10.23
y=6.24
z=17.8
str1=num2hex(x)
str2=num2hex(y)
str3=num2hex(z)
Table1=[0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1]
TotalStr=[str1 str2 str3]
DataCode=zeros(1,1)
l=length(TotalStr)
%将TotalStr中的数转换为ASCⅡ码表中的数值
for i=1:l
temp=int8(TotalStr(i))
if (temp>58)
temp=temp-96+10
else
temp=temp-47
end
DataCode=[DataCode Table1(temp,:)]
end
y=DataCode(2:length(DataCode))
figure(1)
subplot(2,1,1)
plot(y)axis([0 195 -0.5 1.5])title('导航电文数据(0 1)')
%将产生的Code1中的0找出转换为-1
index1=find(y==0)
y(index1)=-ones(1,length(index1))
subplot(2,1,2)plot(y)axis([0 195 -1.5 1.5])title('导航电文数据(-1 1)')
自己慢慢理解吧
pudn上面有相关资料可以下载,可以参考一下
具体GPS信号跟踪误差怎么求不知道,如果你能求得该误差信号, 具体的包络算法解释如下
求包络(envelop)的最方便的方法是用希尔伯特变换, 希尔伯特变换返回的是analytical signal。
对于一个任意的时序信号x(t),一个简单的程序就是:
y(t)=hilbert(x(t)) %%%return analytical signal
envelop=abs(y(t)) %%%get the magnitude of the analytical signal,namely envelop
我自己的以前用的一个图附上了, 红色部分是原始信号,绿色部分是包络部分,也就是信号的幅值。 包络线正好将信号包住。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)