m基于FPGA的GPS收发系统开发,包括码同步,载波同步,早迟门跟踪环,其中L1采用QPSK,L2采用BPSK

news/2025/2/7 3:50:01/

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

       最早的GPS包含L1和L2两个频段,其中L1上调制CA码,P码以及导航电文,L2上调制P码和导航电文。在实际接收到的GPS信号中,我们除了能够接受到CA码和P码外,还能检测到L1和L2两种载波信号。GPS双频发送器的基本构架如下所示:

        使用CA码和P码两种码来区分双频道中的两种不同的频道。但是P码周期非常长,美国用P码周期是140多天,而简化后的民用版本也要7天多,我们无法在仿真或者实际测试的时候花那么多时间去验证P码的捕获,所以这里,我们将P码部分做了下简化,使用伪随机序列周期为2048bit,来代替P码部分。

       一般情况下,导航电文的频率为50hz,CA码的频率为1M,P码的频率为10M。这里,为了测试的需要,我们需要降低频率来进行测试。整个发送端,按如下的结构设计:

       通过捕获模块获得初始的频偏值,然后进行载波同步。与此同时,通过码同步,完成相位的捕获。最后进入跟踪阶段。

       先介绍一下捕获的基本原理:

       本地码生成器以C/A码标称频率产生C/A码与接收到的采样信号相关累加,一个积分周期(通常1个码周期)后,相关峰与检测门限比较,如果相关峰大于门限,则认为捕获成功,得到对应的码相位估计;如果相关峰小于门限,码发生器自动将本地码码相位向前或向后跳动1/2或1/4个码片,然后继续相关累加检测,最多在 或 个伪码周期后找到与本地伪码同步的输入伪码的相位状态( 即为一个码周期内码片的数目),以实现伪码的捕获。下面对步进相关法进行简单介绍,其原理图见图1。

跟踪部分:

其内部详细结构如下所示:

2.仿真效果预览

算法仿真:MATLAB 2010b

FPGA设计:ISE12.2

FPGA仿真:Modelsim6.5SE

   

   

导航电文和CA码及P码异或之后的信号。

导航电文和CA码及P码异或之后的信号,通过成型滤波器之后的效果。

这个最后发送出去的QPSK,BPSK以及相加之后的射频信号。

最后捕获跟踪之后的信号,放大看如下所示:

一开始的逐渐变大的过程就是锁定过程

3.MATLAB核心程序

`timescale 1ns / 1ps
module GPS_Rec(i_clk,i_rst,i_QPSK,i_BPSK,//Captureo_Ca_index,o_CA,o_abs_addCA,o_P_index,o_P,o_abs_addP,o_fre_est_Ca,o_fre_est_P,//Trackingo_I_L1,o_Q_L1,o_I_L2,o_Q_L2,	o_Dwen_rec_L1,o_Dwen_rec_L2);input              i_clk;
input              i_rst;
input signed[15:0] i_QPSK;
input signed[15:0] i_BPSK;
//Capture
output       [9:0] o_Ca_index; 
output signed[1:0] o_CA; 
output signed[21:0]o_abs_addCA;
output       [10:0]o_P_index; 
output signed[1:0] o_P; 
output signed[23:0]o_abs_addP;
output signed[23:0]o_fre_est_Ca;
output signed[23:0]o_fre_est_P;//Tracking
output signed[15:0]o_I_L1;
output signed[15:0]o_Q_L1;
output signed[15:0]o_I_L2;
output signed[15:0]o_Q_L2;
output signed[1:0] o_Dwen_rec_L1;
output signed[1:0] o_Dwen_rec_L2;wire clk_ca;
wire clk_ca_2code;
wire clk_p;
wire clk_p_2code; //2 time ca clock
CLOCK_DCM2 CLOCK_DCM2_u(.i_clk          (i_clk), .i_rst          (i_rst), .o_clk_dwen     (), .o_clk_ca       (clk_ca), .o_clk_ca_2code (clk_ca_2code), .o_clk_p        (clk_p),.o_clk_p_2code  (clk_p_2code));//CAPTURE
//CAPTURE
//frequency capture								
wire signed[9:0] o_Ca_index; 
wire signed[1:0] o_CA; 
wire signed[21:0]o_abs_addCA;			frequency_capture_channel1 frequency_capture_channel1_u(.i_clk          (i_clk), .i_clk_ca       (clk_ca), .i_clk_ca2times (clk_ca_2code), .i_rst          (i_rst), .i_QPSK         (i_QPSK),.o_fre_est      (o_fre_est_Ca),.o_I_filter     (), .o_Q_filter     (), .o_Ca_index     (o_Ca_index), .o_CA           (o_CA), .o_abs_addIQ    (o_abs_addCA));wire signed[10:0] o_p_index; 
wire signed[1:0]  o_p; 
wire signed[23:0] o_abs_addP;	
frequency_capture_channel2 frequency_capture_channel2_u (.i_clk          (i_clk), .i_clk_p        (clk_p), .i_clk_p2times  (clk_p_2code), .i_rst          (i_rst), .i_BPSK         (i_BPSK), .o_fre_est      (o_fre_est_P),.o_I_filter     (), .o_Q_filter     (), .o_p_index      (o_P_index), .o_p            (o_P), .o_abs_addIQ    (o_abs_addP));//TRACKING
//TRACKINGwire signed[15:0]o_I_filter1;
wire signed[15:0]o_Q_filter1;
wire signed[15:0]o_I_filter2;
wire signed[15:0]o_Q_filter2;Frequency_track_tops Frequency_track_tops_u(.i_clk       (i_clk), .i_rst       (i_rst), .i_QPSK      (i_QPSK), .i_BPSK      (i_BPSK), .i_FRE_index1(o_fre_est_Ca), .i_FRE_index2(o_fre_est_P), .o_I_filter1 (o_I_L1), .o_Q_filter1 (o_Q_L1), .o_I_filter2 (o_I_L2), .o_Q_filter2 (o_Q_L2));//CA capture
wire signed[1:0]Dwen_rec_L1;
CA_early_late_track_tops CA_early_late_track_tops_u(.i_clk      (clk_ca_2code), .i_clk_ca   (clk_ca), .i_rst      (i_rst), .i_CA_index (o_Ca_index+1), .i_Idin     (o_I_L1), .i_Qdin     (o_Q_L1), .o_dout     (o_Dwen_rec_L1));//P capture
wire signed[1:0]Dwen_rec_L2;
P_early_late_track_tops P_early_late_track_tops_u (.i_clk     (clk_p_2code), .i_clk_p   (clk_p), .i_rst     (i_rst), .i_P_index (o_P_index+1), .i_Idin    (o_I_L2), .i_Qdin    (o_Q_L2), .o_dout    (o_Dwen_rec_L2));
endmodule
01_118m

4.完整MATLAB

V


http://www.ppmy.cn/news/369255.html

相关文章

Java SE(5)

1.使用Map接口的实现类完成员工工资(姓名–工资)的摸拟: 1)添加几条信息 2)列出所有的员工姓名 3列出所有员工姓名及其工资 4)删除名叫“Tom”的员工信息 5)输出Jack的工资,并将其工资加1000元(通过取值实现) 6)将所有工资低于1000元的员工的工资上涨20%…

ES5..

一.ES5 在2009年推出的新的语法 1).严格模式 使用use strict,它又分为全局严格和局部严格 这句话必须放在代码的第一行 1).全局严格 // "use strict";//全局严格模式function fn1() {console.log(this); //undefined}fn1()function fn2() {console.log(this); //u…

java se 05

1:方法重载(理解) (1)在同一个类中,方法名相同,参数列表不同的方法。 参数列表不同:个数不同,数据类型不同 与返回值类型无关。 (2)练习: A:判断哪些和给定的方法是方法重载 B:写4个比较数据是否相等…

Java-se05

多态 Instanceof关键字 Instanceof 识别该对象是否是该类的类型,是该类类型返回true,反之false。 识别类型:本类和父类 面向对象:封装,继承,多态 常用的类 Java提供API很多类。 基本数据类型封装类 整…

Java程序设计基础期末复习

前言 主要是为了应付考试的。 Java基础 1、Java常识 Java是可跨平台的,不会因为操作系统不同而无法运行Java虚拟机负责将字节码翻译成虚拟机所在平台的机器码,让当前平台运行该机器码Java的开发过程:源文件(.java) —Java编译器&#xff…

订单ID篡改测试-业务安全测试实操(5)

订单ID篡改测试,登录失败信息测试 实操过程和说明 往期文章: 暴力破解测试-业务安全测试实操(1)_luozhonghua2000的博客-CSDN博客 本地加密传输测试-业务安全测试实操(2)_luozhonghua2000的博客-CSDN博客 Seesion会话超时时间测试-业务安全测试实操(3)_luozhonghua2000的…

Java SE(十九):线程

文章目录 Java SE一、多线程什么是进程线程使用场合线程的基本原理Thread类简介Thread类创建线程Runnable实现线程Thread.currentThread方法获取线程信息线程优先级sleep方法yield方法interrupt方法join方法守护线程线程同步的概念Synchronized关键字线程安全API与非线程安全AP…

使香蕉派 bananapi M5 创建ap热点(软路由)

使用banana pi M5 创建ap热点实验可用 1.安装工具 使用 hostapd 和 isc-dhcp-server sudo apt-get update // 更新资源库sudo apt install hostapd //安装 hostapd sudo apt install isc-dhcp-server // 安装isc-dhcp-server### 1.2…