gps信号和干扰的matlab仿真代码

gps信号和干扰的matlab仿真代码,第1张

x1=10.23y1=6.24z1=17.8 %假设的卫星位置参数

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

我自己的以前用的一个图附上了, 红色部分是原始信号,绿色部分是包络部分,也就是信号的幅值。 包络线正好将信号包住。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11727195.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存