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

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

1.算法描述

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

image.png

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

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

image.png

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

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

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

image.png

跟踪部分:

image.png

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

image.png

2.仿真效果预览
算法仿真:MATLAB 2010b

FPGA设计:ISE12.2

FPGA仿真:Modelsim6.5SE

6.png
7.png
8.png
9.png
10.png
11.png

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

image.png

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

image.png

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

image.png

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

image.png

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

3.MATLAB核心程序

module GPS_Rec(
               i_clk,
                    i_rst,
                    i_QPSK,
                    i_BPSK,
                    //Capture
                    o_Ca_index,
                    o_CA,
               o_abs_addCA,
                    o_P_index,
                    o_P,
                    o_abs_addP,
                    o_fre_est_Ca,
                    o_fre_est_P,
                    //Tracking
                    o_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
//TRACKING
 
 
wire 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
相关文章
|
算法 异构计算
m基于FPGA的gardner环定时同步实现,含testbench测试程序
m基于FPGA的gardner环定时同步实现,含testbench测试程序
207 0
|
6天前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的16psk调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的16PSK调制解调系统的硬件测试版本。系统在原有仿真基础上增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同信噪比下的性能测试。16PSK通过改变载波相位传输4比特信息,广泛应用于高速数据传输。硬件测试操作详见配套视频。开发板使用及移植方法也一并提供。
23 6
|
12天前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的8PSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现8PSK调制解调系统,包含高斯信道、误码率统计、ILA数据采集和VIO在线SNR设置模块。通过硬件测试和Matlab仿真,展示了不同SNR下的星座图。8PSK调制通过改变载波相位传递信息,具有高频谱效率和抗干扰能力。开发板使用及程序移植方法详见配套视频和文档。
25 7
|
19天前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的QPSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的QPSK调制解调系统的硬件实现与仿真效果。系统包含测试平台(testbench)、高斯信道模块、误码率统计模块,支持不同SNR设置,并增加了ILA在线数据采集和VIO在线SNR设置功能。通过硬件测试验证了系统在不同信噪比下的性能,提供了详细的模块原理及Verilog代码示例。开发板使用说明和移植方法也一并给出,确保用户能顺利在不同平台上复现该系统。
58 15
|
1月前
|
移动开发 算法 数据安全/隐私保护
基于FPGA的QPSK调制+软解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的QPSK调制解调系统,通过Vivado 2019.2进行仿真,展示了在不同信噪比(SNR=1dB, 5dB, 10dB)下的仿真效果。与普通QPSK系统相比,该系统的软解调技术显著降低了误码率。文章还详细阐述了QPSK调制的基本原理、信号采样、判决、解调及软解调的实现过程,并提供了Verilog核心程序代码。
71 26
|
27天前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的2FSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的2FSK调制解调系统,包含高斯信道、误码率统计模块及testbench。系统增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同SNR下的硬件测试,并提供操作视频指导。理论部分涵盖频移键控(FSK)原理,包括相位连续与不连续FSK信号的特点及功率谱密度特性。Verilog代码实现了FSK调制解调的核心功能,支持在不同开发板上移植。硬件测试结果展示了不同SNR下的性能表现。
66 6
|
4月前
|
算法 测试技术 开发工具
基于FPGA的QPSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
该系统在原有的QPSK调制解调基础上,新增了高斯信道和误码率统计模块,验证了不同SNR条件下的QPSK误码性能。系统包括数据生成、QPSK调制与解调等模块,使用Vivado 2019.2进行仿真,展示了SNR分别为15dB、10dB、5dB和1dB时的误码情况。系统采用Verilog语言实现,具有高效、可靠的特点。
68 3
|
6月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块
升级版FPGA MSK调制解调系统集成AWGN信道模型,支持在Vivado 2019.2中设置不同SNR仿真误码率。示例SNR值从0到15,结果展示解调质量随SNR提升。MATLAB仿真验证了MSK性能,图片显示了仿真结果。 ### 理论概要 研究聚焦于软件无线电中的MSK调制解调,利用Verilog实现。MSK是一种相位连续、恒包络的二进制调制技术,优点包括频谱效率高。系统采用无核设计,关键模块包括调制器、解调器和误码检测。复位、输入数据、中频信号等关键信号通过Verilog描述,并通过Chipscope在线观察。
127 6
基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块
|
5月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的BPSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本系统基于Vivado2019.2,在原有BPSK调制解调基础上新增高斯信道及误码率统计模块,可测试不同SNR条件下的误码性能。仿真结果显示,在SNR=0dB时误码较高,随着SNR增至5dB,误码率降低。理论上,BPSK与2ASK信号形式相似,但基带信号不同。BPSK信号功率谱仅含连续谱,且其频谱特性与2ASK相近。系统采用Verilog实现,包括调制、加噪、解调及误码统计等功能,通过改变`i_SNR`值可调整SNR进行测试。
65 1
|
移动开发 算法 异构计算
m基于FPGA的64QAM调制解调通信系统verilog实现,包含testbench,不包含载波同步
m基于FPGA的64QAM调制解调通信系统verilog实现,包含testbench,不包含载波同步
319 1

热门文章

最新文章