处理GPS信号的GPS接收机及方法

申请号 CN200710085825.8 申请日 1996-10-08 公开(公告)号 CN101093254B 公开(公告)日 2014-10-22
申请人 快速追踪有限公司; 发明人 N·F·克拉斯内尔;
摘要 一个 实施例 中的GPS接收机包括从 视野 中的卫星接收RF 频率 的GPS 信号 的天线;与天线连接的下 变频器 ,将接收GPS信号的RF频率降到中频(IF);与下变频器相连的数字化转换器,以预定速率对IF GPS信号抽样,产生抽样的IF GPS信号;与数字化转换器相边听 存储器 ,存储抽样的IFGPS信号(GPS信号的抽样转储);以及与存储器相连的 数字信号 处理器(DSP),按照存储的指令操作,藉此在抽样IFGPS信号上执行快速 傅立叶变换 (FFT)运算,提供伪距离信息.这些运算一般也包括GPS信号的预处理和后处理。在数据抽样转储完成之后,接收机前端掉电。在一个实施例中的GPS接收机也包括其它电源管理特性,并且在另一个实施例中也包括在它的 本振 中纠正错误的勇 力 ,用于对GPS信号抽样.伪距离的计算速度、以及运算的灵敏度通过视野中卫星的多普勒频移从一个外部源—诸如本 发明 的一个实施例中的基站—到该接收机的转移来增强。
权利要求

1.一种GPS接收机的电源管理方法,所述方法包括如下步骤:
在所述GPS接收机接收来自视野中卫星的GPS信号,而且接收所述GPS信号时所述GPS接收机的GPS接收部分以高功率状态消耗功率,所述GPS接收部分包括RF/IF下变频器和A/D转换器,其中RF/IF下变频器表示从射频到中频的下变频器,A/D转换器表示模拟数字转换器;
所述模拟数字转换器将所述GPS信号数字化,以便给出所述GPS信号的数字表示;
在数字存储器中缓存所述GPS信号的所述数字表示;
在缓存所述数字表示之后,把所述GPS接收机的所述GPS接收部分所消耗的功率降低到低功率状态,所述低功率状态消耗的功率低于高功率状态消耗的功率,其中所述GPS接收部分的RF/IF下变频器将GPS射频信号下变频到中频;
处理来自所述数字存储器的所述数字表示以给出至少一个伪距离信息,所述处理是在所述降低功率之后被执行,所述处理包括对缓存于存储器中的所述GPS信号的所述数字表示的一个快速卷积运算;和
其中,缓存于所述存储器中的所述GPS信号的所述数字表示的数量可以改变以便牺牲灵敏度而换取功率降低。
2.根据权利要求1的方法,其特征在于可以缓存较少的所述GPS信号的所述数字表示以便节省更多的功率。
3.一种GPS接收机的电源管理方法,所述方法包括如下步骤:
当接收来自基站的定位信息的请求时或当GPS接收机配置成接收来自视野中卫星的GPS信号时,在高功率状态运行GPS接收机的接收部分,所述GPS接收部分包括RF/IF下变频器和A/D转换器,其中RF/IF下变频器表示从射频到中频的下变频器,A/D转换器表示模拟数字转换器;
在降低的功率状态运行GPS接收机的处理系统
所述GPS接收机的接收部分接收来自视野中卫星的GPS信号,这包括由所述RF/IF下变频器将该GPS信号从射频GPS信号下变频到中频GPS信号;
所述A/D转换器将所述中频GPS信号数字化,以便给出所述GPS信号的数字表示;
在数字存储器中缓存所述GPS信号的所述数字表示;
在缓存所述数字表示之后,将所述GPS接收机的所述GPS接收部分所消耗的功率降低到低功率状态,其中,所述低功率状态消耗的功率低于高功率状态消耗的功率;
将GPS接收机的处理系统从所述被降低的功率状态转变到满功率状态;
所述处理系统处理来自所述数字存储器的所述数字表示以给出至少一个伪距离信息,同时所述GPS接收机的所述GPS接收部分工作在所述低功率状态。
4.根据权利要求3的方法,其特征在于可以缓存较少的所述GPS信号的所述数字表示以便节省更多的功率。
5.一个具有降低功率状态的GPS移动单元,所述GPS移动单元包括:
从视野中卫星接收GPS信号的接收机,所述接收机具有GPS接收部分以将GPS信号从射频下变频到中频;
连接到所述接收机、存储所述GPS信号的数字表示的存储器;
连接到所述存储器的处理器,所述处理器处理所述GPS信号的所述数字表示,以便根据所述数字表示提供至少一个伪距离信息;
连接到所述接收机的GPS接收部分和所述处理器的电源管理电路,所述电源管理电路把所述GPS移动单元的所述接收机的所述GPS接收部分所消耗的功率从接收所述GPS信号时所用的高功率状态降低到把所述数字表示存储在存储器中之后的低功率状态,其中,所述电源管理电路使所述处理器所消耗的功率从所述GPS接收部分接收所述GPS信号时所用的降低的功率状态增加到所述数字表示存储于所述存储器中之后的满功率状态,以便处理所述GPS信号。
6.根据权利要求5的GPS移动单元,还包括连接到所述电源管理电路的通信接收机和通信发射机。
7.根据权利要求5的GPS移动单元,其特征在于所述电源管理电路降低所述处理器消耗的功率。
8.根据权利要求6的GPS移动单元,其特征在于在所述GPS移动单元置于降低的功率状态之后,在从所述通信接收机接收到一个信号之后,所述电源管理电路将所述GPS移动单元返回到增加的功率消耗状态。
9.根据权利要求5的GPS移动单元,还包括一个电池和一个太阳能电池以及一个连接到所述电池和所述太阳能电池和所述电源管理电路的电源管理器,所述太阳能电池对所述电池充电。
10.根据权利要求5的GPS移动单元,还包括:
连接到所述接收机和所述电源管理电路的第一受控电源互连;以及
连接到所述存储器和所述电源管理电路的第二受控电源互连,其中,所述电源管理电路通过控制经由所述第一受控电源互连提供给所述接收机的功率、以及通过控制经由所述第二受控电源互连提供给所述存储器的功率来降低功率。
11.根据权利要求5的GPS移动单元,其特征在于所述电源管理电路包括一个微处理器和多个电源开关
12.根据权利要求5的GPS移动单元,其特征在于所述电源管理电路包括数字信号处理器件中的电源控制逻辑,而且所述处理器包括所述数字信号处理器件。
13.根据权利要求12的GPS移动单元,其特征在于所述电源管理电路还包括连接到所述电源控制逻辑的多个电源开关。
14.根据权利要求5的GPS移动单元,还包括一个接收含有所述GPS接收机的视野中卫星的多普勒信息的卫星数据信息的通信接收机。
15.根据权利要求5的GPS移动单元,其特征在于在所述GPS移动单元置于降低的功率状态之后,所述电源管理电路将所述GPS移动单元返回到增加的功率消耗状态。
16.根据权利要求5的GPS移动单元,还包括接收含有表示卫星星历的数据的卫星数据信息的通信接收机。
17.根据权利要求5的GPS移动单元,其特征在于所述处理器通过在所述GPS信号的所述数字表示上进行快速卷积运算来处理所述GPS信号。
18.根据权利要求17的GPS移动单元,其特征在于在将所述GPS信号的所述数字表示存储在所述存储器中之后,降低所述接收机所消耗的功率。
19.根据权利要求17的GPS移动单元,其特征在于在进行所述快速卷积运算之前,在所述GPS信号的所述数字表示上进行预处理运算。
20.根据权利要求19的GPS移动单元,其特征在于在进行所述快速卷积运算之后,在所述快速卷积运算的结果上进行后处理运算。
21.根据权利要求5的GPS移动单元,还包括连接到所述接收机的本振,所述本振提供第一参考信号,并包括连接到所述本振的通信接收机,所述通信接收机提供精确载波频率信号,以便校准用于捕获所述GPS信号的所述本振。
22.具有移动GPS接收机和基站的GPS系统中的一种操作GPS系统的方法,其中所述移动GPS接收机具有降低的功率状态,所述方法包括以下步骤:
将所述移动GPS接收机的GPS接收部分置于所述降低的功率状态,所述GPS接收部分包括RF/IF下变频器和A/D转换器,其中RF/IF下变频器表示从射频到中频的下变频器,A/D转换器表示模拟数字转换器;
在移动GPS接收机处经由通信链路接收来自所述基站的通信信号,其中所述通信信号包括卫星信息,所述卫星信息至少包括多普勒信息;
根据所述多普勒信息和用于GPS处理的命令号将所述移动GPS接收机的GPS接收部分从所述降低的功率状态置于高功率状态;
所述移动GPS接收机的微处理器基于所需的GPS信号数据的灵敏度和所述移动GPS接收机在这个时刻上的电源状况来确定应当收集的GPS信号数据的数量;
收集并在所述移动GPS接收机的至少一个存储器中存储所确定数量的来自移动GPS接收机的视野内卫星的GPS信号数据;
在存储所述GPS信号数据之后,将所述移动GPS接收机的GPS接收部分从所述高功率状态置于所述降低的功率状态;
利用卫星信息并基于来自所述至少一个存储器的确定数量的GPS信号数据确定位置信息,所述位置信息至少包括所述移动GPS接收机的纬度、经度、高度、速度和方位其中之一;以及
给所述基站经由通信链路发送该位置信息以便计算该移动GPS接收机的最终位置。
23.根据权利要求22的方法,其特征在于所述移动GPS接收机灵敏度受控于所述至少一个存储器中所储存的所述数量的数据。
24.根据权利要求23的方法,其特征在于所述移动GPS接收机灵敏度随着微处理器在所述至少一个存储器中储存更多数据而增加。

说明书全文

处理GPS信号的GPS接收机及方法

[0001] 发明背景
[0002] 有关申请
[0003] 这个申请涉及同一发明人在与这个申请同一天提交的两个专利申请;这两个 申 请 是:An Improved GPS Receiver Utilizing a Communication Link(Serial No.08/612,582,1996年 3月 8日 提 交);An Improved GPS ReceiVer Having Power Management(Serial No.08/613,966,1996年3月8日提交)。
[0004] 这个申请也涉及并藉此要求同一发明人Norman F.Krasner的临时专利申请的提交日期的权益,该申请题为Low Power,Sensitive Pseudorange Mesaurement Apparaatus and Method for Global Positioning Satellites Systems,Serial No.60/005,328,1995年10月9日提交。
[0005] 这个专利文件揭示的一部分包括受到版权保护的材料。版权所有者不希望任何人传真复制该专利文件或专利揭示在专利及商标局专利文件或记录中出现的形式,而是保留其全部版权。
[0006] 技术领域
[0007] 本发明涉及能够确定卫星的位置信息的接收机,并且更具体地涉及这种在全球定位卫星(GPS)系统中得到应用的接收机。
[0008] GPS接收机一般通过计算从多个GPS(或NAVSTAR)卫星同时发送的信号的相对到达时间来确定其位置。作为其消息的一部分,这些卫星发送卫星位置数据以及时钟定时数据,所谓“星历”数据。搜索并捕获GPS信号的过程、从多个卫星读取星历数据并且从这个数据计算该接收机的位置是很耗时的,常常需要几分钟。在很多情况下,这个很长的处理时间时不可接受的,而且在微小型化便携应用中大大限制了电池的寿命。
[0009] 当前GPS接收机的另一个局限是它们的操作限于多个卫星在视野中很清晰、不受遮挡这样的情况,而且必须恰当地放置一个质量很好的天线去接收这种信号。正因为如此,在便携、随身放置的应用中、在有相当多树叶或建筑物遮盖的地区、以及在建筑物内应用中一般是不能使用的。
[0010] GPS接收系统有两个主要功能:(1)到各个GPS卫星的伪距离的计 算,以及(2)使用这些伪距离以及卫星定时和星历数据计算接收平台的位置。简单地说伪距离就是从每个卫星接收的信号与本地时钟之间测量的时延。一旦GPS信号被捕获并跟踪,卫星星历以及定时数据就从GPS信号中提取。如上所述,采集这种信息一般需要相对较长的时间(30秒到几分钟)并且必须用好的接收信号电平来完成一般实现低误码率。
[0011] 实际上众所周知的GPS接收机利用相关的方法计算伪距离。这些相关方法通常用硬件相关器实时地完成。GPS信号包括高速率重复的信号,所谓伪随机(PN)序列。用于民用的码称为C/A码,具有1.023MHz的二进制相位反转速率,或“切普”速率,1毫秒的码周期的重复周期为1023个切普。家喻户晓的码序列是Gold码。每个GPS卫星用一种唯一的Gold码广播传号。
[0012] 对于从给定GPS卫星接收的信号,下变频到基带的处理之后,相关接收机用包含于本地存储器中的恰当的Gold码的存储副本乘以所接收的信号,然后将所得乘积结果积分,或者低通滤波,以便得到信号出现的指示。这个过程的术语是“相关”运算。通过相对于接收信号连续地调整这个存储副本的相对定时,并且观察相关输出,接收机可以确定接收信号和本地时钟之间的时延。这种输出出现的最初确定被称之为“捕获”。一旦捕获发生,处理就进入“跟踪”阶段,其特征是少量调整本地参考的定时,以便维持高相关输出。跟踪阶段中的相关输出可以看作是去掉伪随机码的GPS信号,或者用通用术语来说,即“解扩”。这个信号是窄带的,相当于叠加在GPS波形上的每秒50比特的二进制相移键控数据信号的带宽。
[0013] 相关捕获过程是非常耗时的,特别是在接收信号很弱的时候。为了改善捕获时间,大多数GPS接收机利用多个相关器(一般多达12个),以便并行搜索相关峰。
[0014] 一些现有的GPS接收机使用FFT技术确定所接收的GPS信号的多普勒频率。这些接收机利用常规的相关运算,对GPS信号解扩并提供窄带信号,带宽一般在10kHz到30kHz的范围内。所得的窄带信号用FFT算法做傅立叶分析,确定载波频率。这种载波确定同时提供本地PN参考被调整到接收信号的正确相位的指示并提供了载波频率的精确测量。然后可以在接收机的跟踪操作中使用这个频率。
[0015] Johnson的U.S.专利No.5,420,592讨论了使用FFT算法在中央处理单元计算伪距离,而不是在移动单元。根据该方法,GPS接收机收集数据 的抽样转储,然后通过数据链路发送到远端接收机,在那里进行FFT处理。但是,其中揭示的方法在执行该组相关时只计算了单个正向以及逆快速傅立叶变换(对应于四个PN周期)。
[0016] 正如从本发明的如下描述中明显看到的,较高的灵敏度和较高的处理速度可以通过执行大量的FFT运算以及特殊的预处理和后处理运算来实现。
[0017] 在这个专利中,常常用到术语相关、卷积和匹配滤波。术语“相关”当用于两个数字序列时意味着将两个序列中相应的部分逐项相乘,然后将序列相加。有时称为“串行相关”,并得到单个数的输出。在有些情况下,在连续的数据组上执行连续的相关运算。
[0018] 术语“卷积”当用于两个数字序列时与本领域通用的用法相同并等效于长度为m的第二序列用一个滤波器滤波,该滤波器对应于具有长度为n的冲击响应的第一序列。其结果是长度为m+n-1的第三序列。术语“匹配滤波”是指卷积或滤波运算,其中上述滤波器的冲击响应是第一序列的时间反转的复共轭。术语“快速卷积”用于表示用有效的方式计算卷积运算的算法序列。
[0019] 一些作者互换地使用术语相关和卷积;但是,为了清楚起见,在这个专利中,术语相关总是指上述的串行相关运算。
[0020] 发明内容
[0021] 本发明的一个实施例提供了一种方法,从基站通过一条数据通信链路向远端单元或移动GPS单元发送GPS卫星信息,包括多普勒,以便确定远端GPS接收机的位置。远端单元使用这个信息以及从视野中的卫星接收的GPS信号,随后计算出到该卫星的伪距离。然后将所计算的伪距离发送到基站,在那里计算远端单元的位置。也描述了完成这个方法的不同的设备实施例。
[0022] 本发明的另一个实施例提供了一种GPS接收机,具有从视野中的卫星接收GPS信号的天线;以及将接收GPS信号的RF频率降到中频(IF)的下变频器。IF信号被数字并存储在存储器中以备接收机随后处理。在本发明的一个实施例中,这个处理一般使用可编程的数字信号处理器来完成,数字信号处理器执行在抽样IF GPS信号上完成快速卷积(例如FFT)运算所必须的指令,以便提供伪距离信息。这些运算一般也包括对GPS信号的存储版本或GPS信号的处理及存储版本进行预处理(在快速卷积之前) 和后处理(快速卷积之后)。
[0023] 本发明的另一个实施例提供了一种GPS接收机的电源管理方法,并提供了一种具有电源管理特性的GPS接收机。通过从视野中的卫星接收GPS信号;缓存这些信号;然后关闭GPS接收机来降低现有系统的功率消耗也描述了其它电源管理特性。
[0024] 附图说明
[0025] 本发明通过例子来阐述,但是不限于附图中的图,图中的标识表示类似的单元,其中:
[0026] 图1A是使用本发明方法的远端或移动GPS接收系统的主要部件的框图,并且表示了可能在基站和远端之间存在的数据链路。
[0027] 图1B是可选择的GPS移动单元的框图。
[0028] 图1C是另一个可选的GPS移动单元的框图.
[0029] 图2A和2B提供了作为本发明实施例的接收机的两个可选的RF和IF部分。
[0030] 图3表示根据本发明的方法,可编程DSP处理器所执行的主要运算(例如,软件运算)的流程图
[0031] 图4说明根据本发明方法的各种处理阶段上的信号处理波形。
[0032] 图5A说明本发明的一个实施例中的基站系统。
[0033] 图5B说明本发明的一个可选实施例中的基站系统。
[0034] 图6说明根据本发明的一个方面,具有本振校正或校准的GPS移动单元。
[0035] 图7表示根据本发明的一个实施例的移动单元的电源管理方法。
[0036] 具体实施方式
[0037] 这个发明有关计算移动站、或远端站位置的装置和方法,其目的是得到具有很低电源消耗并能够以很低接收信号电平操作的远端硬件的一种方法。即,降低电源消耗同时提高接收机灵敏度。通过实现图1A中所示的远端接收功能、以及从分别放置的基站10向远端站或GPS移动单元20发送多普勒信息使之成为可能。
[0038] 应该注意到可以用很多不同的方式使用伪距离计算远端站的地理位置。有三个例子是:
[0039] 1.方法1:通过从基站10向远端站20重发卫星数据消息,远端站20可以将这个信息与伪距离测量结合计算其位置。例如,见U.S.专利 No.5,365,450,在这里结合作为参考。典型地,远端单元20在远端站20中进行位置计算。
[0040] 2.方法2:远端站20可以用本领域通用的一般方式从GPS信号接收中采集卫星星历数据。这个数据,一般在一到两个小时内有效,可以与伪距离测量结合,一般在远端单元中完成位置计算。
[0041] 3.方法3:远端站20可以通过通信链路16将伪距离发送到基站10,基站将这个信息与卫星星历数据结合完成位置计算。例如,见U.S.专利No.5,225,842,在这里结合作为参考。
[0042] 在途径(或方法)1和3中,假设基站10和远端站20对所讨论的所有卫星具有共同的视并且彼此位置足够近,可以解决与GPS伪随机码的重复速率有关的时间模糊性问题。当基站10和远端站20之间的范围是光速乘以PN重复周期(1毫秒)的1/2,或大约150公里时可以满足该要求。
[0043] 为了解释本发明,假设使用方法3完成位置计算。但是,当讨论这个说明时,本领域的技术人员将会理解到,可以与上三种方法中任何一个以及其它途径一起使用本发明的各种方面和实施例。例如,在方法1的变形中,卫星数据信息,例如卫星星历的数据表示,可以由基站发送到远端单元,而且这个卫星数据信息可以与从缓存的GPS信号中根据本发明计算出来的伪距离结合,提供远端单元的纬度和经度(而且在很多情况下也有高度)。可以理解的是从远端站接收的位置信息可以限于纬度和经度,或者可以是包括远端站的纬度、经度、高度、速度和方位在内的扩展信息。特别是,本发明的本振校正及/或电源管理方面可以在方法1的这个变形中使用。而且,多普勒信息可以发送到远端单元20并由远端单元20根据本发明的方面来使用。
[0044] 在方法3中,基站10通过在如图1A所示的数据通信链路16上发送消息来命令远端站20进行测量。基站10也在这个消息内发送构成卫星数据信息的视野中卫星的多普勒信息。这个多普勒信息一般在频率信息格式中,而且该消息一般也说明了视野中特定卫星的标识或其它初始化数据。这个消息由作为远端单元20一部分的单独的调制解调器22来接收,并且存储在与低功耗微处理器26相连的存储器30中。微处理器26处理远端单元处理部件32-48与调制解调器22之间的数据信息传递,并且控制远端接收机20内的电源管理功能,正如随后讨论中所见的。一般,微处理器26将大多数或所有远端单元20的硬件设置为低功耗、或下电状态,进 行伪距离及/或其它GPS计算时、或当提供可选电源时除外。但是,调制解调器的接收机部分至少要周期性地打开(至满功率),以便确定基站10是否发送了一条确定远端站位置的命令。
[0045] 这个上述的多普勒信息持续时间很短,因为这种多普勒信息所需的精度不很高。例如,如果需10Hz精度而且最大多普勒频移大约±7kHz,那么视野中的每个卫星只要11比特字就足够了。如果视野中有8个卫星,那么需要88比特描述所有这些多普勒频移。使用这个信息避免了远端站20搜索这种多普勒频移的必要,藉此将其处理时间降低到十分之一以下。多普勒信息的使用也使GPS移动单元20更快地处理GPS信号抽样,而且这会趋于减少处理器32必须得到满功率以便计算位置信息的时间量。只这样就降低了远端单元20所消耗的功率并有助于改善灵敏度。附加信息也可以发送到远端站20,包括GPS消息中的数据时间点。
[0046] 接收的数据链路信号可以使用精确的载波频率。远端站接收机20可以使用自动频率控制(AFC)环路定到这个载波上并藉此校准其本身的参考振荡器,如图6所示。10毫秒的消息发送时间、20dB的接收信噪比,一般会使通过AFC的频率测量达到10Hz或更好的精度。这一般会超过本发明所需的精度。这个特性也将增强常规地成者使用本发明的快速卷积方法所进行的位置计算的精度。
[0047] 在本发明的一个实施例中,通信链路16是商用的窄带射频通信媒体,诸如双向寻呼系统。这个系统可以用于远端站20和基站10之间发送的数据量较少的实施例中。多普勒频移以及其它数据(例如,如视野中卫星的标识这样的初始化数据)的发送所需的数据量较少,而且类似地,位置信息(例如,伪距离)所需的数据量也较少。因此,窄带系统对于这个实施例足够了。这不象那些需要在短时间段内发送大量数据的系统;这些系统可能需要较高带宽的射频通信媒体。
[0048] 一旦远端站20接收到GPS处理的命令(例如,从基站10)以及多普勒信息,微处理器26就通过电池和电源管理器以及电源开关电路36(以及受控电源线21a、21b、21c和21d)激活RF到IF变频器42、模数转换器44以及数字抽样转储存储器46,藉此对这些部件提供满功率。这样,使来自GPS卫星、通过天线40接收的信号下变频到IF频率,随后进行数字化。将相邻的这样一组数据,一般对应于100毫秒到1秒(或者甚至更长)的持续时间,存储在抽样转储存储器46中。存储的数据量可以受微 处理器26的控制,使得在保存电源不如得到更好的灵敏度重要的情况下,可以在存储器46中存储更多的数据(得到较好的灵敏度),而且当保存电源比灵敏度更重要的情况下可以存储较少的数据。一般,当GPS信号可能部分被遮盖时灵敏度就更重要些,当有丰富的电源(例如,汽车电池)提供时保存电源就不太重要。该存储器46存储该数据的寻址受到现场可编程阵列(FPGA)集成电路
48的控制。GPS信号的下变频使用频率合成器38完成,频率合成器38为变频器42提供本振信号39,正如下面进一步讨论的。
[0049] 注意在这段时间中(当抽样转储存储器46被填入来自视野中卫星的数字化GPS信号时)DSP微处理器32可以保持在低功耗状态。RF到IF变频器42以及模数转换器44一般只打开很短的一段时间,足够采集并存储伪距离计算所需的数据即可。在数据采集完成之后,这些转换器电路关闭或者通过受控电源线21b和21c将功率降低(存储器46继续得到满功率),这样在实际的伪距离计算过程中不贡献附加的功耗。然后,在一个实施例中使用通用、可编程数字信号处理器IC 32(DSP)进行伪距离计算,例如德州仪器公司(Texas Instruments)的TMS320C30集成电路。在进行这种计算之前,这外DSP 32由微处理器26以及电路36通过受控电源线21e置于激活电源状态。
[0050] 这个DSP 32不同于一些远端GPS单元中使用的其它类型,比较专门定制的数字信号处理IC而言,它是通用的而且可编程的。此外,DSP 32使利用快速傅立叶变换(FFT)算法成为可能,通过在本地产生的参考和接收信号之间快速完成大量的相关运算来实现非常快速的伪距离计算。一般,需要2046个这样的相关,以完成每个接收的GPS信号的时间点搜索。快速傅立叶变换算法允许对所有这样的位置进行同时以及并行的搜索,这样就可以将所需的计算过程加速到常规方法的10倍到100倍。
[0051] 一旦DSP 32对每个视野中卫星完成为伪距离计算,在一个发明的实施例中,它将这个信息通过互连总线33发送到微处理器26。此时微处理器26可以通过向电池和电源管理器电路36发送适当的控制信号使DSP 32和存储器46再次进入低功耗状态。然后为了最后的位置计算,微处理器26利用调制解调器22在数据链路16上向基站10发送伪距离数据。除了伪距离数据,可以同时向基站10发送时间标记,表示从在缓存器46中采集初始数据到数据通过数据链路16发送的时刻所经历的时间。这个时间标 记提高了基站进行位置计算的能,因为它允许在数据采集时间计算GPS卫星位置。作为一种可选的方案,根据上述方法上,DSP 32可以计算远端单元的位置(例如,纬度、经度或纬度、经度和高度)并将这个数据发送到微处理器26,后者类似地将这个数据通过调制解调器22中继到基站10。在这种情况下,通过DSP维持从卫星数据消息接收到缓存器数据采集开始时刻所经历的时间来减轻位置计算。这样改善了远端单元进行位置计算的能力,因为它允许在数据采集时刻进行GPS卫星位置的计算。
[0052] 如图1A所示,在一个实施例中,调制解调器22使用单独的天线24通过数据链路16发送和接收消息。应该理解的是,调制解调器22包括一个通信接收机和一个通信发射机,交替耦合到天线24。类似地,基站10可以使用单独的天线14发送和接收数据链路消息,因此允许在基站10通过GPS天线12连续地接收GPS信号。
[0053] 如所希望的,在典型的例子中,DSP 32中的位置计算将需要少于几秒的时间,根据存储在数字抽样转储存储器46中的数据量以及DSP或几个DSP的速度而定。
[0054] 从上面讨论中可以清楚的是,如果来自基站10的位置计算命令不太频繁,远端单元20只需要将其高功耗电路激活一小段时间。可以预期的是,在至少很多情况下,这种命令只会使远端设备在大约1%或更少的时间内激活到它的高功耗状态。
[0055] 这样就允许电池工作到其它可能会达到的时间长度的100倍。执行电源管理操作所必须的程序命令存储在EEPROM 28或其它合适的存储介质中。这种电源管理策略对于不同的供电环境都是可接受的。例如,当主电源可用时,位置确定可以连续地进行。
[0056] 如上所示,数字抽样转储存储器46捕获对应于相当长时间的记录。这种使用快速卷积方法的大数据的有效处理为本发明提供了以低接收电平处理信号的能力(例如,当由于建筑物、树木等的部分遮盖造成接收较差时)。所有可见GPS卫星的伪距离都使用这种同样缓存的数据进行计算。在信号幅度快速变化情况(例如城市遮盖条件下)下,相对于连续跟踪GPS接收机,这就提供了改善的性能。
[0057] 图1B中所示的一个稍微不同的实现无需微处理器26及其外设(RAM 30和EEPROM28)而且用更复杂的FPGA(现场可编程门阵列)49内所包含的附加电路来替换它们的功率。
在这种情况下,FPAG 49,一个低功率器件, 用于当通过到连19检测到调制解调器22的激活时醒DSP 32a芯片。互连19将调制解调器连接到DSP 32a以及FPGA 19。当唤醒DSP芯片32a时,它直接从调制解调器发送和接收数据/DSP 32a也通过它的互连18执行功率控制操作,互连18连接到电池和电源管理器以及开关36,为电路36提供电源开/关命令。
DSP 32a根据诸如图7所示的电源管理方法,通过互连18提供给电路36的电源开/并命令,选择性地打开电源或降低不同器件的功率。电路36接收这些命令并选择性地为不同器件提供电源(或降低功率)。电路36通过互连17唤醒DSP 36通过选择性地通过可控电源线21a、21b、21c、21d以及21f中所选的一个进行电源切换,从而选择性地为不同器件提供电源。因此,例如,为了给变频器42和转换器44提供电源,可以通过线路21b和21c给这些转换器提供电源。类似地,调制解调器的电源通过可控的电源线21f提供。
[0058] 低频晶振47连接到存储器和电源管理FPGA 49。在一个实施例中,存储器和电源管理FPGA 49包含一个包括低频振荡器47的低功率定时器。当FPGA49定时器超时时,FPGA49就通过互连17向DSP 32a发送唤醒信号,然后DSP 32a就通过向电池和电源管理器以及电源开关电路36提供电源开/关命令来唤醒其它电路。其它电路通过电路36控制之下的可控电源线21a、21b、21c、21d以及21f上电,以便进行位置运算(例如确定诸如伪距离或纬度及经度之类的位置信息)。位置运算之后,DSP 32A复位FPGA定时器并降低其本身的功率,电路36也根据图7所示的方法降低其它器件的功率。应该理解的是,电池或多个电池通过受存储器及电源管理FPGA 49以及DSP 32a控制的电源线为所有功率可控的电路提供电源。也应该理解的是,不是直接通过控制到器件的电源线(例如21b)来降低功率,而是通过对该器件发信令(如图1B中所示的通过互连17的DSP 32a的情况)减少功率或唤醒至满功率,来减少器件所消耗的功率;当一个器件,例如一个集成电路,具有控制该器件的功率状态的输入时,而且该器件具有控制功率消耗所必须的内部逻辑(例如,降低该器件不同逻辑模块的功率的逻辑)时,这就常常是可能的。存储器及电源管理FPGA 49提供存储器控制和管理,包括数据从转换器44存储到存储器46时或当DSP器件32a从存储器
46中读数据时的寻址操作。如果必要的话,FPGA 49也可以控制诸如存储器刷新之类的其它存储器功能。
[0059] 图1C表示根据本发明的GPS移动单元的另一个实施例,包括很多与 图1A和1B所示的GPS移动单元相同的器件。此外,图1C中所示的GPS移动单元包知电源管理器77,连接它以便从多个电池81以及可选的外部电源输入83和太阳能电池79接收功率。电源管理器77在可控电源线的控制下为所有电路提供电源,可控电源线由图1C中所示的DSP芯片32a和存储器及电源管理FPGA 49进行管理。太阳能电池79可以使用常规的充电技术对那些电池充电。除了对电池充电以外,太阳能电池79也可以对GPS移动单元提供电源。在图1C所示的实施例中,FPGA 49通过互连75对DSP芯片32a提供唤醒信号;这个信号使DSP芯片加到满功率,以便进行为DSP芯片32a所描述的各种功能。DSP芯片也可以通过来自调制解调器22的外部命令激活到满功率状态,调制解调器22通过互连19直接连接到DSP芯片。
[0060] 图1C也表示了本发明的一个特性,即允许GPS移动单元为保存电源而折衷灵敏度。正如这里所描述的,GPS移动单元的灵敏度可以通过增加存储在存储器46中的缓存GPS信号量来增加。通过采集并数字化更多的GPS信号并将该数据存储在存储器46中可以实现。尽管这种增加的缓存造成了更多的功耗时,但改善了GPS移动单元的灵敏度。这种增加灵敏度模式可以通过GPS单元上的功率模式开关85来选择,该开关连接到总线19为DSP芯片32a提供进入增加灵敏度模式的命令。还可以通过采集较少的GPS信号的抽样转储并藉此在存储器46中存储较少量的GPS信号实现选择性地使这个功率模式开关85向DSP芯片32a发送保存更多的电源并提供较低灵敏度的命令。应该理解的是,这个功率模式选择也可以通过从基站向调制解调器22发送一个信号来实现,调制解调器22再通过互连19向DSP芯片32a传递这个命令。
[0061] 移动GPS单元的RF到IF频率变换器以及数字化系统的一个代表性例子示于图2A。1575.42MHz的输入信号通过限带滤波器(BPF)50以及低噪声放大器(LNA)52传递并发送到频率转换级。这级中所用的本振(L0)56被锁相(通过PLL 58)到2.048MHz(或其谐波分量)的温补晶振(TCXO)60上。在优选的实施例中,LO频率是1531.392MHz,即
2991×0.512MHz。所产生的IF信号以44.028MHz为中心。这个IF是所需要的,因为接近
44MHz的低成本器件有供应。特别是,电视应用中用得很多的声表面波滤波器(SAW)是很容易得到的。当然,可以使用其它的限带器件,而不是SAW器件。
[0062] 接收的GPS信号在混频器54中与LO信号混频,产生IF信号。这个IF信号通过SAW滤波器64,精确限带到2MHz带宽,然后送到I/Q下变频器68,将该信号转换成接近基带(标称4kHz中心频率)。这个下变频器的本振频率从2.048MHz的TCXO 60得到,为1.024MHz的43次谐波,即44.032MHz。
[0063] I/Q下变频器68一般是有供货的RF器件。它通常由两个混频器和低通滤器组成。在这种情况下,一个混频器的输入口馈入IF信号和LO信号,另一个混频器的输入口馈入相同的IF信号和相移了90°的LO信号。两个混频器的输出被低通滤波以消除反馈和其它失真成分。
[0064] 如图2A所示,如果需要,放大器62和66可以在限带操作之前和之后使用。
[0065] I/Q下变频器68的两个输出送入两个匹配的A/D转换器44,以2.048MHz对该信号抽样。另一种实现用比较器(未示出)代替A/D转换器44,其中每一个根据输入信号的极性输出数据的二值(1比特)序列。熟知的是这种方法对于多电平A/D转换器会导致接收机灵敏度损失大约1.96dB。但是,使用比较器而不是A/D转换器,而且在随后的抽样转储存储器46中减少对存储器的需求会节省相当多的成本。
[0066] 下变频器和A/D系统的另一种实现示于图2,其中使用了带通抽样方法。所使用的TCXO 70在频率4.096MHz处(或者其谐波)。TCXO的输出可以用作A/D转换器44(或比较器)的抽样时钟,用于将信号转换到1.028MHz。这个频率是4.096MHz的11次谐波与输入IF频率44.028MHz之差。所产生的1.028MHz IF接近四分之一抽样速率,已知这在最小化抽样类型失真上是近乎理想的。与图2A中的I/Q抽样相比,这种单个抽样器提供了一个数据信道而不是两个,但是速率加倍了。此外,数据实际上是在1.028MHz的IF处。然后,通过将要描述的随后处理中的数字装置实现I/Q频率转换到接近0MHz。图2A和2B中的装置在成本和复杂度上都是可以比拟的;通常器件的供货决定了优选的方法。但是对于本领域的技术人员很显然的是,可以使用其它接收机配置实现类似的结果。
[0067] 为了简化如下的讨论,下面假设使用图2A的I/O抽样而且抽样转储存储器46包括2.048MHz的两个数字化数据信道。
[0068] DSP 32中执行的信号处理的细节可以在图3流程图以及图4A、4B、4C、4D和4E中图示的帮助下理解。对于本领域技术人员显然的是,执行 要描述的信号处理用的机器码、或其它合适的码存储在EPROM 34中。其它非易失存储器件也可以使用。该处理的目的是针对本地产生的波形确定接收波形的定时。此外,为了实现高灵敏度,要处理很长一段的这种波形、一般是100毫秒到1秒。
[0069] 为了理解该处理,第一个应该注意的是每个接收的GPS信号(C/A模式)由高速(1MHz)重量的1023个符号的伪随机(PN)模式构造,通常称为“切普”。这些“切普”组成了图4A中所示的波形。这个模式上还加上了从卫星以50波特发送的低速数据。所有这些数据以在2MHz带宽内测量的很低信噪比接收。如果对载波频率和所有数据率的确知达到了很高的精度,而且没有数据出现,那么通过连续彼此相加,可以很大地改善信噪比并大大减少数据。例如,在1秒时间内有1000个PN帧。第一个这样的帧可以相干地加到下一帧,其结果再加到第三帧,等等。结果将是持续1023个切普的一个信号。然后可以将这个序列的相位与本地参考序列相比较,确定两个之间的相对定时,因此建立所谓伪距离。
[0070] 上述处理必须从抽样转储存储器46中存储的同样一组接收数据中对视野中的每个卫星分别进行,因此,一般来自不同卫星的GPS信号具有不同的多普勒频移而且PN模式彼此不同。
[0071] 因此载波频率的未知可能由于信号多普勒不确定造成超过5kHz、以及由于接收机本振不确定造成附加的未知量这个事实,上述处理就变得很困难。这些多普勒不确定性在本发明的一个实施例中,通过从同时监视来自视野中卫星的所有GPS信号的基站10发送这样的信息来去除。因此,就在远端站20中避免了多普勒搜索。本振的不确定性也通过使用基站到远端站的通偏信信号而执行的AFC操作而大大减少(到大约50Hz),如图6所示。
[0072] 叠加在GPS信号上的50波特数据的出现还限制PN帧的相干相加不超过20毫秒的周期。即,在数据符号反转进一步限制处理增益之前,几乎有20帧可以相干相加。附加的处理增益可以通过匹配滤波和帧幅度(或幅度的平方)相加来实现,如下面段落所样述的。
[0073] 图3的流程图在步骤100的开始,来自基站10的一个命令启动GPS处理操作(在图3中称为“定位命令”)。这个命令包括,通过通信链路16发送视野中每个卫星的多普勒频移以及这些卫星的标识。在步骤102,远端单元20通过频率锁定到从基站10发送的信号来计算它的本振漂移。另 一种方法是利用远端单元中的质量很好的温补晶振。例如,控制TCXO,所谓DCXO,目前可以实现的精确度是0.1个百万分之一,或对于L1 GPS信号大约150Hz的差错。
[0074] 在步骤104,远端单元的微处理器26打开接收机前端42、模数转换器44以及数字抽样转储存储器46的电源,并采集C/A码持续K个PN帧的数据的抽样转储,这里K一般为100到1000(相对于100毫秒到1秒的持续时间)。当足够数量的数据采集完之后,微处理器26关闭RF到IF变频器42和A/D转换器44。
[0075] 然后如下计算每个卫星的伪距离。首先,在步骤106,为了处理给定GPS卫星信号,从EPROM 34获取相应的伪随机码(PN)。正如所简单讨论的,优选的PN存储格式实际上是这个PN码的傅立叶变换,每1023个PN比特以2048个抽样的速率抽样。
[0076] 抽样转储存储器46中的数据以N个连续PN帧块处理,即2048N个复抽样块(N一般是范围5到10中的整数)。类似的操作在每块上进行,如图3底部循环(步骤108-124)所示。即,这个循环对于要处理的每个GPS信号执行总共K/N次。
[0077] 在步骤108,块的2048N个数据字乘以一个复指数,去掉信号载波上的多普勒效应,以及接收机本振漂移的影响。为了说明起见,假设从基站10发送的多普勒频率加-j2πfenT上本振偏称对应于feHz。那么,该数据的左乘取函数e 的形式,n=[0,1,2,...,
2048N-1]+(B-1)×2048N,这里T=1/2.048MHz是抽样周期,块号B的范围从1到K/N。
[0078] 然后,在步骤110,块内邻组的N(一般为10)帧数据彼此相干相加。即,抽样0,2048,4096,...2048(N-1)-1加在一起,然后1,2049,4097...2048(N-1)加在一起,等等。此时,该块只包含2048个复抽样。每个求和运算所产生的波形在4个PN帧情况下的例子示于图4B。这个求和运算可以认为是一种在快速卷积运算之前进行的预处理运算。
[0079] 然后,在步骤112-118,每个平均的帧经过一次匹配滤波运算,其目的是确定包含在该数据块中的所接收的PN码和本地产生的PN参考信号之间的相对定时。同时,也补偿了抽样次数上的多普勒效应。在一个实施例中,通过使用诸如在某种意义上用于执行循环卷积的快速傅立叶变换算法这样的快速卷积运算可以大大加速这些运算,如现在所描述的。
[0080] 为了简化讨论,开始忽略了上述多普勒补偿。
[0081] 要执行的在本运算是将正处理的块(2048个复抽样)内数据与本地存储的类似的参考PN块相比较,该比较实际上通过将该数据块的每个元素(复)乘以该参考的相应元素并将结果求和。这个比较称为“相关”。但是,单个相关只能针对该数据块的一个特定开始时间来完成,而存在2048种可能提供较好匹配的位置。对于所有可能的开始位置的所有相关运算的集合被称为“匹配滤波”运算。在优选的实施例中需要完全匹配滤波运算。
[0082] PN块的其他时间通过将PN参考循环移位并重复执行相同的运算来检测。即,如果PN码被标为p(0)P(1)...P(2047),那么循环移位一个抽样得到p(1)P(2)...P(2047)p(0)。这个修改的序列检测确定该数据块是否包含以p(10开始的PN信号。类似地,该数据块可能以抽样p(2),p(3),等等开始,而且每个都可以通过将参考PN循环移位并重复执行该检测来测定。应该很明确的是完整的测试集应该需要2048×2047=4,194,304次运算,每次需要一次复数乘法和加法。
[0083] 可以使用一种更有效的数学上等效的方法,利用快速傅立叶变换(FFT),只需要大约12x 2048次复数乘法以及两倍的加法数目。在这种方法中,在步骤112,对该数据块和PN块进行FFT。在步骤114,该数据块的FFT乘以该参考的FFT的复共轭,并在步骤118对其结果进行逆傅叶变换。这样得到的最终数据长度为2048,包含该数据块和该PN块对所有可能位置的相关集合。每个前向或逆FFT运算需要P/2log2P次运算,这里P是正在转换的数据的大小(假设使用2-基FFT算法)。对于B=2048这种情况,每个FFT需要11x1024次复数乘法。但是,如果PN序列的FFT预存在EPRoM 34中,正如在优选的实施例中那样,那么就不需要在滤波过程中计算FFT了。因此前向FFT、逆FFT以及FFT的乘积的复数乘法总数为(2x11+2)x1024=24576,比直接相关节省了171倍。图4C说明了这种匹配滤运算所产生的波形。
[0084] 本发明的优选方法是使用在1023切普的PN周期上取2048个数据抽样这样的抽样速率。这就允许使用长度为2048的FFT算法。已知是2或4的方幂的FFT算法一般比11
其它大小更有效(而且2048=2 )。因此,这样选择抽样速率就大大提高处理速度。优选的是FFT的抽样数等于一个PN帧的抽样数,这样可以实现恰当的循环卷积。即,这种情况允许对PN码的所有循环移位版本测试该数据块,如上面所讨论的。如果FFT的大小选择为与一个PN帧长度不同的抽样数,那么可以使用另一类方法,在本领 域称为“重叠存储”或“重叠相加”。这些方法大约需要上述优选实现的计算数目的两倍。
[0085] 本领域的计算人员应该清楚的是可以如何通过使用各种提供快速卷积运算的不同长度的FFT算法以及各种抽样速率来修改上述过程。此餐,一组快速卷积算法的存在,也2
具有需要的计算数与B1og2B,而不是直接相关中所需的B 成比例的特性。很多这种算法在标准参考书中列举,例如,H.J.Nussbaumer,“Fast Foruier Transform and Convolution Algorithms,”New York,Springer-Verlag,C1982。这种算法的重要例子是Agarwal-Cooley算法、拆分嵌套算法、递归多项式嵌套算法,以及Winograd-Fourier算法,前三种用于进行卷积,后一种用于进行傅立叶变换。这些算法可以用于替换上面提出的优选方法。
[0086] 现在解释步骤116中所使用的时间多普勒补偿方法。在优选实现中,由于接收GPS信号上的多普勒效应以及本振不稳的影响,所使用的抽样速率可能不精确地对应于每PN帧2048个抽样。例如,已知多普勒频移可能产生±2700纳秒/秒的延迟误差。为了补偿这种效应,在上述描述中处理的数据块需要进行时间移位以便补偿这个误差。例如,如果所处理的块大小对应于5个PN帧(5毫秒),那么从一块到另一块的时间移位可能是±13.5纳秒。较小的时间移位是由于本振的不稳定造成的。这些移位可以通过将连续数据块时移单个数据块所需的时间移位的倍数来补偿。即,如果每块的多普勒时间移位是d,那么这些块被时间移位nd,n=0,1,2,...。
[0087] 一般来说,这些时间移位是一个抽样的几分之一。使用数字信号处理方法直接执行这些运算会包括使用非整数的信号插值方法而且会产生很高的计算负担。另一种方法是本发明的优选方法,在快速傅立叶变换函数中加入该处理。众所周知d秒的时间移位等效-j2πfd于将一个函数的傅立叶变换乘以e ,这里f是频率变量。因此,时间移位可以通过将数-j2πnd/Tf
据块的FFT,对于n=0,1,2,...,1023就乘以e ,对于n=1024,1025,...,2047就-j2π(n-2048)d/Tf
乘以e ,这里Tf是PN帧长度(1毫秒)。这个补偿只对与FFT处理有关的处理
时间增加了大约8%。该补偿分成两半,以便保证相位补偿在过0Hz时的连续性。
[0088] 在匹配滤波运算完成之后,在步骤120计算该块的复数的幅度、或幅度平方。哪一种选择都几乎工作得很好。这个运算去掉了50Hz数据相 位翻转(如图4D所示)以及剩下的低频载波误差的影响。然后将2048个抽样的块加前面块的求和上,在步骤122处理。步骤122可以认为是后处理运算,在步骤112-118所提供的快速卷积运算之后进行。一直持续到所有K/N个块都处理完毕,如步骤124的判决模块所示,此时只乘下2048个抽样的一个块,从中可以计算伪距离。图4E说明了求和运算之后所得到的波形。
[0089] 伪距离确定在步骤126进行。搜索本地计算的噪声电平之上的一个峰值。如果找到了这样的一个峰值,那么它相对于该块开始出现的时间就代表了与特定PN码及相关GPS卫星有关的伪距离。
[0090] 在步骤126使用了一个插值程序寻找该峰值的位置,其精确度大于与抽样速率(2.048MHz)相关的精度。该插值程序依赖于远端接收机20的RF/IF部分中使用的预带通滤波。质量好的滤波器会得到近似三角形、底部宽度等于4个抽样的一个峰值。在这种情况下,在减去平均幅度(为了去掉DC基线)之后,最大的两个幅度可以用于更精确地确定峰值位置。假设这些幅度被标为Ap和Ap+1,不失一般性,这里Ap≤Ap+1,p是峰值幅度的索引。那么该峰值相对于与Ap对应的位置可以通过这个公式提供:峰值位置=p+Ap/(Ap+Ap+1)。例如如果Ap=Ap+1,那么找到峰值位置是p+0.5,即,两个抽样索引中间的位置。在一些情况下,带通滤波可能在该峰值附近,而且三点多项式插值可能更合适。
[0091] 在前面的处理中,用于门限的本地噪声参考可以在去掉几个最大的这种峰值之后,通过将最后平均的块中的所有数据平均来计算。
[0092] 一旦找到伪距离,就在步骤128以类似的方法对视野中的另一个卫星继续该处理,除非所有这种卫星都处理完毕。对所有这种卫星的处理完成之后,处理在步骤130继续,将伪距离数据通过通信链路16发射到基站10,在这里进行远端站的最后位置计算(假设使用方法3)。最后,在步骤132,将远端站20的大部分电路置于低功耗状态,等待新的命令执行另一次位置运算。
[0093] 现在提供上面描述的、并在图3中表示的信号处理的概要。来自一个或多个视野中GPS卫星的GPS信号使用远端GPS单元上的天线在远端GPS单元接收。这些信号被数字化并存储在远端GPS单元的缓存器中。这些信号存储之后,处理器进行预处理、快速卷积处理、以及后处理运算。这些处理运算包括:
[0094] a)将存储数据分成连续块序列,每块的持续时间等于包含在GPS信号中的伪随机(PN)码的帧周期的倍数。
[0095] b)对于每一块,进行预处理步骤,通过将连续的数据子块-子块持续时间等于一个PN帧-相干相加产生长度等于伪随机码周期长度的压缩数据块;这个加法步骤意味着每个子块相应的抽样号彼此相加。
[0096] c)对于每个压缩块,利用快速卷积技术进行匹配滤波运算,确定包含在数据块内的所接收的PN码与本地产生的PN参考信号(例如,正处理的GPS卫星的伪随机序列)之间的相对定时。
[0097] d)通过在所述匹配滤波运算结果上进行幅度平方运算以及对其进行后处理确定伪距离,后处理是通过将幅度平方数据块加到一起产生一个峰值,从而将所有块的幅度平方数据合并成一个单数据块。
[0098] 以及e)使用数字插值方法精度地定位所述单数据块的峰值,这里的位置是数据块的开始到所述峰值的距离,而且该位置代表了对应于正处理的伪随机序列的GPS卫星的伪距离。
[0099] 一般,处理缓存的GPS信号中使用的快速卷积技术是快速傅立叶变换(FFT),而且卷积的结果由计算压缩块的前向变换和预存储的伪随机序列前向变换表示的乘积,以便产生一个第一结果,然后进行第一结果的逆傅立变换恢复该结果来产生。而且,多普勒所引起的时延和本振所引起的时间误差的影响在每个压缩数据块上进行补偿,方法是在前向和逆快速傅立叶变换运算之间插入压缩块的前向FFT与一个复指数的乘积,该复指数对应于抽样号的相位被调整为对应于该块所需的延迟补偿。
[0100] 在前面的实施例中,来自每个卫星的GPS信号的处理时间上顺序时行,而不是并行的。在另一个实施例中,来自所有视野中卫星的GPS信号可以用并行方式及时地处理。
[0101] 假设基站10对所有要处理的以及范围上与远端单元20足够接近的卫星有共同的视野,这样可以避免与C/A PN码的重复周期有关的模糊性。90英里的范围将满足这个标准。也假设基站10具有GPS接收机和很好的地理位置,这样视野中的所有卫星可以被连续地跟踪到很高精度。
[0102] 尽管几处所描述的基站10的实施例表明在基站中使用诸如计算机这样的数据处理单元是为了为移动GPS单元计算诸如纬度和经度这样的位置信息,但是应该理解每个基站10可以仅将从移动GPS单元接收的诸如伪距离这样的信息中继到实际执行纬度和经度计算的中央单元或几个中央单 元。用这种方式,可以通过从每个中继基站中去掉数据处理单元及其有关的器件来减少这些中继基站的成本和复杂性。一个中央单元,可能包括接收机(例如电信接收机)以及数据处理单元及其有关器件。特别是,在某些实施例中,基站可能是虚拟的,它可能是向远端单元发送多普勒信息的卫星,这样就可以在传输服务小区中去掉基站。
[0103] 图5A和5B表示根据本发明的两个基站实施例。在图5A所示的在站中,GPS接收机501通过GPS天线501a接收GPS信号。可能是常规GPS接收机的GPS接收机501提供一个定时参考信号,一般其定时相对于GPS信号,并且提供相对于视野中卫星的多普勒信息。这个GPS接收机501连接到一个接收定时参考信号510的标准本振505上,并将其本身相位锁定到这个参考上。这个标准本振505具有一个提供给调制器506的输出。该调制器506也从该GPS移动单元视野中的每个卫星接收多普勒数据信息信号及/或其它卫星数据信息信号511。调制器506将多普勒及/或其它卫星数据信息调制到从标准本振505接收的本振信号上,以便为发射机503提供调制的信号513。发射机503通过互连514连接到数据处理单元502,这样数据处理单元可以控制发射机503的操作,以便产生通过发射机的天线503a向GPS移动单元的卫星数据信息的发送,例如多普勒信息。用这种方式,GPS移动单元可以接收多普勒信息,其信息源是GPS接收机501,而且也可以接收高精度本振载滤信号,用于校准GPS移动单元中的本振如图6所示。
[0104] 图5A中所示的基站也包括接收机504,连接它以便通过通信天线504a从远端站或GPS移动单元接收通信信号。应该理解的是天线504a可能与发射机天线503a是同一天线,这样一个单个天线可以按照常规方式即可用于发射机也可用于接收机。接收机504连接到可能是常规计算机系统的数据处理单元502。处理单元502也可以包括一个互连512,从GPS接收机511接收多普勒及/或其它卫星数据信息。这些信息可以用于处理通过接收机504从移动单元接收的伪距离信息或其它信息。这个数据处理单元502连接到可能是常规CRT的显示设备508。该数据处理单元502也连接到海量存储器件507,其中包括GIS(地理信息系统)软件(例如,Strategic Mapping,Inc.Of Santa Clara,California的Atlas GIS),用于在显示器508上显示地图。使用显示器地图,移动GPS单元的位置可以相对于所显求援地图在显示器上表示出来。
[0105] 图5B所示的另一种基站包括很多与图5A所示相同的元件。但是,不是从GPS接收机得到多普勒及/或其它卫星数据信息,而是图5B的基站包括多普勒及/或其它卫星数据信息源552,用常规方式从电信链路或无线链路得到。这个多普勒及/或卫星信息通过互连553传输到调制器506。图5B所示的调制器506的另一个输入是来自诸如铯频标本振这样的参考质量本振的振荡器输出信号。这个参考本振551提供精确的载波频率,多普勒及/或其它卫星数据信息调制在其上,然后通过发射机503发射到移动GPS单元。
[0106] 图6表示本发明的GPS移动单元的一个实施例,使用了通过类似于图1A所示的天线24的信道天线601接收的精确载波频率信号。天线601连接到调制解调器602,类似于图1A中的调制解调器22,而且这个调制解调器602连接到自动频率控制电路603,该电路锁定到这里根据本发明的一个实施例所描述的基站发送的精确载波频率信号上。自动频率控制电路603提供一个输出604,一般在频率上锁定到精确载波频率上。这个信号604通过比较器605与GPS本振606经过互连608的输出比较。比较器605所执行的比较结果是一个误差纠正信号610,提供给频率合成器609。用这种方法,频率合成器609提供质量较高的、校准的本振信号,通过互连612送到GPS下变频器614。应该理解的是通过互连612提供的信号类似于图1A中互连39提供给变频器42的本振信号;而且,变频器42类似于连接到GPS天线613接收GPS信号的GPS下变频器614。在另一个实施例中,比较器605所执行的比较结果可能通过互连610a输出,作为DSP器件620的误差纠正,该DSP类似于图1A所示的DSP芯片32。在这种情况下没有误差纠正信号610提供给频率合成器609。自动频率控制电路可以用多种常规技术实现,包括锁相环或频率跟踪环或块相位估计器。
[0107] 图7表示根据本发明一个实施例的电源管理的特定序列。应该理解的是有多种本领域已知的方法可用于降低功率。这些包括将提供给同步的、时序器件的时钟变慢以及对特定部件完全关闭电源或者关掉一个部件的某部分电路而保留其它的。例如,应该理解到锁相环和振荡器电路需要启动及稳定时间,因此设计者可能不会决定完全(或者根本上)对这些部件掉电。图7所示的例子在步骤701开始,系统的各个部件在其中初始化并置于降低功率状态。或者周期性地或者在预定的一段时间之后,调制解调器22中的通信接收机要返回满功率,以便确定是否有从基站10发送的 命令。在步骤703出现这种情况。如果在步骤705接收了来自基站单元的定位信息请,那么调制解调器22就在步骤707提示电源管理电路。此时,调制解调器22中的通信接收机或者可以关闭一段预定时间或者关闭、随后再周期性地打开,这在步骤709中表示。应该理解的是通信接收机可能保持在满功率状态而不是此时关闭。然后,在步骤711,电源管理电路通过打开变频器42和模数转换器44的电源,将移动单元的GPS接收机部分返回到满功率;如果频率振荡器38也掉电,此时将这个部件上电并返回满功率并允许一段稳定时间。然后,在步骤713,包括部件38、42和44的GPS接收机接收GPS信号。这个妗号缓存在当GPS接收机在步骤711返回满功率时也返回满功率的存储器46中。在抽样转储信息采集完毕之后,在步骤717,GPS接收机返回低功率状态;这一般包括降低变频器42和转换器44的功率,同时将存储器46保持在满功率。然后在步骤719,处理系统返回到满功率;在一个实施例中,这要包括给DSP芯片32满功率;但是应该理解的是如果DSP芯片32也提供电源管理功能,如图1C所示的实施例情况,那么DSP芯片32一般要在步骤707返回满功率。在图1A所示的实施例中,微处理器26进行电源管理功能,该处理系统,例如DSP芯片32可以在步骤719返回满功率。在步骤721,GPS信号根据本发明的方法处理,例如图3所示。然后,在GPS信号的处量完毕之后,该处理系统被置于低功率状态,如步骤23所示(除非该处理系统也为如上所示的控制电源管理)。然后,在步骤725,调制解调器22中的通信发射机返回满功率以便在步骤727将处理的GPS信号发回基站10。在处理的GPS信号一一例如伪距离信息或纠度和经度信息-发送完之后,在729,通信发射机返回低功率状态,而且在步骤731电源管理系统等待一段时间的延迟,例如一段预定的时间。这段延迟之后,调制解调器22中的通信接收机返回满功率以便确定是否有从基站发送的请求
[0108] 尽管本发明的方法和装置已经参考GPS卫星进行了描述,但是应该理解该概念可以同等地应用于使用伪星或卫星和伪星结合的定位系统。伪星是地基发射机,它广播调制在L波段载波信号上的PN码(类似于GPS信号)。一般同步于GPS时间。每个发射机可以指定一个唯一的PN码,以便使远端接收机能够识别。伪星在不能提供来自轨道卫星的GPS信号的情况下很有用,例如隧道、矿井、建筑物或其它封闭区域。这里使用的术语“卫星”意图包括伪星或伪星的等同物,而且这里使用的术语GPS信号 意图包括来自伪星或伪星等同物的GPS类型的信号。
[0109] 在前面的讨论中,发明参考全美全球定位卫星(GPS)系统方面的应用来描述。但是,显然这些方法可以同等地用于类似的卫星定位系统,而且特别是Russian Glonass系统。Glonass系统与GPS系统的主要区别是不同卫星的发射是通过使用略微不同的载波频率,而不是使用不同的伪随机码来彼此区别的。在这种情况下,实际上前面描述的所有电路和算法都可以使用,除了当处理新的卫星发射时使用不同的指数因子来预处理数据。这个运算可以与图3中方框108中的多普勒校正运算结合,而不需要任何附加的处理运算。在这种情况下只需要一个PN码,因此去掉模块106。这里使用的术语“GPS”包括这些其它的卫星定位系统,包括Russian Glonass系统。
[0110] 尽管图1A、1B和1C表示了处理数字信号的多个逻辑模块(例如图1A中的46、32、34、36、30、28),但是应该理解的是这些模块中的一些或全部是集成在一个单片集成电路上的,同时还保持了这种电路的DSP部分的可编程性。这样一种实现可能对于低功率和成本敏感的应用很重要。
[0111] 应该理解的是图3中的一个或几个运算可以由硬件逻辑完成,以便增加整体的处理速度,同时保持DSP处理器的可编程性。例如,模块108的多普勒校正功能可以由专用硬件完成,放置在数字抽样转储存储器46和DSP IC 32之间。在这种情况下,图3中的所有其它软件功能可以由DSP处理器来实现。而且,几个DSP可以一起在一个远端单元中使用,提供更高的处理能力。也会理解的是可以采集(抽样)多组GPS数据信号帧并如图3所示处理每一组,同时考到每组帧采集之间的时间。
[0112] 已经建立了一个演示系统,作为本发明实施例的一个例子,验证这里描述的方法和算法中的运算,并且显示了使用这些方法和算法可能带来的灵敏度的改善。该演示系统包括GEC Plessey Semiconductors的GPS天线和RF下变频器,后面跟一个Gage Applied Sciences Inc.的数字化缓存板。天线和下变频器执行图1A的功能38、40、42和44,数字化缓存执行图1A的功能44、46和48。在IBM PC兼容机上使用运行在Window 95操作系统下的Pentium微处理器执行数字信号处理。这样仿真DSP芯片32和存储器外围器件34的功能。来自视野中卫星的多普勒信息作为信号处理程序的输入提供给信号处理软件,用以仿真调制解调器和微处理器22、24、25、26的功能。
[0113] 这个演示系统的算法使MAYLAB编程语言开发。在各种阻塞情况下得到的真实GPS信号上进行了大量测试。这些测试已经验证该演示系统的灵敏度性能实际上超过了几种同时测试的商用GPS接收机。附录A提供了这些测试中使用的MATLAB机器码的详细清单并且作为本发明的快速卷积运算的一个例子(例如图4)。
[0114] 在前面说明中,发明已经参考其特定示范实施例进行了描述。但是,显然的是可以在不背离所附权利要求中提出的发明更宽泛的精神和范围的情况下,对此进行各种修正和变更。因此该说明和附图被认为是说明性的而不是限制意义的。
[0115] 附录A
[0116] function(sv,prange,snrin,snrout,svdoppler,outdata)=
[0117] gps(filename,srate,codes,doppler,no_pred,samplerange)
[0118] %
[0119] %function
[0120] % (sv,prange,snrin,snrout,svdoppler,outdata)=gps(filename,srate,codes,doppler,
[0121] %no_pred,samplerange)
[0122] %
[0123] %N.Krasner Feb.20,1996..
[0124] %OPrecision Tracking,Inc.,San Jose,CA.95117
[0125] %
[0126] %This function processes digitized data and provides paeudoranges as outputs
[0127] %together with other statistical quanitites,as described below.[0128] %
[0129] %Data to be processed isstored in a file named′filename′.[0130] %
[0131] %This function works on data from Gage digitizer at eithers ample rate[0132] %3x2.048 MBz(if srate==0)or at sample rate 6X2.048 MBz(if arate==1).[0133] %where it is assumed that IF is 35.42-(1400/45)=4.308889 MBz.[0134] %The following are definitions of inputs and outputs of the routine:
[0135] %
[0136] %Codes are the SV numbers;if codes=0,then all codes will be used;
[0137] %
[0138] %Doppler=(dopper(1)doppler(2)...doppler(n)span),apecifies the mean[0139] %doppler of each of the n satellite plus a span to be searched over;if span
[0140] %is missing or=0),then search is only done at the specified dopplers.[0141] % An algorithn is used to select the guantization size of doppler steps.
[0142] %In some cases even if span is nonzero,only one doppler frequency per[0143] satellite %will be used.The search range is rapan relative to each doppler.
[0144] %
[0145] %no_pred is number of predetection frames
[0146] %
[0147] %All data in the file is processed if samplerange is deleted.Bowever,if
[0148] %it ispresent it is two value and has the notation:
[0149] % samplerange=(lower_index,upper_index);
[0150] %If these indices are not within range of that provided in the gage file,
[0151] %then an error message is provided.
[0152] %
[0153] %Defaults are:if doppler has only one value,then doppler_span will be zero
[0154] % if no_postd is not sPecified,then all data will be used[0155] % if no_pred is not apecified,then pred will be set to 9[0156] % if no_pred is specified,then no_postd must be specified[0157] %
[0158] %Outputs are codenumbers,pseu dranges,snrs and best doppler[0159] %with the pseudoranges expressed in nsec and anrs in dB.
[0160] %A signal peak must exceed 15 dB threshold for detection.An[0161] %interpolation algorithm is used to determine signal peak location.[0162] %If no codes are found,the the retuxned function will beall zeros.[0163] %
[0164] %Outdata is a vector of size 2048 that represents the output signal plus
[0165] %noise after postdetection integration for each detected satellite vehicle,
[0166] %for the best doppler.This data was used to find pseudoranges[0167] %%%%------------------------------------------------------------%%%%
[0168] %First open the file and find the buffersize and indices to[0169] %process,which may be all data if not specified in input arguments[0170] (filevals,rate)=gageopen(filename);
[0171] buffsize=filevals(3); %total number of samples in file[0172] if nargin==6,
[0173] lower_index=samplerange(1);upper_index=samplerange(2);
[0174] if upper_index>buffsize-1,
[0175] error(Samplerange is out of bounds′);
[0176] end
[0177] else,
[0178] lower_index=0;upper_index=buffsize-1;
[0179] end
[0180] %%%%-----------------------------------------------------------------%%%
[0181] %Now find number of doppler bins;the center of these bins are[0182] % called dopps and they are referenced to the center of the input dopplers
[0183] if length(doppler)==length(codes),span==0;
[0184] elseif length(doppler)==length(codes)+1,
[0185] span=doppler(length(codes)+1);
[0186] else,
[0187] error(′Length of doppler vector must equal length of codes,or 1 more′);
[0188] end
[0189] if span<0,error(′Span must be greater than zero′);end
[0190] if srate==0,s_per_frame=6;else,s_per_frame=12;end
[0191] if nargin==3,no_pred=min(9,fix(buffsize/(1024*s_per_frame)));end[0192] no_postd=fix(buffsize/(no_pred*1024*s_per_frame));
[0193] if no_pred<1,error(′Number of predetection frames must be at least1′);end
[0194] if no_postd<1,error(′Number of postdetection frames must be at least1′);end
[0195] deltaf=(1/3)*1000/no_pred;%yields about 1.5 dB loss which ia made up[0196] %worst case by two independent detections for
[0197] %when truefreq is midway between bins[0198] if span
[0199] dopps=0;%no need to quantize doppler
[0200] else,
[0201] dopps=(0:-deltaf:-span);
[0202] dopps=sort((dopps deltaf:deltaf:span));
[0203] end
[0204] %%%---------------------------------------------------------------%%%
[0205] % Now get the FFT of codes and put them in a matrix of aize length(codes)X2048
[0206] if codes==0,codes=1:28;end %search all codes in this case
[0207] codearray=zeros(length(codes),2048);
[0208] for k=1:length(codes),
[0209] codearray(k,:)=gps_resampled(codes(k));
[0210] end
[0211] %%%------------------------------------------------------------%%%
[0212] %In the following we input data in blocks equal to a number of PN[0213] %frames equal to no_pred.For examPle if no_pred=7,the the number[0214] %of aamples fram the gage is 2048*3*7=43008,so that in this case[0215] %a full 4 Mbyte collection would take about 93 iterations.Each[0216] %iteration then performs the prec summation,cross-correlation,mag-[0217] %squared operation and summation with previous blocks for all dopplers[0218] %and all satellite vehicles specified.pplers
[0219] blocksize=1024*s_per_frame*no_pred;
[0220] start=lower_index-blocksize;
[0221] 1c=length(codes);1d=lensth(dopps);
[0222] prdata=zeros(1c*1d,2048);
[0223] no_blocks=fix((buffsize-10*s_per_frame)/blocksize); %extra 60 or120
[0224] samples
[0225] %for overlap-save allws impulse response to
[0226] %60 or 120;see if_2_base m-file[0227] for n=1:no_blocks,
[0228] start=start+blocksize;
[0229] (data,count)=gageread(filevals,start,blocksize+10*s_per_frame);
[0230] data=if_2_base(data,srate); %Converts data to baseband and decimates to
[0231] %2.048MBz
[0232] data=data(21:20+2048*no_pred); %reject edge effect data(overlaps save)
[0233] for k=1:1c, %Iterate over Svve
[0234] ref=codearray(k,:); %code to be used for SV code(k)[0235] for d=1:1d, %Iterate over dopplers
[0236] df=doppler(k)+dopps(d);
[0237] rdata=data.*exp(-j*2*pi*df*(0:2048*no_pred-1)/2.048e5);
[0238] rdata=sum(reshape(rdata,2048,no_pred)′); % does pred summation
[0239] rdata=fft(rdata).*ref; %does matched filter[0240] %compensate for time slip Per block which is fdopp/fo times time
[0241] %noting that fdoop/fo is doppler time slip per second[0242] timeslip=1e-3*no_pred*df/1575.42e6;
[0243] phase=exp(-j*2*pi*timeslip*(n-1)*(0:1024)*1e3);
[0244] rdata(1:1025)=rdata(1:1025).*phase;
[0245] rdata(1026:2048)=rdata(1026:2048);.*conj(phase(1024:-1:2));
[0246] rdata=ifft(rdata);
[0247] rdata=real(rdata).^2+imag(rdata)^2; %magnitude[0248] prdata((k-1)*1d+d,:)=prdata((k-1)*1d+d,:)+rdata;
[0249] end
[0250] end
[0251] end
[0252] %%%---------------------------------------------------------------%%%
[0253] sv=[];,prange=[];,snrin=[];snrout=[];svdopper=[];outdata=[];
[0254] %Now we look for peaks exceeding threshold
[0255] for k=1:1c, %look at all Sv′s and dopps
[0256] z=prdata((k-1)*1d+)(1:1d),:); %data matrix for Bv#k and all dopplers
[0257] z=z-mean(mean(z));
[0258] noise=sqrt(mean(mean(z.^2))); %coarse noise rms[0259] threshold=5.7*noise;
[0260] %yields Pfa less than 1e-4 per using all
[0261] %2Bav′sand 10 dopplers per SV[0262] indt=find(z
[0263] noise=sqrt(mean(mean(z(indt).-2)));%refined noise getting rid of signal
[0264] dz+0.2*max(mrotate(z,-1),mrotate(z,1)); % detection stat.eliminating
[0265] %picket fence problem[0266] (maxd,indd)=max(d′); %finds max and location for each doppler[0267] (maxsv,indsv)=max(maxd); %find global peak for this sv[0268] if maxsv>threshold, %then we detect this svl
[0269] r=(maxsv/noise)-2; %peak to noise away from peak[0270] snin=sqrt(r/(no_pred-2-no_postd)); % snrin via N.Kanalysis
[0271] snrin=(snrin10*log10(snin));
[0272] %now find snrout at peak
[0273] snout=(no_pred-2*no_postd)*snin-2/(1+2*no_pred*snin); wiaN.K anal.
[0274] snrout=(snrout 10*log10(snout));
[0275] sv=(sv codes(k));
[0276] d=z(indsv,:); %data for best doppler
[0277] outdata=(outdata d);
[0278] svdoppler=(svdoppler doppler(k)+dopps(indsv));%best doppler[0279] ind0=indd(indsv); %best sample for best
[0280] inds0=(ind0_4:ind0+4); %block of 9 data samples about ind0;
[0281] ninds=find(inds0<=0);
[0282] pinds=find(inds0>2048);
[0283] if length(ninds)>0,%keep data to interpolate within range[0284] inds0(ninds)=inds0(ninds)+2048;
[0285] elseif length(pinds)>0,
[0286] inds0(pinds)=indso(pinds)-2048;
[0287] end
[0288] dint=interp(d(inds0),10);%go to rate 20 MB2
[0289] dint=interp(dint,10); %go to rate 200 MBz
[0290] dint-interp(dint,5); %go to rate 1 GBz
[0291] (amax,inax)*max(dint); %find max
[0292] indnax=min(find(dint>0.8*amax)); %max above 80%
[0293] tmax=ind0+(indmax-2001)/500; %pseudorange in samples[0294] if tmax>=2048,
[0295] tmax=tmax-2048;
[0296] elseif tmax<0,
[0297] tmax=tmax+2048;
[0298] end
[0299] tmax=tmax*500; %pseudorange in units of nsec
[0300] prange=(prange tmax);
[0301] end
[0302] end
[0303] if length(sv)==0, %then there were no detections
[0304] sv=0;prange=0;snrin=0;anrout=0;svdoppler=0;outdata=0;
[0305] end
[0306] fclose(′all′);
[0307] function y=gpscodes(num)
[0308] %y=gpscodes(num)
[0309] %
[0310] %N.Kraaner Jan.22,1996.
[0311] %OPrecision Tracking,Inc.,San Jose,CA.95117
[0312] %
[0313] %Returns all 1023 bit codes associated with aatellite in an[0314] %array y of size 37X1023,Each row is the code aasociated
[0315] %with the satellite having the corresponding ID number.That[0316] %ig row 1 ia the PN(Gold)code of satellite 1,etc.
[0317] %
[0318] %If num is specified then only one code with that number is[0319] %returned
[0320] y1=pngen((3,10),1023,ones(1,10));
[0321] y2=pngen((2,3,6,8,9,10),1023,ones(1,10));
[0322] delays=(5,67,8,17,18,139,140,141,251,252,254,255,256,257,258);
[0323] delays=(delays,469,470,471,472,473,474,509 512,513,514,515,516)[0324] delays=(delays,859 860 861 862 863 950 947 948 950);
[0325] if nargin==0,
[0326] for k=1:length(delays),
[0327] y(k,:)=xor(y1,rotate(y2,delays(k)));
[0328] end
[0329] else,
[0330] y=xor(y1,rotate(y2,delays(num)));
[0331] end
[0332] functionz=gps_rsmp(codenumber)
[0333] %
[0334] %N.Krasner Feb.16,1996.
[0335] %OPrecision Tracking,Inc.,San Jose,CA.95117
[0336] %
[0337] %Returns the resampled Fourier transform of specified 1023 bit[0338] %GpS code,resampled to at rate 2048 kBz and weighted
[0339] %with a*sinc* function to emulate the transform of the
[0340] %seguences consisting of a set of square pulses,which
[0341] %is ideally bandpass filtered to the first nulls(=1023kBz).[0342] %
[0343] %If codenumber is 0,then all gps codes are returned in a matrix[0344] %of size 37X204B.
[0345] %
[0346] %The transformed data contains real and imaginary components[0347] %each of which is rounded to 4 bitsigned integers in the range[0348] %(-7,7).This is the form stored in EPROM.This quanitization[0349] %minimizes required storage,but results in negligible loss of[0350] %performance.
[0351] %
[0352] %Asin the function gpscodes,the returned value contains 37[0353] %rows each corresponding to the corresponding GP5 code(row 1[0354] %contains code 1,etc.)if all codes are requested.Each row is[0355] %of length 2048 and,as stated above contains complex words whose[0356] %compomenta are integers in the range(-15,15).
[0357] %
[0358] %Note that this function calls the function gpacodes to create[0359] %the various Gold codes.
[0360] if codenumber==0,
[0361] yagpscodes;
[0362] else,
[0363] y=gpscodes(codenumber);
[0364] end
[0365] %returna matrix 37X1023 of GPS codes
[0366] y=2*y-1; %convert.to ±1[0367] if codenumber==0,
[0368] z=zeros(37,2048);
[0369] fork=1:37,
[0370] fyl=fft(stretch(y(k,:),2));
[0371] fyll=[fyl(1:1024).*sinc((0:1023)/1023)0 0);
[0372] fyll=(fyll fyl(1025:2046).*sinc((1022:-1:1)/1023));
[0373] z(k,:)=conj(fyll);%need conjugate for matched filter[0374] end
[0375] else,
[0376] fyl=fft(stretch(y,2));
[0377] fyll=(fyl(1:1024).*sinc((0:1023)/1023)0 0);
[0378] fyll=(fyll fyl (1025:2046).*sinc((1022:-1:1)/1023));
[0379] z=conj(fyll);%need conjugate for matched filter
[0380] end
[0381] end
[0382] z=round(z/20);%since max is 171.9 but few values are above 140[0383] rz=min(real(z),7);rz=max(rz,-7);%limit range
[0384] iz=min(imag(z),7);iz=max(iz,-7);%limit range
[0385] z=rz+j*iz;
[0386] functioo data_out=i f_2_base(data_in,rate)
[0387] %data_out=if_2_base(data_in)
[0388] %
[0389] %N.Krasner Feb.20,1996.
[0390] %OPrecision Tracking,Inc.,San Jose,CA.95117
[0391] %
[0392] %
[0393] %If rate ism issing or equals 0,then the input rate is assumed[0394] %to be 3*2048 kBz.If rate equals 1,then it is 6*204B kBz.[0395] %
[0396] %Converts data from GAGE digitizers ampled at either 3*2048 kBz[0397] %or 6*2048 kBz with IF6.144 MBz(3*2.048)centered at
[0398] %35.42-(1400/45)=4.308889 MBz to a complex(I,Q)stream
[0399] %of data withsample rate 2.048 MBz centered at 0
[0400] %frequency(nominally).This routine doesnot compensate for
[0401] %any doppler shifts on SV′s,nor any LO drifts.Note that the outPut[0402] %data length is either1/3 or 2/3 that of the input.
[0403] ifnargin==1,rate=0;end
[0404] ifreq=35.42-(1400/45); %in MBz
[0405] if rate==0, %case where sample rate is 3*2048 kBz
[0406] srate=3*2.048;%in MBz%sample rate for GAGE
[0407] (u,v)=size(data_in);if u>v;data_in=data_in′;end;1d=length(data_in);
[0408] c=exp(-j*2*pi*(0:1d-1*ifreq/srate); %LO
[0409] data_out=data_in.*c;clear data_in c %convert to 0
[0410] h=firl(50,.9/3.072);
[0411] data_out=filter(h,1,data_out); %filter to=1MBz[0412] data_out=data_out(1:3:1d); %decimate to yield 2.048 MBz srate[0413] else, %case wheres ample rate is 6*2048 kBz
[0414] srate=6*2.048; % in MBz
[0415] (u,v)=size(data_in);ifu>v;data_in=data_in′;end;1d=length(data_in);
[0416] c=exp(-j*2*pi*(0:1d-1)*ifreq/Brate); %LO
[0417] data_out=data_in.*c;clear data_in c %convert to 0
[0418] h=firl(100,.9/6.144);
[0419] data_out=filter(h,1,data_out); %filter to ±1 MBz[0420] data_out=data_out(1:6:1d); %decimate to yield 2.048 MBz arate[0421] end
[0422] functiony=mrotate(x,m)
[0423] %y=mrotate(x,m);matrix rotation bymunits
[0424] %
[0425] %N.Krasner feb.20,1996.
[0426] %OPrecision Tracking,Inc.,San Jose,CA.95117
[0427] m=round(m);
[0428] m=rem(m,1x);
[0429] if m>0,
[0430] y=(x(:,1x-m+1:1x)x(:,1:1x-m));
[0431] elseif m<0,
[0432] y=(x(:,1-m:1x)x(:,1:-m));
[0433] else,
[0434] y=x;
[0435] end
[0436] functiony=pngen(taps,npts,fill)
[0437] %pngen(taps,npts,fill)
[0438] %
[0439] %N.Krasner Feb.13,1995.
[0440] %ONormanF.Krasner,San Carlos,CA.94070
[0441] %
[0442] %PNGEN generates *npt* number of pointsof the psuedo random[0443] % sequence defined by a shift register of length n with feedback[0444] taps
[0445] % ′taps′and initial fill′fill′.PN(npts,taps,
[0446] fill)returns a
[0447] % vector of length npts containing this sequence
[0448] Atypical example(1,6,8,14)for R14,fill=(1[0449] zeros(1,13))
[0450] %
[0451] % If a single number is given in-taps-it is interpreted as[0452] % the octal value specifying the taps,asin Peterson and Weldon.[0453] For
[0454] % example a code 2767(octal)=010 111 110 111.we delete the[0455] leading 0
[0456] % to get the polynomial 10 111 110 111.The feedback taps for this[0457] caBe
[0458] % are found by ignoring the first one and choosing the remaining[0459] -ones-
[0460] % to get position.For this case the taps are thua 2 3 4 5 6 8 9 10.[0461] if length(taps)==1,
[0462] taPs=sprintf(′%.of′,taps);ntaps=();
[0463] if taps(1)==′1′,ntaps=(1);
[0464] elseif taps(1)==′2′,ntaps=( 1 0 );
[0465] elseif taps(1)==′3′,ntaps=(1 1 );
[0466] elseif taps(1)==′4′,ntaps=(1 0 0 );
[0467] elseif taps(1)==′5′,ntaps=(1 0 1 );
[0468] elseif taps(1)==′6′,ntaps=(1 1 0 );
[0469] elseif taps(1)==′7′,ntaps=(1 1 1 );
[0470] end
[0471] for k=2:length(taps)
[0472] iftaps(k)==′0′,ntaps=(ntaps 0 0 0 );
[0473] elseif taps(k)==′1′,ntaps=(ntaps 0 0 1 );
[0474] elseif taPs(k)==′2′,ntaps=(ntaps 0 1 0 );
[0475] elseif taps(k)==′3′,ntaps=(ntaps 0 1 1 );
[0476] elseif taPs(k)==′4′,ntaps=(ntaps 1 0 0 );
[0477] elseif taPs(k)==′5′,ntaps=(ntaps 1 0 1 );
[0478] elseif=taps(k)==′6′,ntaps=(ntaps 1 1 0 );
[0479] elseif taps(k)==′7′,ntaps=(ntaps 1 1 1 );
[0480] end
[0481] end
[0482] ntaps(1)=();
[0483] taps=find(ntaps);
[0484] end
[0485] n=max(taps);
[0486] if nargin<=2,fill=(1zeros(1,n-1));end
[0487] if nargin==1,npts=(2^n)-1;end
[0488] y=zeros(1,npts);
[0489] x=zeros(1,n);
[0490] x=fill(length(fill):-1:1);
[0491] for i=1:npts
[0492] y(i)=x(n);
[0493] x=(rem(sum(x(taps)),2),x(1:n-1));
[0494] end
[0495] function(file-vals,sample_rate)=gageopen(filename)
[0496] %Read gage formatted file,with particular number of samples[0497] % function(file_vals,sample_rate)=gageopen(filename)
[0498] %
[0499] %3.Wilson Jan.13,1996.
[0500] %OPrecision Tracking,Inc.,San Jose,CA.95117
[0501] file_vals(1)=fopen(filename,′r′);
[0502] (sample_rate,sample_depth,head_vals,operation_mode)=
[0503] rdgghead(file_vals(1));
[0504] file_vals(2)=operation_mode;
[0505] file_vals(3)=sample_depth;
[0506] file_vals(4:6)=head_vals(1:3)
[0507] funetion(buf,count)=gageread(file_vals,start,numsamples)[0508] %Read gage formatted file,with particular number of samples[0509] % function(buf,count)=gageread(file_vale,start,numsamples)[0510] %B.Wilson Jan.13,1996.
[0511] %OPrecision Tracking,Inc.,San Jose,CA.95117
[0512] %files_vals
[0513] % 1-file id
[0514] % 2-operation_mode-if=1;file is memory image interleave[0515] sample_depth long;=2 memory image
[0516] % 3-sample_depth
[0517] %
[0518] ns2=numsamples/2;
[0519] fid=file_vals(1);
[0520] if(file_vals(2)==2)
[0521] buf=zeros(numsamples,1);
[0522] fresult=fseek(fid,512+start,-1);% move torequested point in[0523] data portion of file
[0524] -(buf,count)=fread(fid,numsamples,′uchar′);
[0525] else
[0526] buf=zeros(ns2,2);
[0527] fresult=fseek(fid,512+(start/2),-1); %move to requested[0528] point in data portion of file
[0529] (buf(:,1),c1)=fread(fid,ns2,′uchar′);
[0530] fresult=fseek(fid,512+(start/2)+file_vals(3),-1); % move to[0531] BANK B,portion of memory image
[0532] (buf(:,2),c2)=fread(fid,ns2,′uchar′);
[0533] count=c1+c2;
[0534] buf=reshape(buf′,numsamples,1);
[0535] end
[0536] %
[0537] buf=buf-128;
[0538] function(sample_rate,sample_depth,head_vals,operation_sode)-[0539] rdgghead(fid)
[0540] %Read gage formatted header
[0541] %B.wilson Jan.13,1996.
[0542] %OPrecision Tracking,Inc.,San Jose,CA.95117
[0543] %
[0544] %
[0545] %
[0546] %sample_rate=
[0547] (1,2,5,10,20,50,100,200,500,1000,2000,5000,10000,20000,50000);
[0548] samp le_rate_tab le=
[0549] (1,2,4,5,10,12.5,20,25,30,40,50,60,100,120,125,150,200,250);
[0550] %
[0551] fresult=fseek(fid,0,-1); % rewind the file
[0552] %
[0553] tmp=fread(fid,14,′char′);
[0554] s=setatr(tmp′);
[0555] %
[0556] fresult=fseek(fid,16,-1); %move to name variable[0557] tmp=fread(fid,9,′char′);
[0558] sname=setstr(tmp′);
[0559] %
[0560] fresult=fseek(fid,287,-1); %move to index to sample rate table
[0561] variable
[0562] sample_rate_index=fread(fid,1,′int16′);
[0563] if(sample_rate_index==42) %42is′external′
[0564] sample_rate=-1;
[0565] else
[0566] sample_rate=sample_ate_table(sample_rate_index-17);
[0567] end
[0568] %
[0569] fresult=fseek(fid,289,-1);%move to index to operation mode variable[0570] operation_mode=fread(fid,1,′int16′)
[0571] %%if(operation_mode==1)
[0572] %% ample_rate=sampie_rate/2;
[0573] %% end
[0574] %
[0575] fresult=fseek(fid,301,-1);%move to sample_depth variable[0576] sample_depth=fread(fid,1,′int32′)
[0577] if(operation_mode==1)
[0578] sample_depth=sample_depth/2 %seemslike a′bug′to me[0579] if(sample_dePth==4194304)
[0580] sample_depth=sample_depth/2
[0581] end
[0582] end;
[0583] %
[0584] fresult=fseek(fid,313,-1); %move to starting_address
[0585] head_vals=fread(fid,3,′int32′);
[0586] %
[0587] fresult=fseek(fid,339,-1); %move tosample_depth variable[0588] resolution_12_bits=fread(fid,1,′int16′);
[0589] %
[0590] fresult=fseek(fid,345,-1); %move to sample_depth variable[0591] sample_offset=fread((fid,1,′int16′);
[0592] %
[0593] fresult=fseek(fid,349,-1); %move to sample_depth variable[0594] sample_bits=fread(fid,1,′int16′);
[0595] funtion Y=rotate(x,q)
[0596] %y=rotate(x,q)
[0597] %Rotates vector by q places
[0598] %N.Krasner Nov.28,1995.
[0599] %ONorman Krasner,San Carlos,CA.94070
[0600] %If q is deleted this rotates a vector by interchanging the first and[0601] last half
[0602] %of the vector.If the vector is oddin length the mid point is[0603] %placed at the beginning of the new vector.
[0604] %
[0605] %If q is present and>0 this rotates the vector x right by q positions;
[0606] e.g.
[0607] %ifx=(1 1 0 1 0),then rotate(x,2)yieldsy=(1 0 1 1 0).If q is<0[0608] then
[0609] %this rotates x to the left.
[0610] (m,n)=size(x);mn=max(m,n);
[0611] if nargin>1,q=rem(g,mn);end
[0612] ifm>1 s n>1,error(′This function works only for vectos,not[0613] matrices.′);end
[0614] if m>1,x=x′;end
[0615] ′if nargin==1,
[0616] if rem(mn,2)==0,
[0617] pivot=1+mn/2;
[0618] else pivot=(mn+1)/2;
[0619] end
[0620] y=(x(pivot:mn)x(1:pivot-1));
[0621] elseif abs(q)>0,
[0622] if q<0,q=q+mn;end %fix for shifts left[0623] y=(x(mn-q+1:mn)x(1:mn-g));
[0624] elsey=x;
[0625] end
[0626] end
[0627] if m>1,y=y′;end
[0628] functionz=sinc(x)
[0629] %z=sinc(x)
[0630] %N.Krasner April 21,1991
[0631] %ONorman Krasner,San Carlos,CA.90070
[0632] %
[0633] %Definition:sinc(x)=sin(pi*x)/(pi*x),where x is a vector/matrix.[0634] %sinc(x)=1if x=0
[0635] ind1=find(x==0);
[0636] ind2=find(x-=0);
[0637] z=x;
[0638] x(ind1)=ones(1,length(ind1));
[0639] x(ind2)=sin(pi*x(ind2))./(pi*x(ind2));
[0640] z(:)=x;
[0641] function z=stretch(signal,period)
[0642] %function z=stretch(signal,period)
[0643] %
[0644] %N.Kraaner March 12,1995
[0645] %ONorman Krasner,San Carlos,CA.94070
[0646] %This function stretchs a signal by replacing each element[0647] %with m identical elements;m is specified by′period.′
[0648] (u,v)=size(signal);
[0649] if u>1 v>1error(′This function works only for vector inputs.′);end[0650] if u>1,signal=signal′;end
[0651] a=ones(period,1)*signal;
[0652] z=a(:)′;z=conj(z);
[0653] if u>1,z=conj(z′);end
[0654] function y=xor(a,b);
[0655] %function y=xor(a,b);
[0656] %Exclusive or,term by term,of two vectors
[0657] %N.Krasner June13,1994
[0658] %ONorman Krasner,San Carlos,CA.94070
[0659] y=(as-b)|(bs-a)。
QQ群二维码
意见反馈