数据码和C/A码异或扩频模块

1设计原理

在卫星信号发射端,PRN编号为i的卫星首先将数据码与C/A码Gi异或相加,从而完成数据码对C/A码的调制。当数据码与C/A码异或相加,数据码与C/A码异或相加时候,数据码的每一个比特变成20周期的C/A 码或他们的反向值。原先码率为50bps的数据码的频宽一下子扩大,因此这个过程也可以叫扩频调制。

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/10/23 15:28:41
// Design Name: 
// Module Name: data_message_xor_ca_code
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module data_message_xor_ca_code(
      clk ,
      reset_n ,
      navigation_message ,
      ca_code ,
      xor_begin_flag ,
      ca_data_flag , 
      
      uart_begin_flag ,
      send_data_flag ,
      navigation_message_casr ,
       
      DSSS_message_data //扩频调制后的数据码
      
      
    );
    input                         clk ;   //系统时钟
    input                         reset_n ; //复位信号
    input   [1499 :0  ]           navigation_message ;  //1500位bit的导航信息
    input   [1022 : 0 ]           ca_code   ; //输入C/A码编码数据
    input                         xor_begin_flag ;  //输入开始异或标志位
    input                         ca_data_flag ; 
    
    output    reg               uart_begin_flag ;
    output    reg               send_data_flag ; 
    output    reg               navigation_message_casr ;  //扩频后的数据码
    output    reg               DSSS_message_data ; //扩频调制信息码
    

reg   [11 :0 ]  nav_i ;    //定义一个数据码计数器
reg   [11 : 0]  ca_code_j ;  //定义一个C/A码计数器
reg   [ 1 : 0]  uart_state ;  //定义此时uart处于哪一个状态
reg   [ 8 : 0 ] uart_tx_bit_counter  ; // 拆分成单比特状态计数器
//扩频调制module
always@(posedge clk or negedge reset_n) begin 
    if(!reset_n) begin 
       DSSS_message_data <= 1'b0 ;
       nav_i <= 12'd0 ;
       ca_code_j <= 12'd0 ;
       uart_tx_bit_counter <= 8'd0 ; 
       uart_state <= 2'd0 ;
    end
    else if( (nav_i < 12'd1500 ) && (xor_begin_flag == 1 ) && (ca_code_j <= 12'd1022) )begin 
        DSSS_message_data <= navigation_message[nav_i]  ^ ca_code[ca_code_j]  ;
        navigation_message_casr <= navigation_message[nav_i] ;
        ca_code_j <= ca_code_j + 1'd1 ;
        
       if (ca_code_j == 12'd1023)  begin
           uart_tx_bit_counter <= uart_tx_bit_counter + 1'b1 ;  //说明一个比特计数完成
           ca_code_j <= 12'd0 ;  //发完后清零
      end
      
      if (uart_tx_bit_counter == 8'd20 ) begin   //计数到20位个比特的时候说明一个byte可以发送    
           uart_tx_bit_counter <= 8'd0 ;  //计数清零
           nav_i  <= nav_i + 1 ;
      end
      if (nav_i == 12'd1499 ) 
           begin 
                send_data_flag  <= 1'b1 ; 
           end
      if (nav_i == 12'd1500 ) 
           begin
                send_data_flag <= 1'b0 ;
                nav_i <= 12'd0 ; 
      end
end      

else if( (ca_data_flag == 1'b1 ) && (ca_code_j <= 12'd1022 ) && (uart_state <= 2'd3 )  )
     begin 
         ca_code_j <= ca_code_j + 1'b1 ;
         if (ca_code_j == 12'd1023 ) 
             begin 
                 uart_tx_bit_counter = uart_tx_bit_counter + 1 ;
                 ca_code_j <= 12'd0 ;
            end
        if (uart_tx_bit_counter  == 8'd20 )  //发送完成一个字节
             begin
                 uart_tx_bit_counter <= 8'd0 ;
                 uart_state <= uart_state + 1'd1 ; 
            end
            
        if (uart_state == 2'd1 )
              uart_begin_flag <= 1'b1 ; //准备发送字节
        if (uart_state == 2'd2 ) begin
            uart_begin_flag <= 1'b0 ; //结束发送字节
             uart_state <= 2'd3 ;  //并且跳转到下一个状态
        end
end                  
        
end       
        
    
     
endmodule 

 

C/A(载波相位偏移)是GPS系统中用于定位和导航的重要部分。在Matlab中,可以通过以下步骤生成和处理C/A。 1. C/A的生成:C/A是通过加密算法生成的,我们可以使用Matlab中的伪随机序列生成函数实现。这些序列由长为1023的伪随机生成,并使用特定的初态和多项式进行移位和异或运算。通过连续地将这些序列扩展为周期性序列,就可以得到C/A。 2. C/A的调制:生成的C/A可以通过将其与导航信号进行调制来实现。在Matlab中,我们可以使用ammod函数将C/A调制到导航信号上,使其能够在导航系统中传输和接收。 3. C/A的解调:在接收端,我们需要将接收到的导航信号解调回C/A,以便用于定位和导航。在Matlab中,我们可以使用demod函数对接收的信号进行解调,并将其转换为原始的C/A。 4. C/A的差分:为了提高C/A的精度和可靠性,通常对接收到的差分进行处理。差分是通过将两个连续的C/A进行异或运算得到的。在Matlab中,我们可以使用bitxor函数对C/A进行异或运算,得到差分。 5. C/A的跟踪和定位:通过对接收到的C/A进行相关运算,可以实现对GPS信号的跟踪和定位。在Matlab中,我们可以使用xcorr函数对接收到的进行相关操作,并根据相关结果进行跟踪和定位计算。 综上所述,在Matlab中生成、调制、解调、差分和处理C/A,可以使我们能够更好地理解和应用GPS系统的定位和导航功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值