搜索
您的当前位置:首页基于MATLAB的GPS信号的仿真

基于MATLAB的GPS信号的仿真

来源:世旅网
摘要

扩频通信是近几年来迅速发展起来的一种通信技术。在早期研究这种技术的主要目的是为提高军事通信的保密和抗干扰性能,因此这种技术的开发和应用一直是处于保密状态。扩频技术在军事应用上的最成功范例可以以美国和俄国的全球定位系统(GPS和GLONASS)为代表;在民用上GPS和GLONASS也都得到了广泛的应用,这些系统的基础就是扩频技术。

全球定位系统(GPS)用于对全球的民用及军用飞机、舰船、人员、车辆等提供实时导航定位服务。GPS系统采用典型的CDMA体制,这种扩频调制信号具有低截获概率特性。该系统主要利用直接序列扩频调制技术,采用的伪码有C/A码和P(Y)码两种。

本文讲述的是直接序列扩频通信技术在全球定位系统(GPS)中的应用。主要介绍

扩频通信中的伪码仿真,简要论述M序列和伪随机噪声码(P码和C/A码)及其产生,并使用MATLAB7.0仿真M序列、P码和C/A码的编码过程和仿真结果,介绍直扩频技术伪码的相关知识,重点介绍P码。

关键字:全球定位系统;直接扩频通信;伪码仿真

Abstract

Spread spectrum communication is a communications technology developed rapidly in

recent years. In early studies the main purpose of this technology is to improve the military communications confidential and anti-jamming performance, therefore the development and application of this technology is always in secret state. Spread spectrum technology in the most successful military application examples are the United States and Russia could the global positioning system (GPS and GLONASS) for representative; In civil GPS and GLONASS also have been widely used,which foundation of system is the spread spectrum technology.

Global positioning system (GPS) is used to provide real-time navigation and positioning services for global civil and military aircraft, ships, personnel, vehicles and so on. GPS system adopts the typical CDMA system, which kind of spread spectrummodulation signals have low intercept probability characteristic. This system mainly used the direct sequence spread spectrum modulation technology, using the PRN code including C/A code, P codes and Y codes.

This article tells the direct sequence spread spectrum communication technology applied in global positioning system (GPS) .The article mainly introduces the pn code spread spectrum communication simulation, briefly discussing M sequence and pseudo random noise code (P yards and C/A yards) and its produce and use MATLAB7.0 simulate M series, P yards and C/A yards of encoding process and the simulation results, introducing pn code straight spread-spectrum technology knowledge, especially P yards.

Key: GPS; DS-SS;Pn code simulation

2 / 60

目 录

引言 ......................................................................................................................................................... 4 1

GPS理论及其特性 ......................................................................................................................... 5 1.1 1.2

GPS系统概述 .......................................................................................................................... 5 GPS信号构成 .......................................................................................................................... 7

M序列 ........................................................................................................................... 10 C/A码 ............................................................................................................................. 13 P码 ................................................................................................................................. 15

1.2.1 1.2.2 1.2.3 1.3 2

小结........................................................................................................................................ 20

MATLAB软件 ................................................................................................................................ 21 2.1 2.2

MATLAB软件简介 ................................................................................................................. 21 MATLAB应用概述 ................................................................................................................. 22

2.2.1 MATLAB功能介绍 ............................................................................................................... 22 2.2.2 MATLAB使用方法 ............................................................................................................... 24 3 GPS卫星导航信号算法及其MATLAB仿真 .................................................................................. 31 3.1 C/A码仿真代码及其仿真结果 .................................................................................................. 31 3.2 P码的仿真代码及其仿真结果 .................................................................................................. 34 3.3 结果分析及其相关性分析 ........................................................................................................ 38 结论 ....................................................................................................................................................... 39 致谢 ....................................................................................................................................................... 40 参考文献 ............................................................................................................................................... 41 附录A 英文原文 .................................................................................................. 错误!未定义书签。 附录B 中文翻译 ................................................................................................... 错误!未定义书签。 附录C C/A码源代码 ......................................................................................................................... 42 附录D P码源代码 ............................................................................................................................ 56

3 / 60

引言

全球卫星定位系统,简称GPS系统,可在全球范围内,全天候为用户连续地提供高精度的位置、速度和时间信息。文中目的就是搭建一个GPS仿真平台,使得各种信号生成的算法能在该仿真平台上得以仿真实现,以验证算法的性能,从而为信号模拟器的研制提供理论依据。因此对GPS的卫星信号的仿真必将推动中国自主研制的卫星导航系统的发展。

目前,以GPS为代表的卫星导航应用产业已成为当今国际公认的八大无线产业之一。随着技术的进步、应用需求的增加,GPS以全天候、高精度、自动化、高效率等显著特点及其所独具的定位导航、授时校频、精密测量等多方面的强大功能,已涉足众多的应用领域,使GPS成为继蜂窝移动通信和互联网之后的全球第三个 IT经济新增长点。 GPS系统中P码的捕获通常是先捕获到C /A码,然后利用C /A 码调制的导航电文中的转接字(HOW )所提供的P码信息对P码进行捕获。然而,C /A 码的码长短、码速率低,易受敌方干扰和欺骗, 在强干扰和欺骗的战争环境下,很难通过C /A 码来捕获到P码。因此,直接捕获P码一直倍受美国军方的关注。产生P码并对其特性进行分析对进一步研究直接P码的捕获有着重要的意义。

本设计所针对的是GPS卫星信号的伪码仿真,主要是M序列的生成方法和P码的编码原理及其仿真。本课题研究思路是:

⑴研究GPS信号的生成原理和直扩频通信技术基础,M序列和P码算法原理。

⑵在理论研究的基础上,实现MATLAB软件生成M序列和P码,并对其做简单的相关性分析。

文章最后对仿真过程中实现的功能及出现的为题做出总结,总结论文所做的工作和需要更仔细研究的方向。

4 / 60

1 GPS理论及其特性

1.1 GPS系统概述

全球定位系统(GPS)是美国政府于20世纪70年代开始研制,于1994年全面建成的高精度、高动态的星际导航定位系统,该系统全天候地向全球范围内具有GPS接收机用户提供精确、连续的三维位置、三维运动和时间需要。GPS信号分为民用的标准定位服务(SPS,Standard Positioning Service)和军规的标准精确定位服务(PPS,Precise Positioning Service)。 GPS目前处于良好的运行状态,并满足20世纪60年代所提出的最佳定位系统标准。这个系统向有适当接收设备的全球范围内的用户提供精确、连续的三维位置和速度信息。 GPS也向全球广播世界协调时(UTC)。组成卫星星座的24颗卫星被安排在6个轨道平面上,即每个平面上4颗。这样的卫星星座配置确定了卫星某一时刻在轨道中的位置,而为hi与地平线以上的卫星数会随着时间和地点的不同而不同,最少可见到颗,最多可见到11颗,因此保证了在开放的天空下,地球上和近地空间任一点在任何时刻均可以同时观测到至少4颗GPS卫星,为准确定位提供可能。GPS系统采用CDMA(Code Division Multiple Access,码分多址)技术将在轨的24颗卫星分开,每颗卫星使用同样的调制方式在相同的载波频率上调制各自唯一的伪随机码和数据信息,然后使用星载卫星天线发射信号。卫星轨道分布如图1.1所示:

5 / 60

图1.1 卫星轨道分布

6 / 60

1.2 GPS信号构成

GPS卫星向广大用户发送的用于导航定位的信号,是一种调制波,但有别于常用的无线电广播电台发送的调频调幅信号,它是利用伪随机噪声码传送导航电文的调相信号。GPS卫星信号是目前常用的两种违心导航定位信号之一,它包含有三种信号分量,即载波(L1和L2)、测距码(C/A码和P码)和数据码(D码,亦称基带信号或导航电文)。而这所有这些信号分量都是在同一个基本频率f0=10.23MHz的控制下产生的。GPS卫星信号示意图如图1.2所示:

图1.2GPS卫星信号频率构成

GPS卫星发送的GPS卫星信号采用L波段的两种载频作载波,分别被称作L1的主频率和L2的次频率。这些载波频率由扩频码(每一颗卫星均有专门的伪随机序列)和导航电文所调制。所有卫星均在这两个相同的载波频率上发射,但由于伪随机码调制不同,因此无明显的相互干扰。GPS使用L频段的两种载频为(其中f0是卫星信号发生器的基准频率):

L1载波:fL1=154×f0=1575.42 MHz,波长λ1=19.032 cm; L2载波:fL2=120×f0 =1227.6MHz,波长λ2=24.42 cm。 选择L波段的好处是: (1)减少拥挤,避免“撞车”。目前L波段的频率占用率低于其他波段,与其他工作频率不易发生“撞车”现象,有利于全球性的导航定位测量。

(2)适应扩频,传送宽带信号。GPS卫星采用扩频技术发送卫星导航电文,其频带高达20 MHz左右,在占用率较低的L波段上,易于传送扩频后的宽带信号。

在载波L1上调制有C/A码、P码的数据码,而在载波L2上,只有调制有P码的数据码。

在无线通信技术中,为了有效地传播信息,一般均将频率较低的信号加载到频率较高的载波上,而这时频率较低的信号成为调制信号。

GPS信号是一种调制波,它不仅采用L波段的载波,而且采用扩频技术传送卫星导

7 / 60

航电文。所谓“扩频”,是将原来打算发送的几十比特速率的电文变换成发送几兆甚至几十兆比特速率的由电文和伪随机噪声码组成的组合码。采用扩频技术时,若信号功率仅为噪声功率的1/10,那么信号将深深地淹没在噪声之中而不易被他人捕获,从而使得信号具有极强的保密性。 GPS信号的调制波,是卫星导航电文和伪随机噪声码(PseudoRandom Noise Code,简称PRN码,或称伪噪声码)的组合码。卫星导航电文是一种不归零二进制码组成的编码脉冲串,称之为数据码,记作D(t),其码率为50 b/s。对于距离地面20 000 km之遥的GPS卫星,扩频技术能有效地将很低码率的导航电文发送给用户。其方法是用很低码率的数据码作二级调制(扩频)。第一级,用50 Hz的D码调制一个伪噪声码,例如调制一个被叫做P码的伪噪声码,它的码率高达10.23 MHz。D码调制P码的结果,便形成了一个组合码——P(t)D(t),使得D码信号的频带宽度从50 Hz扩展到10.23 MHz,也就是说,GPS卫星从原来要发送50 b/s的D码,转变为发送10 230 b/s的组合码P(t)D(t)。 在D码调制伪噪声码以后,再用它们的组合码去调制L波段的载波,实现D码的第二级调制,而形成向广大用户发送的已调波。如图4-1所示,D码的数据首先同伪噪声码C/A码和P(Y)码模二相加后,形成组合码C/A(t)D(t)和P(t)D(t),然后才调制L1载波。需要注意的是,组合码C/A(t)D(t)和P(t)D(t)是通过相移键控(BPSK)调制到L1载波上的。在L1载波上,C/A(t)D(t)调制和P(t)D(t)调制在相位上是正交的。因此在这两个合并的L1载波频率上的C/A(t)D(t)调制和P(t)D(t)调制之间有90°的相移。L2载波上的调制过程与L1载波大致相同,不同的是L2载波可以用C/A(t)D(t)码、P(t)D(t)码或者P(Y)码来调制。最后,卫星向地面发射这两种已调波L1和L2。

8 / 60

图1.3 GPS卫星信号的产生

需要注意的是,GPS信号虽然有几种分量(C/A易捕获码、 P精确码和D导航数据码),但是它们均来源于一个公共的10.23MHz的基准频率(见图1-1)。它们的频率不仅与基准频率有一定的比例关系,而且相互之间也存在一定的比例关系,详细如表4-1所示。这既有利于GPS卫星发送信号,又便于广大用户接收和测量GPS信号。从表4-1中可以看出,在D码的一个码元内,将有20 460个C/A码码元,204 600个P码码元,31 508 400个L1周期和24 552 000个L2周期。

表1.1 GPS信号的频率关系

相关频率 基频F 载频fL1 载频fL2 基准频率F 10.23MHz 154F 120F C/A码的码频fg F/10 fL1/1540 fL2/1200 P码的码频fp F fL1/154 fL2/120 D码的码频fd F/204600 fL2/31508400 fL2/24552000 9 / 60

1.2.1 M序列

码是一种表达信息的二进制数及其组合,是一组二进制的数码序列。例如,对0,1,2,3取两位二进制数的不同组合表示为:00,01,10,11。这些二进制数的组合形式称之为码。其中每一位二进制数称为1个码元或1比特(bit);每个码均含有两个二进制数,即两个码元或两个比特。比特是码的度量单位,也是信息量的度量单位。如果将各种信息,例如声音、图像以及文字等,按某种预定的规则表示为二进制数的组合形式,则这一过程就称为编码,也就是信息的数字化。

在二进制的数字化信息传输中,每秒所传输的比特数称为数码率,用以表示数字化信息的传输速度,其单位为bit/s(简写为b/s)。码可以看作是以0和1为幅度的时间函数,用u(t)表示。因此,一组码序列u(t) ,对于某个时刻t而言,码元是0或1完全是随机的,但其出现的概率均为1/2。这种码元幅值是完全无规律的码序列,称为随机噪声码序列。它是一种非周期序列,无法复制。但是,随机噪声序列却有良好的自相关性,GPS测距码就是利用了其自身良好的自相关性才获得成功的。

这里,自相关性是指两个结构相同的码序列的相关程度,它由自相关函数描述。为了说明这一问题,可将随机噪声码序列u(t)平移k个码元,获得具有相同结构的新的码序列u(t)。比较这两个码序列,假定它们的对应码元中,码值(0或1)相同的码元个数为Su,而码元相异的码元个数为Du,那么两者之差Su-Du与两者之和Su+Du(即码元总数)的比值,即定义为随机噪声码序列的自相关函数,用符号R(t)表示:

Su Du (4-1)

R (t)  SuDu

在实际应用中,可通过自相关函数R(t)的取值判断两个随机噪声码序列的相关性。根据自相关函数R(t)的取值,即可确定两个随机噪声码序列是否已经“相关”,或者说,两个码序列的对应码元是否已完全“对齐”。 假设GPS卫星发射一个随机序列u(t),而GPS信号接收机在收到信号的同时复制出结构与u(t)完全相同的随机序列u(t) ,由于信号传播延迟的影响,被接收的随机序列u(t)与u(t)之间产生了平移,即对应码元已错开,因而R(t)≈0。若通过一个时间延迟器来调整,使它们的码元相互完全对齐,即有R(t)=1,那么就可以从GPS接收机的时间延迟器中,测出卫星信号到达用户接收机的准确传播时间,再乘以光速便可确定卫星至观测站的距离。所以,随机噪声码序列良好的自相关特性为GPS测距奠定了基础。

M序列是线行反馈移位寄存器产生的周期最长的序列,是多级移位寄存器或其他延迟元件通过线性反馈产生的最长的码序列。下面以一个四级反馈移位寄存器组成的m序列为例来说明,如图1.4所示。在时钟脉冲的驱动下,每个存储单元的内容,都按次序由上一级单元转移到下一单元,而最后一个存储单元的内容便为输出。同时,其中某两个存储单元,例如单元3和单元4的内容进行模二相加后,再反馈输入给第一个存储单元。

10 / 60

图1.4 四级反馈移位寄存器示意图

所谓的模二相加,是二进制数的一种加法运算,常用符号表示,其运算规则如下:

当移位寄存器开始工作时,置“1”脉冲使各级存储单元处于全“1”状态,此后在时钟脉冲的驱动下,移位寄存器经历15种不同的状态,然后再返回到“1”状态,从而完成一个周期(见表1.2)。在四级反馈移位寄存器经历了上述15种状态的同时,其最末级存储单元输出了一个具有15个码元,且周期为15tu的二进制数码序列,称为m序列。tu表示时钟脉冲的时间间隔,即码元的宽度。

110,011,101,000 11 / 60

表2-4 四级反馈移位寄存器状态序列

各级状态 模二加反馈 状态编末级输出的二进制

号 数 ④ ③ ② ① ③  ④ 1 1 1 1 1 0 1 2 1 1 1 0 0 1 3 1 1 0 0 0 1 4 1 0 0 0 1 1 5 0 0 0 1 0 0 6 0 0 1 0 0 0 7 0 1 0 0 1 0 8 1 0 0 1 1 1 9 0 0 1 1 0 0 10 0 1 1 0 1 0 11 1 1 0 1 0 1 12 1 0 1 0 1 1 13 0 1 0 1 1 0 14 1 0 1 1 1 1 15 0 1 1 1 1 0

由此可见,四级反馈移位寄存器所产生的m序列,其一个周期可能包含的最大码元个数恰好等于24-1个。因此,一般来说,一个r级移位寄存器所产生的m序列,在一个周期内其码元的最大个数 Nu 2 r 1 (1.2) 与此相对应,这时m序列的最大周期为:

r T u (2  1) tu N ut u (1.3) 式中,Nu也称为码长。

由于移位寄存器不容许出现全“0”状态,因此2r-1码元中,“1”的个数总比“0”的个数多一个。这样,当两个周期相同的m序列其对应码元完全对齐时,自相关系数R(t)=1,而在其他情况则有 11R(t) N 2r 1 (1.4)

u 当r足够大时,就有R(t)≈0。所以,伪随机噪声码与随机噪声码一样,具有良好的自相关性,而且是一种结构确定、可以复制的周期性序列。GPS信号接收机就是利用这一特征使所接收的伪随机噪声码和机内产生的伪随机噪声码达到对齐同步,进而捕获和识别来自不同GPS卫星的伪随机噪声序列。

由于受GPS卫星至用户GPS接收机的路径信号传播延迟的影响,被接收的伪随机码和复制的伪随机码之间产生了平移;如果通过一个时间延迟器来对复制的伪随机码进行移动,使两者的相关函数值为1,则可以从时间延迟器中测出对齐码元所用的时间,从而可以较准确地确定由卫星到接收机的距离。由此可知,伪随机序列的良好的自相关特性,对于利用GPS卫星的测距码进行精密测距是非常重要的。

12 / 60

m序列有下列特性:

(1)均衡性:在一个周期中,“1”与“0”的数目基本相等,“1”比“0”的数目多一个。它不允许存在全“0”状态。

(2)游程分布:在序列中,相同的码元连在一起称为一个游程。一般来说,长度为1的游程占总数的1/2,长度为2的游程占总数的1/4,依此类推。连“1”的游程和连“0”的游程各占一半。

(3)移位相加特性:一个m序列mP与其经过任意次延迟移位产生的另一个序列mr模二相加,得到的mS仍是m序列,即

(1.5)

(4)伪噪声特性:如果对随机噪声取样,并将每次取样按次序排成序列,可以发现其功率谱为正态分布。由此形成的随机码具有噪声码的特性。m序列在出现概率、游程分布和自相关函数等特性上与随机噪声码十分相似。正因为如此,我们将m序列称为伪随机码,或人工复制出来的噪声码。 1.2.2 C/A码

C/A码(Coarse Acquisition Code)是Gold码,用于粗测距和捕获GPS卫星信号。它是由两个10级反馈移位寄存器组合产生的,其序列长度为1023(基数码)。因为C/A码的基码速率是1.023MHz,因此伪随机序列的重复周期是1023/1.023*106或1ms。图1.5描述了GPS C/A码发生器的结构方案。

mPmrmS 13 / 60

图1.5 C/A码发生器

两个移位寄存器于每星期日子夜零时,在置“1”脉冲作用下处于全“1”状态,同时在频率为f1=f0/10=1.023MHz时钟脉冲驱动下,两个移位寄存器分别产生码长为N=210-1=1023、周期为1ms的两个m序列G1(t)和G2(t)。这时G2(t)序列的输出不是在该移位寄存器的最后一个存储单元,而是选择其中两个存储单元进行二进制相加后输出,由此得到一个与G2(t)平移等价的m序列G21(即与延时等价)。再将其与G1(t)进行模二相加,将可能产生1023种不同结构的C/A码。C/A码不是简单的m序列,而是由两个具有相同码长及数码率,但结构不同的m序列相乘所得到的组合码,称为戈尔德(Gold)序列。 C / A(t ) G 1(t )G 2( t it0 ) (1.6)

采用不同的it0值,可能产生1023个G2(t),再加上G1(t)和G2(t)本身,共可能产生1025种结构不同的C/A码供选用。这些C/A码具有相同的码长N=210-1=1023bit,相同的码元宽tu=1/f1=0.98 μs(相当于293.1 m)和相同的周期Tu=Ntu=1 ms。

从这些G(t)码中选择32个码以PRN1,PRN2,…,PRN32命名各种GPS卫星。由于C/A码长很短,只有1023比特,易于捕获。在GPS定位中,为了捕获C/A码,以测定卫星信号的传播延时,通常需要对C/A码逐个进行搜索。若以50个码元每秒的速度搜索,对于只有1023个码元的C/A码,搜索时间只要20.5 s。通过C/A码捕获卫星后,即可获得导航电文,通过导航电文提供的信息,便可以很容易地捕获GPS的P码。所以,C/A码除了作为粗测码外,还可作为GPS卫星信号P码的捕获码。

14 / 60

C/A码的码元宽度较大。假设两个序列的码元对齐误差为码宽的1/10~1/100,则此时相应的测距误差为29.3~2.93 m。随着现代科学技术的发展,使得测距分辨力大大提高。一般最简单的导航接收机的伪距测量分辨力可达0.1m。C/A码的码长、码元宽度、周期和数码率分别为:码长Nu=210-1=1023bit;码元宽度tu≈0.977 52μs,相应的长度为293.1m;周期Tu=Nu·tu=1 ms;数码率为1.023 Mb/s。不同的GPS卫星所使用的C/A码的上述四项指标相同,但编码规则不同,这样既便于复制又便于区分。 C/A码具有以下特点:

(1)由于C/A码的码长较短,易于捕获,而通过捕获C/A码所得到的信息,又可以方便地捕获P码,因此,通常称C/A码为捕获码。在GPS导航和定位中,为了捕获C/A码以测定卫星信号传播的时间延迟,通常对C/A码进行逐个搜索,而C/A码总共只有1023个码元,若以50码元每秒的速度搜索,仅需20.5 s便可完成。

(2)C/A码的码元宽度较大。若两个序列的码元相关误差为码元宽度的1/10~1/100, 则此时所对应的测距误差可达29.3~2.9 m。由于其精度较低,所以称C/A码为粗捕获码。 1.2.3 P码

图1.6给出了在GPS中用于实现码分多址技术的产生直接序列PRN码的高层方框图。每个合成的PRN码由前面两个另外的码发生器导出。在每种情况下,第二个码发生器的输出在其与第一个的输出由异或电路合并之前要相对于第一个进行延时,延时的量是可变的。卫星的PRN码与延时的量是相关联的。在P码的情况下,延时的基码整数与PRN码相同。对于C/A码来说,对每颗卫星都有特别的延时。表1.3列出了这些延时。C/A码延时可以由一种简单而有效的技术来实现,这种技术不需要使用延时寄存器。

图1.6 GPS码发生器

15 / 60

表1.3 C/A码和P码的码相位分配和码序列初始段

卫星PRN 号码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 C/A码抽头 选择 2⊙6 3⊙7 4⊙8 5⊙9 1⊙9 2⊙10 1⊙8 2⊙9 3⊙10 2⊙3 3⊙4 5⊙6 6⊙7 7⊙8 8⊙9 9⊙10 1⊙4 2⊙5 3⊙6 4⊙7 5⊙8 6⊙9 1⊙3 4⊙6 5⊙7 6⊙8 7⊙9 8⊙10 1⊙6 2⊙7 3⊙8 4⊙9 5⊙10 4⊙10 1⊙7 2⊙8 4⊙10 C/A码延时 /基码 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 863 950 947 948 950  P码延时 /基码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 前10个C/A基码(八进制) 1440 1620 1710 1744 1133 1455 1131 1454 1626 1504 1642 1750 1764 1772 1775 1776 1156 1467 1633 1715 1746 1763 1063 1706 1743 1761 1770 1774 1127 1453 1625 1712 1745 1713 1134 1456 1713 前12个C/A基码(八进制) 4444 4000 4222 4333 4377 4355 4344 4340 4342 4343 “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ 4343 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33+ 34+ 35+ 36+ 37+ 16 / 60

P码(Precise Code)是卫星的精测码,码速率为10.23 MHz,它是由两组各有两个12级反馈移位寄存器结合产生的,其基本原理与C/A 码相似,但其线路设计细节远比C/A码复杂,且严格保密。这四个移位寄存器称为X1A,X1B,X2A,X2B。图1.7示出了这种移位寄存器方案的详细方框图。图中未包括用于设定或读出移位寄存器和计数器相位状态所必须的控制。

图1.7 P码发生器

12级反馈移位寄存器产生的m序列的码元总数为212-1=4095,采用截短法将两个12级m序列截短为一周期中码元数互为素数的截短码。所有4个反馈移位寄存器的自然周期都是按如下方式截短的:X1A和X2A在4092个基码之后复位,去掉了它们自然的4095个基码序列的最后3个基码,寄存器X1B和X2B再4093个基码后复位,去掉了它们自然的4095个基码的最后2个基码,.这就导致X1B序列的相位相对于X1A学列在每一个X1A寄存器循环都滞后一个基码。结果在X1A和X1B之间有相对相位移动。在X2A和X2B之间也发生类似的相位移动。在GPS星期的起始点所有移位寄存器均置

17 / 60

于初始状态。在每个X1A时元的末尾,X1A移位寄存器也复位到其初始状态。在每个X1B时元的末尾,X1B移位寄存器复位到其初始状态。在每个X2A时元的末尾,X2A移位寄存器复位到其初始状态。在每个X2B时元的末尾,X2B移位寄存器复位到其初始状态。A和B移位寄存器的输出(第12级)用异或电路合并起来,由X1A⊕X1B导出X1序列,由X2A⊕X2B导出X2序列。X2序列被延迟i个基码(相应与SVi)以形成X2i。SVi的P码是Pi=X1⊕X2i。

在X1A 产生了4092 个码片的时候, X1A 完成了一个周期, 并产生了一个脉冲SETX1AEPOCH 使X1A 复位, X1B 则需要产生4093 个码片时才产生脉冲SETX1BEPOCH. 当X1B输出了3749 个周期的时候, 它停止移位, 等待X1A 输出了3750个周期后对它发送重新启动的信号. 在X1A 完成了3750个周期后, 它又产生 了一个叫做X1EPOCH 的脉冲. 所以, 在每一个X1EPOCH 周期中, X1B 要停止并等待X1A 4092- 3749= 343个码片的时间. X2A 和X2B 的工作过程与X1A 和X1B 的工作过程类似. 同时X2A每经历3750个周期后都要比X1A 滞后37个时钟周期. X1B, X2A, X2B这3个线性反馈移位寄存器都要参照X1A。

表1.4 GPS码发生器多项式和初始状态

在将X1A和X1B通过模二相加或波形相乘,得到周期为4092×4093的长周期码。再对乘积码截短,截出周期为1.5s、码元数N1=15.345×106的X1。同样的方法,在另外一组中,两个12级移位寄存器产生X2,只是X2码比X1码周期略长一些。 总之,两个子码N1和N2均是由两个12级移位寄存器产生的截短码。其码速率均为10.23 Mb/s,N2的码长比N1的多37个码元。两个子码的码长分别为:

66 N  10.23 10 1.5 15.345  10 (4.7)

1

6 2 (4.8) 因此P码的码元数为: 14 1 2 (4.9)

N15.3451037(b)NNN2.3510(b) 18 / 60

相应的周期为:

N T P   267( 天 )  38( 星期 ) (4.10)

fP

在乘积PN1(t)·PN2(t+niτ),ni可取0,1,2,…,36。这样可得到37种P码。在实际应用中,P码采用7天的周期,即在PN1(t)·PN2(t+niτ)中截取一段周期为7天的P码,并规定每星期六午夜零点使P码置“1”状态作为起始点。在这37个P码中,32个供GPS卫星使用,5个供地面站使用。这样,每颗卫星所使用的P码便具有不同的结构,但码长和周期相同。 P码的特征是:码长Nu=2.35×1014bit;码元宽度tu≈0.097 752μs,相应长度为29.3m;周期Tu=Nu·tu≈267天;数码率为10.23 Mb/s。

因为P码的码长约为6.19×1012bit,所以如果仍采用搜索C/A码的办法来捕获P码,即逐个码元依次进行搜索,当搜索的速度仍为50码元每秒时,那将是无法实现的(约需14×105天)。因此,一般都是先捕获C/A码,然后根据导航电文中给出的有关信息,便可捕获P码。 另外,由于P码的码元宽度为C/A码的1/10,这时若取码元的相关精度仍为码元宽度的1/10~1/100,则由此引起的距离误差约为2.93~0.29 m,仅为C/A码的1/10。所以P码可用于较精密的导航和定位,称为精码。目前美国政府对P码保密,不提供民用,因此一般GPS用户实际只能接收到C/A码。

19 / 60

1.3 小结

全球定位导航系统随着技术的发展和用户对系统功能的需求改变,也在不断进行现代化改进,本章主要介绍GPS的总体结构,整体分析GPS信号的组成和调制所用频率,继而全面分析了M序列、C/A码、P码的结构,详细解释了信号发生器的工作流程,为仿真的实现奠定基础。

20 / 60

2 MATLAB软件

2.1 MATLAB软件简介

MATLAB原意为“矩阵实验室—MATrixLABoratory”,它是目前控制界国际上

最流行的软件,它除了传统的交互式编程之外,还提供了丰富可靠的矩阵运算、图形绘制、数据和图象处理、Windows编程等便利工具。MATLAB还配备了大量工具箱,特别是还提供了仿真工具软件SIMULINK。MATLAB在80年代一出现,首先是在控制界得到研究人员的瞩目。随着MATLAB软件的不断完善,特别是仿真工具SIMULINK的出现,使MATLAB的应用范围越来越广。随着MATLAB库函数和仿真工具箱的不断扩充,使其在系统仿真与分析、信号处理、图像处理等方面的应用越来越广泛。MATLAB具有 3 大特点:

(1)功能强大,包括数值计算和符号计算,计算结果和编程可视化,数学和文字统一处理,离线和在线皆可计算;

(2)界面友好,语言自然。MATLAB以复数矩阵为计算单元,指令表达与标准教科书的数学表达式相近;

(3)开放性强。MATLAB有很好的可扩充性,可以把它当作一种更高级的语言去使用,可容易地编写各种通用或专用应用程序。正是由于MATLAB的这些特点,使它获得了对应用学科(特别是边缘学科和交叉学科)的极强适应力,并很快成为应用学科计算机辅助分析设计、仿真、教学乃至科技文字处理不可缺少的基础软件,成为欧美高等院校、科研机构教学与科研必备的基本工具。

在MATLAB中,Simulink 是一个比较特别的工具箱,它具有两个显著的功能:Simu(仿真)与 Link(链接),是实现动态系统建模、仿真的一个集成环境。具有模块化、可重载、可封装、面向结构图编程及可视化等特点,可大大提高系统仿真的效率和可靠性;同时进一步扩展了MATLAB的功能,可实现多工作环境间文件互用和数据交换。Simulink 提供了友好的图形用户界面(GUI),模型由模块组成的框图来表示,用户建模通过简单的单击和拖动鼠标的动作就能完成。Simulink 的模块库为用户提供了多种多样的功能模块,其中有连续系统(Continuous)、离散系统(Discrete)、非线性系统(Nonlinear)等几类基本系统构成的模块,以及连接、运算模块。而输入源模块(Sources)和接收模块(Sinks)则为模型仿真提供了信号源和结果输出设备。本文就是利用编制MATLAB 7.0仿真m文件进行DS扩频通信系统的性能仿真及其分析。

21 / 60

2.2 MATLAB应用概述

2.2.1 MATLAB功能介绍

MATLAB包含两个部分:核心部分和各种可选的工具箱。核心部分中有数百个

核心内部函数。其工具箱又可分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能、图示建模仿真功能、文字处理功能以及与硬件实时交互功能。功能性工具箱能用于多种学科。而学科性工具箱是专业性比较强的,如control、toolbox、signal processing toolbox、communication toolbox等。这些工具箱都是由该领域内的学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高、精、尖的研究。下表列出了MATLAB的核心部分及其工具箱等产品系列的主要应用领域。

表2.1MATLAB的工具箱及主要应用领域

应用领域 工具箱名称 系 统 控 制 ● ● ● ● ● ● ● ● ● ● ● ● 数 据 分 析 ● ● ● ● ● ● ● ● ● 信 号 处 理 ● ● ● ● ● ● ● ● ● ● 通 信 系 统 ● ● ● ● ● ● ● ● 金 融 系 统 ● ● ● ● ● ● ● ● ● ● 工 程 数 学 ● ● ● ● ● ● 土 木 工 程 ● ● ● ● ● ● 图 形 可 视 化 ● ● ● ● ● ● MATLAB核心 Notebook MATLAB Complier MATLAB C Math Library Simulink Symbolic Math Simulink Accelerator Chemometrics Communication Control System Finance System Identification Fuzzy Logical High-order Spectral Analysis

22 / 60

续表

应用领域 工具箱名称 系 统 控 制 数 据 分 析 信 号 处 理 通 信 系 统 金 融 系 统 工 程 数 学 土 木 工 程 图 形 可 视 化 ● ● ● ● ● ● Image Processing ● ● Model Predictive Control ● ● NGA Foundation ● Neural Network ● ● ● MMLE3 Identification ● LMI Control ● ● ● Model Predictive Control ● QFT Control Design ● Robust Control ● Spline ● ● ● ● ● ● Statistics ● ● ● ● ● ● ● DSP Blockset ● ● Fixed-Point Blockset ● Nonlinear Control Design Blockset ● Real-time Workshop ● ● ● RTW Ada Extention ● ● ● Wavelet ● ● ● ● ● Partial Differential Equation ● ● ● Optimization ● ● ● ● ● ● ● Stateflow ● ● ● Signal Processing ● ● ● ● Mu Analysis and Synthesis ● ● ● Frequency Domain Identificaion ● ● ● ● Map tools ● ● ● 下面给出在使用MATLAB过程中高效创建程序和函数的一些建议。 (1) 尽可能使用帮助文件。它将减少语法错误,以及由于不正确或者不恰当地引用MATLAB函数而产生的错误。

(2) 在文本编辑器中编写程序和函数并保存为“.m”文件。这将节省时间,减少代码。当使用MATLAB编辑器时,将极大地简化调试过程。

(3) 尽量减少由程序或函数组成的表达式的数目。在易读性和简洁性之间采用折中的办法,并充分考虑到函数和调用过程的执行速度以及直接性。

(4) 程序和函数应尽可能使用图形化开发手段。这种方法可以检测出隐含的代码错误,从而缩短代码的开发过程,并可使被分析和模型化的物理过程变得容易理解。

23 / 60

(5) 采用另一种手段验证程序或者函数输出结果的正确性。 (这是最为重要的一条)。 2.2.2 MATLAB使用方法

MATLAB的功能包括:数值分析,数值和符号计算,工程和科学绘图,通讯和控制系统的设计与仿真,数字图像与信号处理,财务与金融工程等。本课程简单介绍MATLAB的最基本内容及使用方法,下面介绍所用版本是MATLAB7.0版,对一些基本的命令的使用格式作了简单的说明,并配备了例题加以说明其用法,并安排了两个数学实验供初学者实习。

MATLAB启动后,呈现在我们面前的有这样几个基本的窗口:命令窗口、命令历史窗口、工作空间等,如图2.1所示。窗口的风格和布局,会因Windows环境不同而不同。

图2.1 MATLAB运行界面

用户可以通过下列途径获取MATLAB软件自带的帮助信息:

① 单栏的“Help”按钮; ② 工具栏的按钮;

③ 命令窗口中的MATLAB Help链接; ④ 命令窗口中的Demos链接。

用户可以尝试点击MATLAB界面上的各个按钮,看看它们的功能。如果不小心关闭了当前路径窗口、命令历史记录窗口或命令窗口,可以通过菜单栏的“Desktop”菜单中“Desktop Layout  Default”恢复,如下图所示:

24 / 60

图2.2 MATLAB恢复默认图示

使用MATLAB,可以用来对变量进行算术运算、三角运算、幂运算等。如果没有给出变量名,运算的结果就会赋给通用的变量名ans。例如,要计算π/3的正弦值,可以执行命令sin(pi/3)。除了上述基本运算之外,MATLAB还提供了大量的函数来完成复杂的计算,同时MATLAB也支持用户自定义函数。

如果在命令窗口中反复输入多个表达式,用户会感到很麻烦。为避免这个问题,MATLAB定义了这样一种文件,它包含一组命令,文件中每一个命令的执行都和在命令窗口中执行一样,该文件可以由MATLAB提供的编辑器、操作系统的文本编辑器创建及编辑、保存。这就是m文件,后缀名为“.m”。如果要执行m文件,则按下F5键或者选择Debug菜单下的Run命令即可。

如果我们想调用某函数或者某m文件,可以直接在MATLAB命令窗口中输入其文件名而不必带.m扩展名。但是,MATLAB必须首先知道文件保存的路径。路径信息的输入可以通过File菜单下的Set Path子菜单实现。单击Set Path子菜单,将打开Path Browser窗口,可以在该窗口中添加一个或者多个路径。退出Path Browser窗口前要点击Save命令按钮,该操作将保存添加的路径以备下次使用。

如果不定义变量,那么运算结果就会自动地赋给通用变量ans。例如,计算2*5.3,命令窗口会显示结果: ans= 10.6000

MATLAB规定,用户创建的变量名不可超过31个字符,多余部分将会被忽略掉。变量名要以大写或小写字母开头,后面可以跟大小写字母、下划线或者数字。字符间不允许有空格,且变量名区分大小写。例如,要创建变量A并给它赋初值5.3,可以在命令窗口中输入“A=5.3”。

为了提高变量名和函数名的可读性,MATLAB中有两个一般的约定:使用下划线和首字母大写。比如,exit pressure是要计算的数值,那么在MATLAB命令行中它可以被定义为exit-pressure或者ExitPressure。

MATLAB的帮助信息也是相当丰富的,用户可以直接点击Help菜单里的MATLAB

25 / 60

Help项或者黄色的问号按钮,来打开MATLAB的帮助浏览器。用户也可以直接查阅分类信息或者在Search栏里查找所需内容。

若想了解不知道确切名称的函数的用法,仅使用help命令是无法满足需要的,因为使用此命令必须知道函数名称的完整拼写。此时,可以首先使用lookfor命令来查询根据用户提供的关键字搜索到的相关函数,然后再使用help命令与其配合使用,了解查询到的确切函数的具体用法。

在使用变量以前,MATLAB要求用户一定要先对变量进行赋值操作(符号工具箱使用的变量除外)。赋值时,先输入变量名称和等号,然后输入变量数值并按Enter键结束。

MATLAB中还包含了许多基本的和非基本的函数,这些函数可以用于标量、向量或矩阵的运算。有关向量和矩阵的创建及运算,表2.1列出的是一些常见的基本函数。

表2.2MATLAB常用数学函数

函数 功能 sin(x) 正弦函数 cos(x) 余弦函数 tan(x) 正切函数 abs(x) 绝对值或复数的模 real(x)) 复数的实部 angle(x) 复数的相角 exp(x) e的指数函数 log(x) 自然对数函数 log10(x) 以10为底的对数函数 round(x) 四舍五入函数 floor(x) 沿负无穷大方向舍入 rat(x) 将实数x展开为多项分数 rem(x,y) x除以y的余数 gcd(x,y) 整数x、y的最大公因子

函数 功能 asin(x) 反正弦函数 acos(x) 反余弦函数 atan(x) 反正切函数 sqrt(x) 开平方 imag(x) 复数的虚部 conj(x) 复数的共轭 pow2(x) 2的指数函数 log2(x) 以2为底的对数函数 sign(x) 符号函数 fix(x) 沿原点方向舍入 ceil(x) 沿正无穷大方向舍入 rats(x) 将实数x化为分数 mod(x,y) 求模数(带符号的余数) lcm(x,y) 整数x、y的最小公倍数 26 / 60

表2.3 MATLAB中的特殊字符及其使用说明

符号 . , 名称 句点 逗号 ; 分号 : 冒号 ( ) 圆括号 用途 1.小数点 2.向量或矩阵的一种操作类型,称为点操作,例如c=a.*b 1.参数分隔符,矩阵元素分隔符,如b(2,7);函数参数分隔符,如besselj(1,x);创建向量参数分隔符,如v=[1,x];函数参数输出分隔,如[x,s]=max(a) 2.当几个表达式放在同一行时放在每个表达式之后 1.放在一个表达式末尾处或当几个表达式放在同一行时放在每个表达式末尾处,不显示计算结果 2.在创建矩阵的语句中指示一行的结束,例如m=[x y z; a b c] 1.创建向量的表达式分隔符,如x=a:b:c 2.对矩阵z而言,当写为z(:,k)时表示所有行,同理,当写作z(k,:)时表示所有列 1.矩阵z的某一个元素的下标指示,如z(j, k)表示矩阵的j行k列元素 2.算术表达式分隔符,如a^(b+c) 3.函数参数分隔符,如sin(x) [ ] { } % 方括号 大括号 百分号 ‘ …

引号或撇号 省略号 空格 创建一组数值、向量、矩阵或字符串(字母型) 创建单元矩阵或结构 注视分隔符,用于指示注释的开始,MATLAB编译器会忽略其右边的内容,但当用于在一对引号内部定义字符串除外,如a=’p1=14 % of the total’ 1.’ Expression’表明Expression为字符串(字母型) 2.表示向量或矩阵的转置 表示MATLAB表达式继续到下一行,增强代码可读性 上下文相关:或者忽略从而作为数据创建语句的分隔符,如c=[a b],或者作为字符串语句的一个字符 27 / 60

MATLAB提供的基本算术运算有:加(+)、减()、乘(*)、除(/)、幂次方(^)。 MATLAB的关系和逻辑运算符与其他软件基本相同,列表加以说明:

表2.4 关系和逻辑运算符

符号 = = =  < <= > >= % 赋值运算 功能 关系运算,相等 不等于 小于 小于等于 大于 大于等于 注释标志 符号 & | - xor …… , ; ’ .’ 功能 逻辑与运算 逻辑或运算 逻辑非运算 逻辑异或运算 续行标志 分行符,结果不显示 分行符,结果显示 矩阵转置 向量转量 MATLAB可以将计算结果以不同的精度输出,列表说明如下:

表2.5 数据输出格式

命 令 format short format long format long e format short e format bank format + format rational format hex format long g format short g MATLAB对使用变量名称的规定:

说 明 默认显示,保留小数点后4位 有效数字16位 有效数字16位加3位指数 有效数字5位加3位指数 保留两位小数位 只给出正、负 以分数形式表示 16进制数 15位有效数 5位有效数 28 / 60

(1)变量名称的英文大小写是有区别的(apple、Apple、AppLe三个变量不同)。 (2)变量的长度上限为19个字母。

(3)变量名的第一个字母必须是英文,随后可以掺杂英文字、数字或是下划线。

下表给出MATLAB所定义的特殊变量及其意义。

表2.6 MATLAB所定义的特殊变量及其意义

变量名 help who ans eps pi inf nan 意 义 在线帮助,如help quit 列出所有定义过的变量名称 默认的用来表示计算结果的变量名 极小值=2.2204e-16 值 无穷大的数 非数值 MATLAB特擅长数组(array)及矩阵(matrix)运算,而这两者基本运算的性质完全不同,数组强调元素对元素的运算,而矩阵则采用线性代数的运算方式。数组多由一维元素构成,而矩阵中多维元素组成。

下面列表说明如何利用特殊函数创建矩阵。

表2.7 MATLAB特殊函数

函数符号 zero (i,j) ones (i,j) eye (i,j) rand (i,j)

说 明 创建i行j列的全零矩阵 创建i行j列的全1矩阵 创建i行j列对角线为1的矩阵 创建i行j列的随机矩阵 MATLAB是基本的绘图命令有二维曲线绘图命令plot和三维曲线绘图命令plot3。 p1ot用来画x对y的二维曲线图,例如y=sinx,0≤x≤2。则以下语句执行后可得到

有关x和y的图形:

>> x=1inspace(0,2 * pi, 20); % 设定x分别为0、2/20、2* 2/20、3*

2/20、…2

>> y1=sinx,y2=cosx;% y1,y2分别是与x对应的正弦和余弦值 >> plot(x, y1, x,y2);%在同一坐标图上分别绘制正弦和余弦曲线 如果想分几次在同一坐标图上绘制不同的曲线,可使用hold命令:

29 / 60

>> hold on;%保持坐标图不变,后绘制的图形叠加在原图上 >> hold off;%解除对原图的保持,将原图清除后再绘制新图

plot命令的基本格式是:plot(x数组, y数组,‘颜色图标’),如需要在同一图中画多根曲线,只需依照此基本格式往后追加其他的x和y的数组即可。其中颜色和图标的英文缩略符请参看下表:

表2.8 MATLAB绘图颜色和图标符号

参数 r g b y m c w k * . 意义 红色 绿色 蓝色 黄色 洋红色 青色 白色 黑色 星号 点号 参数 - —— : —. o x + s d 意义 实线 虚线 点线 点划线 圆圈 叉号 加号 正方形 菱形 还可以利用命令xlabel、ylabel、title等分别在x轴上、y轴上以及题头上加上文字说明。grid命令用来在图形上添加或者删除网格线,它是一个切换命令,若第一次是添加,则再执行一次就是删除。还有text和gtext命令,可用来在图中加上文字说明。

30 / 60

3 GPS卫星导航信号算法及其MATLAB仿真

3.1 C/A码仿真代码及其仿真结果

1. 2. 3.

根据第一章1.2.2小节对C/A码结构的分析,其算法流程归纳如下:

用1111111111初始化移位寄存器G1和G2;

根据不同的卫星编号选择不同的S1和S2的位置;

分别计算G1和G2⊕操作的和,反馈在移位寄存器的第一位,同时计算G1与G2i当前输出的⊕结果,作为当前历元的输出; 4. 返回到步骤2;

根据算法流程,设计MATLAB函数:

function Self_CA_generate(a) %C/A码产生 a是卫星号 (完整代码见附录C)

例如:赋值a=1,产生1号卫星的C/A码前100个码片的仿真结果:

图3.1 1号卫星的C/A码仿真

31 / 60

赋值a=16,产生16号卫星的C/A码前100个码片的仿真结果:

图3.2 16号卫星的C/A码仿真

赋值a=24,产生24号卫星的C/A码前100个码片的仿真结果:

图3.324号卫星的C/A码仿真

32 / 60

赋值a=32,产生32号卫星的C/A码前100个码片的仿真结果:

图3.432号卫星的C/A码仿真

33 / 60

3.2 P码的仿真代码及其仿真结果

根据第一章对P码原理的分析,绘制如下P码产生模型:

图3.5 P码产生模型

P码由四个12位寄存器产生。这些寄存器被标记为X1A,X1B,X2A,X2B,一个12位移位寄存器产生的码长为4095(212-1)位,X1A和X2A使用其中的4092位,去除了4095个码片中的后三位;X1B和X2B使用其中的4093位,去除了4095个码片的后三位。各个寄存器的抽头系数如下式所示: x1a=[x6+x8+x11+x12]; x1b=[x1+x2+x5+x8+x9+x10+x11+x12];

x2a=[x1+x3+x4+x5+x7+x8+x9+x10+x11+x12]; (4.1) x1b=[ x2+x3+x4+x8+x9 +x12]; 这些寄存器的初始向量如下: x1aa=[0 0 0 1 0 0 1 0 0 1 0 0]; x1bb=[0 0 1 0 1 0 1 0 1 0 1 0]; x2aa=[1 0 1 0 0 1 0 0 1 0 0 1]; x2bb=[0 0 1 0 1 0 1 0 1 0 1 0];

每个寄存器循环次数分别为:x1a=3750,x1b=3749,x2a=3750,x2b=3749。 Pi=X1⊕X2i (4.2) 其中: X1=X1A⊕X1B (4.2)

34 / 60

X2=X2A⊕X2B

i代表卫星号。

根据其发生器流程和寄存器间的逻辑结构,编写MATLAB函数: function pcode=pcode_Generate1(a,NumberPCode,NumberShift)

%a是卫星号偏移,NumberPCode 是P码码长,NumberShift是P码码偏移 (详细源代码见附录D)

例如:赋值a=1,NumberPCode=20,NumberShift=10产生1号卫星的P码10-30中的20个码片的仿真结果:

ans=-1 1 1 1 1 -1 1 1 1 -1 1 1 1 1 1 -1 1 -1 1 -1

图3.6 1号卫星的P码

赋值a=16,NumberPCode=100,NumberShift=0产生16号卫星的前100个P码码片的仿真结果:

35 / 60

图3.7 16号卫星的P码

赋值a=24,NumberPCode=100,NumberShift=0产生24号卫星的前100个P码码片的仿真结果:

图3.824号卫星的P码

36 / 60

赋值a=32,NumberPCode=100,NumberShift=0产生32号卫星的前100个P码码片的仿真结果:

图3.932号卫星的P码

37 / 60

3.3特性分析及小结

GPS系统采用典型的CDMA体制,系统以码分多址形式区分各卫星信号。 GPSC/A码的自相关特性

P码自相关特性分析数据说明,只有在码相位无偏移(即码片完全对齐)的情况下,相关峰峰值最大,并且明显大于其它相位偏移情况下的相关峰峰值。P码互相关特性分析的数据说明,不同的P码序列具有很小的相关性,其相关峰峰值与同一段P码序列在无相位偏移时的相关峰峰值相差一个数量级。

本章在第一章基础上进行了P码、C/A码的设计生成算法及其MATLAB仿真,并分析了C/A码良好的自相关和互相关特性,P码的良好部分自相关和互相关特性。这些分析对捕获提供了理论基础。

38 / 60

结论

GPS系统以其定位精度高、全天候开放等优点在近年来的导航定位等多方面得到了广泛的应用。因此一直都是过内外GNSS研究领域的热门话题。GPS领域中任何研究必须首先建立在真是可靠的GPS卫星信号的基础上,然后才能推广到应用当中,所以对GPS信号的研究是重中之重。

本文学习了全球卫星导航定位系统,重点研究GPS信号结构,设计了GPS信号M码和P码的生成算法,简要介绍C/A码;利用MATLAB7.0软件仿真实现了M码和P码的生成。论文主要研究内容包括:

⑴通过对国内外GPS信号研究现状的分析,阅读了大量的中英文文献,明确了课题的意义及信号仿真所要达到的目标。

⑵通过对GPS信号的结构和特性,直接序列扩频通信等理论的深入研究和分析,确定了GPS信号生成算法,编写相应的MATLAB程序,实现GPS信号的产生,同时验证其相关特性。

通过对本课题的研究,深入理解了GPS信号严厉、扩频通信等理论知识,对MATLAB仿真软件有简单应用到熟练掌握,利用它们初步完成了系统的设计和仿真研究,为搭建更为完善的方程系统奠定了基础,也为更深入地开展对GPS信号生成算法的研究提供了平台。更中要的是,在研究过程中,从队信号处理、通信严厉等基础理论的肤浅理解,到现在对扩频同喜系统的原理和性能有了更深一步了解,熟悉了基本信号的处理方法,掌握了GPS信号实现的技术,培养了较强的自学能力和独立工作能力,为今后的发展和从事相关行业的工作奠定了夯实的基础。

39 / 60

致谢

通过这次毕业设计,我对扩频通信中的伪码仿真的理论基础知识有了进一步的理解和巩固,同时也加强了对知识的运用能力。在整个毕业设计过程中,我查阅了大量的相关书籍资料,对GPS全球定位系统有了一个较为全面的了解,提高了自己对MTATLAB软件的使用能力。

在这次毕业设计过程中,一直得到国一兵老师的耐心指导,国老师一丝不苟的指导和严谨认真的教学作风,对我毕业设计起到了重要的作用,在此致以深深的谢意。 感谢四年里各位任课老师和同学在学习、工作和生活中对我的帮助,感谢对我关怀备至的父母和无私帮助我的室友同学,感谢网络带来的好处。

最后对评阅本论文和答辩委员会的各位答辩老师表示衷心的感谢!

40 / 60

参考文献

[1] 译者邱致和王万义. GPS原理与应用.电子工业出版社. 2002年

[2] 杨俊,武奇生编著. GPS基本原理及其MATLAB仿真. 西安电子科技大学出版社. 2006年

[3] 徐明远,邵玉斌.MATLAB仿真在通信与电子信息工程中的应用. 西安电子科技大学出版社. 2005年

[4] Phillip Martin Corbell.Design and validation ofan accurate GPS signal and receiver truth model for comparing advanced receiver processing.Department ofThe Air Force University AirForce Institute ofTechnology,2000

[5] Nevio Bcnvenuto,Giovanni Cherubini.Algorithms for Communications Systems and theirApplications.A Wiley Interscience Publication,2002

41 / 60

附录C C/A码源代码

function Self_CA_generate(a) %C/A码产生子函数 if a==1; %第一颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(2)+rb(6),2)]; for i=1:100

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(2)+rb(6),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end if a==2; %第二颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(3)+rb(7),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(3)+rb(7),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z;

42 / 60

end

if a==3; %第三颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(4)+rb(8),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(4)+rb(8),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==4; %第四颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(5)+rb(9),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(5)+rb(9),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==5; %第五颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(1)+rb(9),2)]; for i=1:1023

43 / 60

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(1)+rb(9),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==6; %第六颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(2)+rb(10),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(2)+rb(10),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==7; %第七颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(1)+rb(8),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(1)+rb(8),2)]; end rd=rd';

44 / 60

%ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==8; %第八颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(2)+rb(9),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(2)+rb(9),2)]; end rd=rd'; %ra=ra';

z=rd; plot(z)

save ca_code z; end

if a==9; %第九颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(3)+rb(10),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(3)+rb(10),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==10; %第十颗卫星

45 / 60

ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(2)+rb(3),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(2)+rb(3),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==11; %第十一颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(3)+rb(4),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(3)+rb(4),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==12; %第十二颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(5)+rb(6),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

46 / 60

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(5)+rb(6),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==13; %第十三颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(6)+rb(7),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(6)+rb(7),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==14; %第十四颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(7)+rb(8),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(7)+rb(8),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

47 / 60

save ca_code z; end

if a==15; %第十五颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(8)+rb(9),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(8)+rb(9),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==16; %第十六颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(9)+rb(10),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(9)+rb(10),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==17; %第十七颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(1)+rb(4),2)];

48 / 60

for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(1)+rb(4),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==18; %第十八颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(2)+rb(5),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(2)+rb(5),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==19; %第十九颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(3)+rb(6),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(3)+rb(6),2)]; end rd=rd';

49 / 60

%ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==20; %第二十颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(4)+rb(7),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(4)+rb(7),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==21; %第二十一颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(5)+rb(8),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(5)+rb(8),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==22; %第二十二颗卫星 ra=ones(1,10);

50 / 60

rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(6)+rb(9),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(6)+rb(9),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==23; %第二十三颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(1)+rb(3),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(1)+rb(3),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==24; %第二十四颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(4)+rb(6),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)];

51 / 60

rc(1)=[mod(rb(4)+rb(6),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==25; %第二十五颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(5)+rb(7),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(5)+rb(7),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==26; %第二十六颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(6)+rb(8),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(6)+rb(8),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z;

52 / 60

end

if a==27; %第二十七颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(7)+rb(9),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(7)+rb(9),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==28; %第二十八颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(8)+rb(10),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(8)+rb(10),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==29; %第二十九颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(1)+rb(6),2)]; for i=1:1023

53 / 60

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(1)+rb(6),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==30; %第三十颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(2)+rb(7),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(2)+rb(7),2)]; end rd=rd'; %ra=ra'; z=rd; plot(z)

save ca_code z; end

if a==31; %第三十一颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(3)+rb(8),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(3)+rb(8),2)]; end rd=rd'; %ra=ra';

54 / 60

z=rd; plot(z)

save ca_code z; end

if a==32; %第三十二颗卫星 ra=ones(1,10); rb=ones(1,10); m=ones(1,3);

rc(1)=[mod(rb(4)+rb(9),2)]; for i=1:1023

rd(i)=mod(ra(10)+rc(1),2);

ra=[mod(ra(3)+ra(10),2) ra(1:9)];

rb=[mod(rb(2)+rb(3)+rb(6)+rb(8)+rb(9)+rb(10),2) rb(1:9)]; rc(1)=[mod(rb(4)+rb(9),2)]; end rd=rd'; %ra=ra';

% z=repmat(rd,1000,1); z=rd; plot(z)

save ca_code z; end

55 / 60

附录D P码源代码

function pcode=pcode_Generate1(a,NumberPCode,NumberShift) % P码产生

x1aa=[0 0 0 1 0 0 1 0 0 1 0 0]; x1bb=[0 0 1 0 1 0 1 0 1 0 1 0]; x2aa=[1 0 1 0 0 1 0 0 1 0 0 1]; x2bb=[0 0 1 0 1 0 1 0 1 0 1 0];

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; else

z1b=mod((N-C1*y1a),4093); x1bWork=1; end

if ((N-C1*y1a)>=C2) x1b=3748; else

x1b=(N-z1b-C1*y1a)/4093; end

m=mod(N,(C1+37)); y2a=(N-m)/(C1+37); if (m>=C1) dv=m-C1; else

56 / 60

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

%各移位寄存器的状态 for i=1:z1a

x1aa=[mod(x1aa(6)+x1aa(8)+x1aa(11)+x1aa(12),2) x1aa(1:11)]; end

for i=1:z1b

x1bb=[mod(x1bb(1)+x1bb(2)+x1bb(5)+x1bb(8)+x1bb(9)+x1bb(10)+x1bb(11)+x1bb(12),2) x1bb(1:11)]; end

for i=1:z2a

x2aa=[mod(x2aa(1)+x2aa(3)+x2aa(4)+x2aa(5)+x2aa(7)+x2aa(12)+x2aa(8)+x2aa(9)+x2aa(10)+x2aa(11) ,2) x2aa(1:11)]; end

for i=1:z2b

x2bb=[mod(x2bb(4)+x2bb(2)+x2bb(3)+x2bb(9)+x2bb(8)+x2bb(12),2) x2bb(1:11)]; end

%各控制变量的判断 if z1a==4091 rx1a=1; end

if z1b==4092 rx1b==1; end

if z2a==4091 rx2a=1; x2aWork=0; end

if z2b==4092 rx2b=1; x2bWork=0;

57 / 60

end

%开始产生P码

p=zeros(NumberPCode,1); %用法:zeros(m,n)或zeros(n) 功能:zeros(m,n)产生m×n的全0矩阵,zeros(n)产生n×n的全0方阵 x1acou=z1a; x1bcou=z1b; x2acou=z2a; x2bcou=z2b; cou37=dv; x2(1:a)=1;

for i=1:(NumberPCode+37)

x1(i)=mod( x1aa(12)+x1bb(12),2); x2(i+a)=mod( x2aa(12)+x2bb(12),2); %寄存器x1b的移位函数 if x1bWork==1

if rx1b==0

x1bb=[mod(x1bb(1)+x1bb(2)+x1bb(5)+x1bb(8)+x1bb(9)+x1bb(10)+x1bb(11)+x1bb(12),2) x1bb(1:11)];

else if rx1b==1

x1bb=[0 0 1 0 1 0 1 0 1 0 1 0]; rx1b=0; end end

else if x1bWork==0 end end

if x1bb==[0 1 0 1 0 1 0 1 0 1 0 0 ] rx1b=1;

x1bcou=x1bcou+1; if x1bcou==3749 x1bwork=0; x1bcou=0; end end

%寄存器x1a的移位函数 if rx1a==0

x1aa=[mod(x1aa(6)+x1aa(8)+x1aa(11)+x1aa(12),2) x1aa(1:11)]; else if rx1a==1

x1aa=[0 0 0 1 0 0 1 0 0 1 0 0]; rx1a=0;

58 / 60

end end

if x1aa==[ 0 0 1 0 0 1 0 0 1 0 0 0 ] rx1a=1;

x1acou=x1acou+1; if x1acou==3750 x1bwork=1; x1acou=0; end end

%寄存器x2b的移位函数 if x2bWork==1

if rx2b==0

x2bb=[mod(x2bb(4)+x2bb(2)+x2bb(3)+x2bb(9)+x2bb(8)+x2bb(12) ,2) x2bb(1:11)]; else if rx2b==1

x2bout=x2bb(11);

x2bb=[0 0 1 0 1 0 1 0 1 0 1 0]; rx2b=0; end end

else if x2bWork==0 end end

if x2bb==[ 0 1 0 1 0 1 0 1 0 1 0 0 ] rx2b=1;

x2bcou=x2bcou+1; if x2bcou==3749 x2bwork=0; x2bcou=0; end end

%寄存器x2a的移位函数 if x2aWork==1 if rx2a==0

x2aa=[mod(x2aa(1)+x2aa(3)+x2aa(4)+x2aa(5)+x2aa(7)+x2aa(12)+x2aa(8)+x2aa(9)+x2aa(10)+x2aa(11) ,2) x2aa(1:11)]; else if rx2a==1

x2aa=[1 0 1 0 0 1 0 0 1 0 0 1]; rx2a=0; end end

59 / 60

else if x2aWork==0 if rx2a==1

cou37=cou37+1; if cou37==37 rx2a=0; x2awork=1; cou37=0; end end end end

if x2aa==[ 0 1 0 0 1 0 0 1 0 0 1 1] rx2a=1;

x2acou=x2acou+1; if x2acou==3750 x2awork=0; x2acou=0; end end end

for i=1:NumberPCode

p(i)= mod( x1(i)+x2(i),2); if p(i)==0 p(i)=1; else

p(i)=-1; end end p=p'; pcode=p'; plot(pcode)

save pcode pcode; %P码产生完毕

60 / 60

因篇幅问题不能全部显示,请点此查看更多更全内容

Top