本文主要介绍 GPS 是如何扩频与解扩的。

GPS 信号发送

简单来讲,GPS 数据的发送与接收分为以下几个步骤:

如图所示,在发送时首先进行扩频,然后调制(通常是 BPSK)。接收时正好相反,先解调再解扩。

调制

在调制中主要使用了三种载波(L1、L2、L5)。

L1、L2、L5 的中心频率均为原子钟核心频率 f0=10.23MHzf_0=10.23\text{ MHz}f0​=10.23 MHz 的整数倍。具体的,有

  • f1=154f0=1575.42MHzf_1=154f_0=1575.42\text{ MHz}f1​=154f0​=1575.42 MHz
  • f2=120f0=1227.60MHzf_2=120f_0=1227.60\text{ MHz}f2​=120f0​=1227.60 MHz
  • f5=115f0=1176.45MHzf_5=115f_0=1176.45\text{ MHz}f5​=115f0​=1176.45 MHz

这样做的好处在于更加容易生成载波信号。

扩频

GPS 主要使用了三种扩频码:P 码、C/A 码、M 码。其中,M 码为军用,缺少相关资料。

P 码(Precise code)频率为 10.23 Mbps,运行在 L1 和 L2 上。P 码总长度较长,共有 2×10142\times 10^{14}2×1014 bit,发送需要 37 周。每个卫星(1-32)和地面站(33-37)都被分配了其中的一部分,该部分周期为 7 天,对应的是星历更新的周期。

P 码采用的是相位调制,如图所示:

加密过后的 P 码被称为 P(Y) 码。其区别是,P(Y) 码在第四个子帧中有一个标志告诉接收器扩频码已被加密,一次来防止欺骗。

C/A 码(Civilian Acquisition code)顾名思义为民用码。他的速率为 P 码的十分之一,即 1.023 Mbps。每颗卫星的 C/A 码有 1023 位,每毫秒即可广播一次。它运行在 L1 上,旨在提供标准定位服务(SPS)。作为对比,P(Y) 码则提供的是精准定位服务(PPS)。

在设计之初,美国低估了 C/A 码的定位精准度,于是通过选择可用性 (SA) 故意降低到 95% 的时间为水平 ±100 米、垂直 ±175 米精度。这一措施直到 21 世纪初才取消。

P 码和 C/A 码的生成都利用的是线性移位反馈寄存器(LSFR)。我们以 C/A 码为例。

如图是一个典型的 C/A 码生成器结构。其中,G1 和 G2 为 LSFR。输出时,通过相位选择器选择 G2 中的两个位置做异或,所得结果再与 G1 最后一位异或,即可得到扩频码。相位选择器选择的位置共有 37 种,每个卫星或地面站均不相同。

G1 和 G2 的具体原理如下所示:

他们都利用的是有限域中的运算。其中,

  • G1 为 1+x3+x101+x^3+x^{10}1+x3+x10
  • G2 为 1+x2+x3+x6+x8+x9+x101+x^2+x^3+x^6+x^8+x^9+x^{10}1+x2+x3+x6+x8+x9+x10

根据文档,G2 寄存器设置有初始值和时延。具体的值如下所示:

不过,初始值和时延不是必须的。在没有时延的情况下,如果将初始值全部置 1,最终的结果相同。

MATLAB 仿真代码如下:

function g = C_A_Code(num)taps = [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];g2s = [1, 1, 0, 0, 1, 0, 0, 0, 0, 0; % 14401, 1, 1, 0, 0, 1, 0, 0, 0, 0; % 16201, 1, 1, 1, 0, 0, 1, 0, 0, 0; % 17101, 1, 1, 1, 1, 0, 0, 1, 0, 0; % 17441, 0, 0, 1, 0, 1, 1, 0, 1, 1; % 11331, 1, 0, 0, 1, 0, 1, 1, 0, 1; % 14551, 0, 0, 1, 0, 1, 1, 0, 0, 1; % 11311, 1, 0, 0, 1, 0, 1, 1, 0, 0; % 14541, 1, 1, 0, 0, 1, 0, 1, 1, 0; % 16261, 1, 0, 1, 0, 0, 0, 1, 0, 0; % 15041, 1, 1, 0, 1, 0, 0, 0, 1, 0; % 16421, 1, 1, 1, 1, 0, 1, 0, 0, 0; % 17501, 1, 1, 1, 1, 1, 0, 1, 0, 0; % 17641, 1, 1, 1, 1, 1, 1, 0, 1, 0; % 17721, 1, 1, 1, 1, 1, 1, 1, 0, 1; % 17751, 1, 1, 1, 1, 1, 1, 1, 1, 0; % 17761, 0, 0, 1, 1, 0, 1, 1, 1, 0; % 11561, 1, 0, 0, 1, 1, 0, 1, 1, 1; % 14671, 1, 1, 0, 0, 1, 1, 0, 1, 1; % 16331, 1, 1, 1, 0, 0, 1, 1, 0, 1; % 17151, 1, 1, 1, 1, 0, 0, 1, 1, 0; % 17461, 1, 1, 1, 1, 1, 0, 0, 1, 1; % 17631, 0, 0, 0, 1, 1, 0, 0, 1, 1; % 10631, 1, 1, 1, 0, 0, 0, 1, 1, 0; % 17061, 1, 1, 1, 1, 0, 0, 0, 1, 1; % 17431, 1, 1, 1, 1, 1, 0, 0, 0, 1; % 17611, 1, 1, 1, 1, 1, 1, 0, 0, 0; % 17701, 1, 1, 1, 1, 1, 1, 1, 0, 0; % 17741, 0, 0, 1, 0, 1, 0, 1, 1, 1; % 11271, 1, 0, 0, 1, 0, 1, 0, 1, 1; % 14531, 1, 1, 0, 0, 1, 0, 1, 0, 1; % 16251, 1, 1, 1, 0, 0, 1, 0, 1, 0; % 17121, 1, 1, 1, 1, 0, 0, 1, 0, 1; % 17451, 1, 1, 1, 0, 0, 1, 0, 1, 1; % 17131, 0, 0, 1, 0, 1, 1, 1, 0, 0; % 11341, 1, 0, 0, 1, 0, 1, 1, 1, 0; % 14561, 1, 1, 1, 0, 0, 1, 0, 1, 1; % 1713];delay = [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];n = 10; % size of LFSRL = 2^n - 1; % number of chips in a codeg1_sel = [0 0 1 0 0 0 0 0 0 1]; % G1 generatorg1 = ones(1, n); % G1 vectorg2_sel = [0 1 1 0 0 1 0 1 1 1]; % G2 generatorg2 = g2s(num, :); % G2 vectortap = taps(num, :);for i = 1 : (delay(num) - 1)g2 = [mod(sum(g2 .* g2_sel), 2), g2(1:n - 1)];endfor i = 1 : Lg(i) = mod(g1(n) + mod(sum(g2(tap)), 2), 2);g1 = [mod(sum(g1 .* g1_sel), 2), g1(1 : n - 1)];g2 = [mod(sum(g2 .* g2_sel), 2), g2(1 : n - 1)];end

利用程序,我们可以生成第一个和第二个 C/A 码:

当然,C/A 码具体的值不是我们所关心的。我们需要关心的是它的相关性。

左图为第 1 个 C/A code 自相关,右图为第 1 和第 2 个 C/A code 互相关。它们的明显区别在于:自相关有着非常突出的峰值,而互相关则没有。因此,我们可以通过识别峰值来找到正确的 C/A 码。

我们将第 1 个 C/A code 做相移(即,将尾部的一部分移动到头部),再与原来的 C/A 码做互相关,得到下图:

通过对比可以发现,尽管相移后仍然有明显的峰值,但峰值处的相关值降低了。我们做出了峰值与相移大小的关系图:

由图可以看出,它是一个完美的等腰三角形。在没有相移的情况下,相关值最大。

GPS 信号接收

接收机信号处理分为 4 个步骤,如下所示:

其中,跟踪分为载波环(用于解调)和码环(用于解扩)。这里,我们只讨论与主题有关的码环。

根据上文得到的结论,在解扩时,我们尝试使用不同的 C/A 码解扩,如果看到明显的峰值,则表明选对了 C/A 码。选择正确的 C/A 码后,需要使用峰值与相移大小的关系来使得相位对齐。具体做法如下图所示:

假设当前随意选取的相位为 P,其与最大值对应的相位差为 δcp\delta_{cp}δcp​。我们将其向前移动 d 个相位到点 E,再向后移动 d 个相位到点 L。根据等腰三角形的性质可以得出,如果 E 和 L 的值相等,则 P 点在最大值,如下图所示。

而如果 E 和 L 不等,则需要进行调整,向左或向右偏移。然而,由于噪声等因素的存在,实际情况并不是完美的三角形(如下图所示),故无法直接计算出需要偏移的量,只能一点点尝试。

具体的流程如下所示:

右下角的环路滤波器接收计算出的偏移量,并生成实际的偏移量。具体的,计算方法为
δcp^(n)=(1−α)δcp^(n−1)+αδcp(n)\hat{\delta_{cp}}(n)=(1-\alpha)\hat{\delta_{cp}}(n-1)+\alpha\delta_{cp}(n) δcp​^​(n)=(1−α)δcp​^​(n−1)+αδcp​(n)
其中,δcp^(n)\hat{\delta_{cp}}(n)δcp​^​(n) 为实际采用的偏移量,α\alphaα 为滤波系数,通常取 0.05。

经过滤波器后,C/A 码晶体振荡器根据偏移量生成 C/A 码,并通过移位寄存器生成上文提到的 E 和 L。E 和 L 分别与原信号的 I 路和 Q 路相乘,并计算 1 ms 内的相关值,分别得到 IE,IL,QE,QLI_E,I_L,Q_E,Q_LIE​,IL​,QE​,QL​。然后根据
E=IE2+QE2L=IL2+QL2E=\sqrt{ {I_E}^2+{Q_E}^2}\\ L=\sqrt{ {I_L}^2+{Q_L}^2} E=IE​2+QE​2​L=IL​2+QL​2​
得到幅值。

当然,前面的步骤是相干的。我们也可以使用非相干的办法,这在低信噪比的情况下表现会更好。

再计算出幅值后,进入鉴别器,计算期望的相位调整值 δcp\delta_{cp}δcp​。具体的计算方法有三种:

  • 幅值法
    δcp=12E−LE+L\delta_{cp}=\frac{1}{2}\frac{E-L}{E+L} δcp​=21​E+LE−L​

  • 功率法
    δcp=12E2−L2E2+L2\delta_{cp}=\frac{1}{2}\frac{E^2-L^2}{E^2+L^2} δcp​=21​E2+L2E2−L2​

  • 点积功率法
    δcp=12E−LP\delta_{cp}=\frac{1}{2}\frac{E-L}{P} δcp​=21​PE−L​

我们分别作出了这三种方法的图像:

可以看到,三条线共有三个交点。如果当前在最左侧的交点左侧,则说明 E、P、L 三点均在等腰三角形的左侧,无法继续计算;最右侧交点的右侧同理。

同时,我们可以看到幅值法是线性的——这是非常好的特性。因此,幅值法也是用得最多的方法。

【信号】GPS扩频原理相关推荐

  1. 【转】GPS从入门到放弃(一) --- GPS基础原理

    转自:https://blog.csdn.net/tyst08/article/details/100529424 GPS从入门到放弃(一) - GPS基础原理 GPS,全称Global Positi ...

  2. QT中connect、disconnect和信号槽实现原理

    connect connect用于连接信号和槽函数,但是我们经常忽略最后一个参数,本人在写代码时遇到了bug,选择一个符号进行多次标绘,再选择其他符号时,会将上一次选择的符号也进行标绘,主要时conn ...

  3. GPS定位原理及应用简介

      GPS定位原理及应用简介   内容:掌握 GPS 的基本概念和系统组成:掌握 GPS 的坐标系统和基本定位原理:理解 GPS 定位方法分类中绝对定位和相对定位.静态定位和动态定位的概念及用途. 重 ...

  4. 适配器的工作原理计算机网络,无线网络信号接收器怎么用 无线网络信号接收器工作原理及使用...

    由无线电话转化为有线电话,从台式电脑到笔记本.掌上电脑,全世界的网络时代在不断蜕变更新.为了跟上时代变化的脚步,无线网络的发展也越来越快,从而无线网络信号接收器的生产步伐也越来越先进,成为了接收无线网 ...

  5. 【转】GPS定位原理

    一.距离测定原理 1.伪距测量 伪距测量是利用全球卫星定位系统进行导航定位的最基本的方法,其基本原理是:在某一瞬间利用GPS接收机同时测定至少四颗卫星的伪距,根据已知的卫星位置 和伪距观测值,采用距离 ...

  6. gps导航原理与应用_一文读懂角速度传感器(陀螺仪)的应用场景

    前文我们大致了解陀螺仪的来历,原理和种类,那么,它与我们的日常生活有怎样的关系呢? 陀螺仪器最早是用于航海导航,但随着科学技术的发展,它在航空和航天事业中也得到广泛的应用.陀螺仪器不仅可以作为指示仪表 ...

  7. 北斗GPS定位系统原理

    闲着没事,今天下午了解了一下北斗和GPS(全球定位系统),本文的主要目的是有幸能帮助那些想快速了解定位系统,又懒得到处找资料的同学们. GPS面对民用领域的定位服务主要原理是被动式无源定位,也就是广播 ...

  8. GNSS的基础知识 (GPS定位原理和组成)(1)

    在这里读了很多关于GNSS的贴子.里面的内容有的是直接翻译外文的文献,也有完全是自己写的. 我准备从今天开始不定期的更新一些关于GNSS 的知识.一是为了分享和探讨,二是记录一下自认为有用的东西,整理 ...

  9. [解疑][TI]TI毫米波雷达系列(三):调频连续波雷达回波信号3DFFT处理原理(测距、测速、测角)

    本文是经过参考多个文章并整理的,相关程序已经经过验证其可行性.在此感谢原文作者(文末有相关链接)的无私分享. 1.测距.测速 毫米波雷达测距主要是通过检测回波时延来计算目标距离:测速是通过检测目标运动 ...

最新文章

  1. Linux 格式化扩展分区(Extended)
  2. Ubuntu Docker安装
  3. mac 下idea光标问题
  4. 如何选择一个合适的建站系统?
  5. C语言中时间的基本用法
  6. java pdf电子签名_如何使用java在数字签名的pdf中添加空白页?
  7. Python学习笔记__10.4章 进程VS线程
  8. J2SE核心实战开发—— 集合类框架
  9. 带桭字的名字_男孩带官运大气的名字有气魄有能力-可爱点
  10. akka java_java – Akka和Spring集成
  11. java io重定向,java中的标准重定向标准IO_java标准IO_java构建器_课课家
  12. c#随机产生常用汉字
  13. 推荐一个在线视频学习、在线试题练习、在线同步考试开源系统
  14. 日志管理工具 journalctl用法
  15. 服务器发送消息给客户端,服务器如何发送消息给客户端
  16. 计算机死机代码怎么写,如何用代码让电脑死机
  17. 【历史上的今天】3 月 4 日:美团网正式上线;Dropbox 的创始人出生;PS2 游戏机问世
  18. 嵌入式linux操作系统的移植 实验报告,嵌入式linux系统移植试题
  19. 计算机黑屏启动超慢,电脑开机很慢然后黑屏连不上网怎么办(新手可学的4种简单处理方法)...
  20. 如何利用python进行一次移动平均预测

热门文章

  1. 运用傅里叶变换对信号进行简单的滤波
  2. AP5414 0.8-5.5升压恒压 WLED 太阳能电源驱动方案
  3. 各国语言代码表与多语言支持
  4. 操作系统实验——银行家算法
  5. flash编程可以用c语言,C语言写的小游戏和FLASH小游戏有何区别呢-c语言编程手机软件...
  6. mysql-jdbc连接服务器数据库 显示No suitable driver found for jdbc:mysql://ipaddress:3306/table?serverT
  7. nginx请求超时设置
  8. DeeCamp 2021冠军用“垃圾DNA”预测癌症,李开复:医疗是AI的下一个突破点
  9. 用word模板导出word文档
  10. qt修改linux波特率,Qt串口传输波特率问题。