GPS跟踪环路MATLAB之——数字锁相环
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
GPS跟踪环路MATLAB之——数字锁相环
- 前言
- 为什么要锁相环
- 科斯塔斯环
- 锁相环的一些基本概念
- 1、捕获、锁定与跟踪的概念
- 2、捕获时间和稳态相差
- 3、相位捕获和频率捕获
- 4、捕获带和同步带
- 5、最大频率阶跃范围
- 鉴相器
- 环路滤波器
- matlab程序
- 获取完整程序
前言
从事卫星导航基带处理的童鞋都知道,跟踪环路属于整个卫星导航信号处理中的精华之中的精华。接收机通过跟踪环在本地能够准确的复现接收到的信号的载波和伪码,是后续能够正确定位解算的关键步骤。整个跟踪环路将分成三小节,数字锁频环、数字锁相环和码环。其中数字锁频环和锁相环属于载波跟踪环。笔者所做的《从零开始研发GPS接收机》的工作中所使用的跟踪环路也将会在这里提到
《从零开始研发GPS接收机》记录了笔者实现一个硬件接收机的全过程,可通过公众号找到。
为什么要锁相环
导航信号在捕获成功之后,得到了粗略的多普勒频率值,加上中频IF,即可得到一个粗略的载波频率值。这个频率误差与真正的载波频率最高可能有一两百Hz的误差。如果捕获后频偏不大可直接使用锁相环,那么捕获需要更多资源提高精细度。如果捕获频偏有一两百Hz,最好还是先用锁频环牵引。但锁频环只能是频率的跟踪,无法进行相位的跟踪,如果不对相位进行跟踪,则无法得到正确的数据bit,无法进行接下来的位同步、帧同步、电文解算等流程。因此跟踪环最终还是需要锁相环才能同时准确的跟踪频率和相位。
科斯塔斯环
这里首先要介绍一下一个新的概念,科斯塔斯环。
科斯塔斯环是一种基于锁相环 (PLL) 的电路,用于从抑制载波调制信号(例如双边带抑制载波信号)和相位调制信号(例如 BPSK、QPSK)中恢复载波频率。它是由通用电气公司的 John P. Costas 在 1950 年代发明的。它的发明对现代数字通信产生了深远的影响。Costas 环的主要应用是无线接收器。与其他基于 PLL 的检测器相比,优势在于,在小偏差下,Costas 环路误差电压为
,相比于其他PLL检测器的
,灵敏度翻倍,也使科斯塔斯环路特别适合跟踪多普勒频移载波。

基于科斯塔斯环结构的锁频环和锁相环的实现也比较类似,都是分成这几个部分
1、 鉴频器/鉴相器
2、 环路滤波器
3、 频率可变振荡器
锁相环的一些基本概念
1、捕获、锁定与跟踪的概念
(注意:这里的捕获、跟踪是相对于锁相环的捕获、跟踪)
捕获,是指从输入信号加到锁相环输入端开始开始,一直到环路达到锁定的全过程。
锁相环的锁定是指锁相环的输出频率等于输入频率,而输出信号的相位跟随输入信号的变化而变化。
跟踪是指锁相环锁定后的状态,一旦锁相环进入锁定状态,若输入信号产生了相位的变化,环路就调整压控振荡器的控制电压使得其输出信号的相位跟随输入信号的相位变化,即保持恒定的稳态相位差。这种状态称为跟踪或同步状态。
2、捕获时间和稳态相差
捕获时间是指捕获过程所需的时间。捕获时间的大小不仅与环路参数有关,而且与起始状态有关。
当环路进入同步状态之后,环内被控振荡器的振荡器频率已经等于输入信号的频率,两者之间只差一个固定的相位。这个相位差称为稳态相差。反过来说,若稳态相差为一个常数或等于0,则说明环路处于锁定状态。
3、相位捕获和频率捕获
“相位捕获”指在捕获过程中,相位没有经过2π的周期跳跃就能进入的锁定状态,即捕获过程小于一个2π周期的捕获过程称为相位捕获,又称快捕获。“频率捕获”指捕获经历一个以上的频率周期的捕获过程。即意味着环路的输入信号频率与输出信号频率在开始捕获前相差至少一个周期。一般来说,一个锁相环从捕获到锁定都要经历从频率捕获到相位捕获两个过程。
如下图的快捕范围就是快捕带,只有相位捕获,因此收敛较快,而除快捕范围的捕获带则首先要进行频率捕获,然后才是相位捕获。频率捕获相对来说是一个慢的过程,因此收敛较慢。
4、捕获带和同步带
捕获带是指保证环路必然进入锁定的最大固有频差值。换句话说,就是在保证环路不出现稳定的差拍状态所允许的最大固有频差值。
一旦环路进入锁定状态,系统就处于跟踪状态。随着输入信号的频率和相位的变化,环路应该始终能跟踪其变化,但一旦输入信号的频率与被控压控振荡器的自由振荡器频率相差太多,环路就会失去跟踪能力,这种状态称为“失锁”。
同步带是指系统保持同步的最大固有频差值
5、最大频率阶跃范围
描述PLL对于稳定工作状态的动态限制。环路初始处于锁定状态,当输入信号的频率发生阶跃变化的幅度在失锁带的范围之内,环路能够保持锁定。然而,当输入信号的频率发生阶跃变化的幅度超出失锁带的范围,环路不能保持锁定,输出信号无法跟踪输入参考信号。当然,通过缓慢的捕获过程,环路可再次入锁。

在跟踪环路中,如果有锁频环牵引,则可以快速进入快捕范围,实现稳定跟踪。
在跟踪环路正常运行过程中,一直处于快捕范围,此时频率和相位稳步的跟踪。如果突然有了频率的突变,且突变范围处于最大频率阶跃范围内,频率和相位跟踪不会丢失,也就是载波观测值不会出现跳周的情况。但突变范围进入了捕获范围,那么需要重新进入频率的捕获阶段,此时载波观测值的周期和相位将不再连续。
鉴相器
关于鉴相器介绍一下2种鉴相器:
鉴相器1:二象限反正切函数,
优点:最准确的鉴相方法,实际相位差异位于-90°至+90°的范围之内时,该鉴相器的工作保持线性,并且其输出的鉴相结果与信号幅值无关。
缺点:需要进行反正切求值,因而它也是计算量最大的一种。
鉴相器2:

优点:计算量小, 适合纯逻辑实现
缺点:鉴相近似准确,鉴相结果与
正比,并且与信号幅值有关
优点:计算量小, 适合纯逻辑实现
缺点:鉴相近似准确,鉴相结果与图片成正比,并且与信号幅值有关
环路滤波器
二阶环路滤波器的结构如下图:


matlab程序
假设捕获之后初始的频率相差30Hz,在1s的时候频率突变10Hz,在2s的时候突变30Hz,在3s的时候突变100Hz,来理解快捕范围,频率阶跃、捕获带等这些概念。为了显示更加清楚,这里就不加码元信息了。
从频率跟踪图可以明显的看出。在一开始的时候相差30Hz,是处于捕获带,逐步调整频率,进入快捕带后就收敛很快,锁定了信号。在1s的时候,频率突变10Hz,环路仍然保持锁定,很快便调整到了正确的频率,因此10Hz属于最大阶跃范围内,2s的时候,频率突变30Hz,很明显的频率出现了震荡,这就是失锁了,但仍处于捕获带内,因此花了一点时间又重新锁定到正确的频率上,最后,频率突变100Hz,则直接跳出了捕获带之外,无法重新锁定了。
format long g;clc;clear all;close all
SampleClk = 4.1e6;
PointNum = SampleClk*5;
IF = 1e6- 30 ;
Carr_cos(1:SampleClk) = cos(2*pi*(IF/SampleClk).*[1:SampleClk] + 0);
Carr_sin(1:SampleClk) = sin(2*pi*(IF/SampleClk).*[1:SampleClk] + 0);
IF = IF + 10;
Carr_cos(1+SampleClk:PointNum) = cos(2*pi*(IF/SampleClk).*[SampleClk+1:PointNum] + 0);
Carr_sin(1+SampleClk:PointNum) = sin(2*pi*(IF/SampleClk).*[SampleClk+1:PointNum] + 0);
IF = IF + 30;
Carr_cos(1+2*SampleClk:PointNum) = cos(2*pi*(IF/SampleClk).*[2*SampleClk+1:PointNum] + 0);
Carr_sin(1+2*SampleClk:PointNum) = sin(2*pi*(IF/SampleClk).*[2*SampleClk+1:PointNum] + 0);
IF = IF + 100;
Carr_cos(1+3*SampleClk:PointNum) = cos(2*pi*(IF/SampleClk).*[3*SampleClk+1:PointNum] + 0);
Carr_sin(1+3*SampleClk:PointNum) = sin(2*pi*(IF/SampleClk).*[3*SampleClk+1:PointNum] + 0); %以下为付费程序

这是对应的IQ幅度图,可见在没有锁定的时候,I/Q不停的翻转,只有处于锁定状态,IQ幅值则稳定,有频率跳跃但处于最大跃阶范围时,IQ幅值很快就能恢复,当锁相环无法锁定时,IQ将永远翻转下去。

这是鉴相值图,但锁相环锁定时,鉴相值趋近于0。

获取完整程序
见公众号
相关文章:
GPS跟踪环路MATLAB之——数字锁相环
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 GPS跟踪环路MATLAB之——数字锁相环 前言为什么要锁相环科斯塔斯环锁相环的一些基本概念1、捕获、锁定与跟踪的概念2、捕获时间和稳态相差3、相位捕获和频率捕获4、捕获带和同…...
docker开发环境搭建-关于数据库的IP是什么
故事的背景是这样的: 我在本地的ubuntu系统上安装了docker,并创建了一个mysql容器,但是在使用DBeaver连接该数据库时,需要填写数据库的ip,填写127.0.0.1,工具提示找不到这个库,然后使用ip addr…...
loginApi
import request from "/utils/request"; import { AxiosPromise } from "axios"; import { CaptchaResult, LoginData, LoginResult } from "./types";/*** 登录API** param data {LoginData}* returns*/ export function loginApi(data: LoginD…...
【RAG检索增强生成】Ollama+AnythingLLM本地搭建RAG大模型私有知识库
目录 前言一、Ollama:革新性的本地LLM服务工具1.核心优势2.技术亮点 二、AnythingLLM 概览1.核心特性2.技术生态支持 三、搭建本地智能知识库1. Ollama的安装启航2. AnythingLLM的安装对接3. AnythingLLM的配置精调4. 工作区与文档管理5. 聊天与检索的智能交互 四、…...
【wiki知识库】08.添加用户登录功能--前端Vue部分修改
🍊 编程有易不绕弯,成长之路不孤单! 目录 🍊 编程有易不绕弯,成长之路不孤单! 一、今日目标 二、前端Vue模块的修改 2.1 the-header组件 2.2 store工具 2.3 router路由配置修改 一、今日目标 上篇文章…...
写给非机器学习人员的 embedding 入门
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
Oracle【plsql编写九九乘法表】
九九乘法表 DECLAREi NUMBER : 1;j NUMBER : 1; BEGINFOR i IN 1 .. 9LOOPFOR j IN 1 .. iLOOPDBMS_OUTPUT.put (i || * || j || || i * j || );END LOOP;DBMS_OUTPUT.put_line ( );END LOOP; END;输出结果...
ansible安装K8s
部署Kubernetes (k8s) 集群使用Ansible是一个常见的自动化解决方案。下面我将提供一个基本的步骤概述和所需的命令,用于在CentOS 7.8上使用Ansible部署k8s集群,包括Master节点和Worker节点(Web和DB节点)。 步骤 1: 准备环境 确保所…...
restful传值
GetMapping 普通的get请求 后端: restfule的get请求 通过/asd/123这种方式get请求传入后端 前端 url: /system/role/deptTree/ roleId / tenantId, method: get后端PathVariable从path上取对应的值 通过 GetMapping(value "/deptTree/{roleId}/{tenan…...
Qt自定义TreeWidget,实现展开折叠按钮在右侧,且一条竖直线上对齐
效果如下: 图片随便找的,可能需要调下样式,代码复制可用,留给有需要的人。 #ifndef CustomTreeWidget_h__ #define CustomTreeWidget_h__#include <QTreeWidget> #include <QPushButton>class CCustomTreeWidget : p…...
硅步千里:如何入行?——之入行成为软件开发者
无论何时,你是否有遇到这样的场景(在自己从未涉足过的行业或领域,现在需要自己去这个行业或领域学习探索,最初的目标是熟悉行业,快速融入进去,很多时候,我们只是了解了个大概,并没能…...
Sandbox: rsync.samba(80134) deny(1) file-write-create
Xcode15运行报错:Sandbox: rsync.samba(80134) deny(1) file-write-create/xxx/xxx 如下图: 解决办法: Build Settings 搜索 sandbox,把 Build Options 中的 User Script Sandboxing改为 NO...
lvs的dr模式综合实践
目录 编辑虚拟机准备工作 编辑编辑编辑 配置过程 配置client主机 配置router主机 配置lvs主机(vip使用环回来创建) 配置server1主机(vip使用环回来创建) 配置server2主机(vip使用环回来创建࿰…...
什么是自然语言处理
自然语言处理(Natural Language Processing, NLP)是人工智能(AI)的一个子领域,涉及计算机与人类语言的交互。它的目标是让计算机能够理解、分析、生成和操作自然语言,从而实现与人类的有效沟通。 自然语言处…...
快速理解互联网中的常用名词
并发与并行 并发:任务交替执行,伪并行,涉及CPU时间片和上下文切换。并行:任务真正同时执行,需要多核处理器,无上下文切换。 并发量(Concurrency) 概念:服务端程序单位…...
统计接口调用耗时_黑白名单配置
黑名单配置 黑名单就是那些被禁止访问的URL创建自定义过滤器 BlackListUrlFilter,并配置黑名单地址列表blacklistUrl如果有其他需求,还可以实现自定义规则的过滤器来满足特定的过滤要求 /*** 黑名单过滤器** author canghe*/ Component public class B…...
树莓派4 AV没有视频输出
使用AV接口输出,没有画面 需要在config.txt文件中 增加配置 enable_tvout1config.txt 中的 dtoverlayvc4-kms-v3d 行末尾添加,composite: dtoverlayvc4-kms-v3d,composite默认情况下,输出 NTSC 复合视频。要选择不同的模式,请在…...
短信群发平台:解决短信验证码接收问题的5大策略
在享受数字化服务时,如APP注册或网站登录,若遇到短信验证码无法接收的困扰,无疑会增添不少烦恼。为了帮助您迅速解决这一问题,我们精心总结了以下十大原因及对应的解决方法,助您顺畅完成验证流程。 一、优化网络环境 …...
WebSocket 初体验:构建实时通信应用
WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行双向通信,从而实现低延迟的数据交换。WebSocket非常适合需要实时交互的应用场景,比如聊天应用、在线游戏、实时数据分析等。 WebSocket简介 什么是WebSocket…...
LISA: Reasoning Segmentation via Large Language Model
发表时间:CVPR 2024 论文链接:https://openaccess.thecvf.com/content/CVPR2024/papers/Lai_LISA_Reasoning_Segmentation_via_Large_Language_Model_CVPR_2024_paper.pdf 作者单位:CUHK Motivation:尽管感知系统近年来取得了显…...
深入解析Android驱动开发:从HAL层到多媒体架构实战
第一章 Android驱动开发概述 Android驱动系统采用分层架构设计,主要包含以下层次: Linux内核层 → HAL层 → JNI层 → Framework层 → 应用层其中HAL(Hardware Abstraction Layer)作为硬件与框架的桥梁,通过标准接口实现硬件控制。典型HAL接口定义如下: // hardware/l…...
Camunda框架实战(十四):外置表单开发与常见问题解析
1. 外置表单开发基础入门 Camunda的外置表单功能让开发者能够完全自定义流程中的用户交互界面。与内置表单相比,外置表单最大的优势在于可以自由设计表单样式和交互逻辑,不受平台限制。我在实际项目中遇到过这样的场景:客户需要在一个采购审批…...
基于 Cursor Agent 的流水线 AI CR 实践|得物技术
一、背景 在实际迭代开发中,不同需求的代码规模差异很大,有些需求涉及上千行代码,有些则只有一两行。且对于前端的代码验收,主要侧重在界面功能,通过功能验收,没法确保每一行代码都测试到的,以及…...
TranslucentTB:Windows任务栏个性化的轻量高效解决方案
TranslucentTB:Windows任务栏个性化的轻量高效解决方案 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 在当今数字化办公与娱…...
别再手动编译了!用vcpkg在VS2022里一键安装Boost库(Windows 10/11保姆级教程)
现代C开发者的效率革命:用vcpkg在VS2022中极速部署Boost库 如果你还在手动下载、编译、配置Boost库,那么是时候拥抱现代C开发工具链了。作为C标准库的重要补充,Boost提供了超过160个经过严格测试的组件,从智能指针到并发编程&…...
windows下oracle 11g搭建主备
Oracle Data Guard 主备搭建 主库: 192.168.100.73 SIDorcl 备库: 192.168.100.74 SIDorcldg一、主库配置 (在73服务器执行) -- 1.1 开启归档模式 alter system set db_recovery_file_destC:\app\Administrator\flash_recovery_area scopeboth; alter system set db_recovery…...
高效整合B站缓存:智能合并技术让离线观看体验升级
高效整合B站缓存:智能合并技术让离线观看体验升级 【免费下载链接】BilibiliCacheVideoMerge 项目地址: https://gitcode.com/gh_mirrors/bi/BilibiliCacheVideoMerge 问题溯源:当缓存视频遭遇"数字拆分"困境 解码用户痛点࿱…...
LS-Dyna模态分析实战:从模型构建到结果解读的全流程指南
1. 认识LS-Dyna模态分析:为什么它值得掌握 我第一次接触LS-Dyna模态分析是在一个汽车零部件振动问题排查项目中。当时客户抱怨某款发动机支架在特定转速下会出现异常噪音,我们团队花了三天时间都没找到症结所在。直到用LS-Dyna做了模态分析,才…...
流形优化实战:从特征值问题到Grassmann流形的算法探索
1. 流形优化与特征值问题的奇妙碰撞 第一次听说"流形优化"这个词时,我正被一个工程项目的振动分析问题困扰。当时需要计算大型结构矩阵的前几个最小特征值,传统算法要么收敛太慢,要么内存消耗惊人。直到一位数学系的朋友建议我试试…...
DeepSeek-OCR-2开源可部署:完全离线运行的国产OCR大模型方案
DeepSeek-OCR-2开源可部署:完全离线运行的国产OCR大模型方案 1. 项目简介 DeepSeek-OCR-2是DeepSeek团队于2026年1月发布的创新OCR识别模型,采用完全开源的方式提供给开发者使用。这个模型最大的特点是实现了完全离线运行,不需要依赖任何外…...
