GPS频域捕获实验报告Word下载.docx
《GPS频域捕获实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《GPS频域捕获实验报告Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
3.2串行搜索捕获………………………………………………5
3.2.1伪码序列的产生………………………………………6
3.2.2载波的产生………………………………………………7
3.2.3积分和平方………………………………………………7
3.2.4图像的筛选………………………………………………7
4.总结………………………………………………………………13
5.附件……………………………………………………………14
6.参考文献………………………………………………………16
题目:
GPS时域捕获算法仿真
1设计要求
GPS卫星信号包括载波,导航电文,C/A码三部分,GPS接收机的信号捕获过程就是去除载波,剥离C/A码的过程,并且载波频率和C/A码的估计值必须小于载波环和码环的迁入范围。
我们主要研究的GPS捕获方法是串行时域捕获法。
2GPS信号概要
2.1GPS信号的构成
GPS信号由以下三部分组成:
(1)载波,
(2)导航数据,(3)扩频序列。
2.1.1载波
GPS信号是利用两个UHF频段的载波进行传输的,UHF的频率范围为500MHz-3GHz。
两个载频L1和L2可以由相同的频率=10.23MHz产生,具体方法如下:
=154f0=1575.42MHz
=120f0=1227.60MHz
以或为载波。
2.1.2导航数据
导航数据包含卫星轨道的相关信息。
GPS控制段中的地面站负责把这些信息上传到所有的卫星。
导航数据的比特率为50b/s。
2.1.3扩频序列
每个卫星都有两个唯一的扩频序列或扩频码。
第一个是粗捕获码(C/A),另外个是加密精确码(P(Y))。
C/A码是一个1023码片的序列(一个码片对应1bit,称之为码片是强调它不包含任何信息),其周期为1ms,码速为1.023MHz。
P码的长度更长,码速率为10.23MHz,且在每次GPS周开始时重复。
C/A码只在L1载波上调制。
2.2相关特性
C/A码的两个重要相关特性如下:
2.2.1几乎没有互相关性
所有的C/A码互相之间几乎没有相关性。
也就是说卫星i和卫星k的两个码Ci和Ck的互相关性如下:
2.2.2除了零延时外,几乎没有自相关性
所有的C/A码几乎和自己都没有相关性,除了零延时。
这一特性使我们很容易找出什么时候两个码是严格对齐的。
卫星K的自相关性特性如下:
2.3多普勒频移
在GPS中,会遇到由发射机(卫星)相对接收机运动所产生的多普勒频移,多普勒频移会影响到GPS信号的捕获和跟踪。
对静止的GPS接收机来说,在L1频率上最大的多普勒频移约为5kHZ,对高速移动的GPS接收机,可以假定最大的多普勒频移为10KHz
由于C/A码的码率低,其多普勒频移非常小。
C/A码的码率为1.023MHz,是L1载波频率的1/1054。
因此,对静止接收机和高速接收机C/A码的多普勒频移分别为3.2MHz和6.4MHz。
3捕获
捕获的目的是确定可见卫星及卫星信号的载波频率,码相位的粗略值。
3.1捕获的目的
卫星由32个不同的PRN码进行区分。
第二个参数是码相位,指的是伪随机码在当前数据块中的时间同步信息。
为产生与接受信号伪码相位完全对齐的本地伪码,需要知道码相位,此时则可从信号中去除伪码。
两个伪码只有在时延为零的时候才能得到最大相关值,也就是说,两个信号必须完全对齐才能去除接收信号中的伪码。
第三个参数是载波频率,在下变频的情况下指的是中频。
接收到的L1频点1575.42MHz射频信号,在下变频器中经过混频后可得到中频信号。
但是,接受信号的频率可能偏离预期值。
在视距范围内的卫星速度(相对于接收机)引起的多普勒频移可导致接收信号频率的升高或降低。
在最坏的情况下,频差有可能打到10kHz。
产生本地载波信号的前提是必须知道接受信号的频率,其目的是用于去除接收信号载波。
在通常情况下,搜索得到的最大频率误差为500Hz是可以接受的。
3.2串行搜索捕获
串行搜索捕获方法是码分多址系统(CDMA)中经常采用的一种捕获方法。
GPS就是一种CDMA系统。
图3_1显示的是串行搜索算法的框图。
图3_1串行搜索法框图
从图3_1可以看出,该方法基于接受信号与本地产生伪码序列及本地载波的乘积。
伪码发生器产生一个对应于某一特定卫星的卫星的伪码序列,该序列有一个特定的码相位,0到1022码片。
接受信号首先与本地产生的伪码序列相乘,然后与本地产生的载波相乘。
与本地产生载波相乘之后,产生同相I之路信号,与本地产生载波的90度相移信号相移信号相乘之后产生正交Q之路信号。
I,Q支路信号分别经过1ms,即C/A码周期的时间积分后,平方相加,理想情况下,由于C/A码仅调制于I支路信号,所以信号功率应集中在I支路,但是,在这种情况下,卫星产生的I支路信号与解调后的I支路信号并不需要一一对应,这是因为接受信号的相位是未知的。
因此,为了确定是否检测到接受信号,需要同时对I支路和Q支路信号进行研究。
输出为接受信号与本地产生信号的相关值。
如果得到的相关值超过了预先设定的门限,即可确定本地产生信号的载波和码相位参数是正确的,转入跟踪过程。
3.2.1伪码序列的产生
图3_1显示,串行搜索捕获方法的首要任务是接受信号与本地产生伪码序列相乘,因此需要产生本地伪码,所有可能的伪码序列均离线产生,而不是在信号捕获过程中产生。
在本次的课程设计中,本地的伪码序列由GetCACode.m产生的,本来伪码发生器是利用二进制数据0,1实现的,但是在实际处理中用的是-1和1。
每个卫星产生4096个数,部分截图如下:
图3_2部分本地伪码序列
3.2.2载波的产生
捕获的第二步是与本地载波相乘。
载波发生器需要产生相位差为90度的两路载波信号,即余弦波和正弦波信号。
在本次课程设计中,我们是通过
carrier=exp(1i*2*pi*(0:
Len-1)*(fc+dopplor)/fs)
产生的,其中Len为gpsdata的长度,fc为0.42MHz,fc为信号中心频率,dopplor为多普勒频移,刚开始设置为-4000,增量为200。
fs为8.184MHz,fs为信号采样频率。
然后在加一部信号的强化:
fork=1:
floor(length(gpsdata_ddc)/Q)
gpsdata_ddc_CIC(k)=sum(gpsdata_ddc((k-1)*Q+1:
k*Q));
end
接着利用如下程序分出正弦和余弦波:
sine=real(gpsdata_ddc_CIC);
%虚部
cosine=imag(gpsdata_ddc_CIC);
%实部
3.2.3积分和平方
串行搜索捕获方法的最后一部分是与正弦和余弦信号分别相乘后进行积分和平方。
平方主要是为了获得信号功率。
积分则是将对应于处理数据长度的所有38192个点的值相加。
平方在积分过程之后进行。
最后一步是将I支路和Q支路的两个平方值相加,然后在开方。
如果本地伪码与接受信号伪码完全对齐,同时本地产生载波频率与接收信号频率相匹配,则得到的输出值比不满足这些条件的结果要大得多。
forq=1:
1023
1023%积分
Comp1(q)=Comp1(q)+LoCAcode(q-1+k)*sine(k);
Comp2(q)=Comp2(q)+LoCAcode(q-1+k)*cosine(k);
Comp(q)=sqrt(Comp1(q)*Comp1(q)+Comp2(q)*Comp2(q));
%平方和,开方
首先程序将本地伪码序列与载波信号逐位进行相乘并相加,即卷积。
然后本地的伪码序列从第2位开始与载波的第一位相乘,以此类推,这就相当于本地伪码序列循环左移了一位。
循环卷积1023次后就可算出1023个相关值。
然后令多普勒频移加200,再进行循环卷积,直到多普勒频移从-4000到3800为止。
这样就可以算出40*1023的相关性矩阵。
利用mesh函数画出图像即可获得图像,见图3_3和图3_4。
图3_31号卫星的图像
图3_49号卫星的图像
从上面两张图可以看出,有些卫星可以捕获的信号,有些卫星不能捕获到信号。
因此,我们还要设定一些条件来判断是否捕获到了卫星信号。
3.2.4图像的删选
由已给程序知,当峰值为平均值的4倍的时候,我们认为GPS捕捉到了卫星,那么由图像知,并不是所有卫星都被捕捉到了,那么首先我们要算出最大值和平均值。
我们用了如下语句来计算最大值和平均值:
avg=sum(yy(:
))/numel(yy);
[a,l]=max(yy(:
));
[p,q]=ind2sub(size(yy),l)
其中yy是相关性的矩阵。
yy(:
)是把一个矩阵转换成一个向量形式。
sum(yy(:
))是计算矩阵所有元素的和,numel(yy)是矩阵中所有的元素个数。
因此平均值avg=sum(yy(:
))/numel(yy)。
而[a,l]=max(yy(:
))是把矩阵中最大的数赋给M,并且把这个数所在的位置赋给了,因为此时yy(:
)是一个向量形式,所以必须加一句[p,q]=ind2sub(size(yy),l),把最大值所在位置的索引值转换成矩阵的横坐标和纵坐标。
之后再判断最大值a与平均值avg的关系即可。
ifa/avg>
THR
figure(m);
mesh(yy);
但是这样我们发现,依然输出的是32张图片,原因是Comp(q)=Comp1(q)*Comp1(q)+Comp2(q)*Comp2(q);
平方和之后,使得a非常大,很容易大于avg4倍,于是我改变了THR,
把4改为16,输出如下6张图。
这样输出一下6张图:
图3_5第9号卫星的图像
图3_6第15号卫星的图像
图3_7第18号卫星的图像
图3_8第21号卫星的图像
图3_9第26号卫星的图像
图3_10第27号卫星的图像
4总结
一开始,完全不知道这个课题是在说什么。
还好后来朱老师讲了一下,让我知道了基本的原理,有了大致的思路。
但是,由于之前没有接触过MATLAB的编程,有了思路也无法编程,在这里要感谢老大姚怡超的悉心教导和帮助。
也让我领略了MATLAB的仿真的强大,与语言封装的集成性。
之前一开始,由于程序设计的问题,长时间的不出图像,后来改进了程序,出图的速度虽然有所加快,但是仍然远远低于频域捕获算法。
通过这次课程设计,让我了解了MATLAB软件,也知道了GPS的工作原理,了解了时域和频域捕获算法的优点和缺点。
增强了应用和实践的能力,为以后的学习工作打下了基础。
附件(程序代码)
GPSInf_Acq=zeros(32,3);
yy=zeros(40,1023);
zz=zeros(40,1023);
dopplorrange=4000;
gpsdata_ddc_CIC=zeros(4096);
sine=zeros(4096);
cosine=zeros(4096);
form=1:
32
LoCAcode=GetCACode(m,N);
%GetCACode(PRN,LEN)
dopplor=-dopplorrange;
while(dopplor<
dopplorrange)
Comp1=zeros(1023);
Comp2=zeros(1023);
Comp=zeros(1023);
%载波偏移
Len-1)*(fc+dopplor)/fs);
gpsdata_ddc=gpsdata.*carrier;
floor(length(gpsdata_ddc)/Q)%CICQ倍抽取滤波器
sine=real(gpsdata_ddc_CIC);
1023%积分
yy((dopplor+4000)/200+1,:
)=Comp(1:
1023);
dopplor=dopplor+200;
GPSInf_Acq(m,1)=1;
GPSInf_Acq(m,2)=1;
GPSInf_Acq(m,3)=dopplor;
end
yy((dopplor+4000)/200+1,:
avg=sum(yy(:
[p,q]=ind2sub(size(yy),l);
end
参考文献
1.求是科技.MATLAB7.0从入门到精通.人民邮电出版社
2.XX文库