北斗B1I测距码的产生以及matlab程序,FPGA程序

北斗介绍

首先关于北斗卫星 B1I卫星的信号组成,通过matlab产生测距码。并且进行BPSK调制

测距码编码器:

首先解释测距码的产生:
G1,G2都是11bit,并且有初始相位,01010101010,
测距码的是由G2的不同抽头进行异或,然后再与G1序列的最低位进行异或,然后每次复位信号到来都要恢复到初始相位,并且G1,G2还要进行移位,
G1移位:G1的第1,7,8,9,10,11进行异或,然后移到G1的最高位,
G2移位:G2的第1,2,3,4,5,8,9,11进行异或,然后移到G,2的最高位,
由G2的不同抽头进行异或:由下面的表选择,不同的卫星号,对应不同的抽头系数

更加详细的介绍如下图:

 码发生器如下图:

G2 序列相位分配如表:

matlab程序:

function [pn_code,pn_code_freq] = pin_code_gen(PRN_num,SignalLength,SampleFreq,CodeFreq,CodeLength)
    BDB1ICAlist = [ 1 3; 1 4; 1 5; 1 6; 1 8; 1 9; 1 10; 1 11; 2 7; ...
                    3 4; 3 5; 3 6; 3 8; 3 9; 3 10; 3 11; 4 5; 4 6; ...
                    4 8; 4 9; 4 10; 4 11; 5 6; 5 8; 5 9; 5 10; 5 11; ...
                    6 8; 6 9; 6 10; 6 11; 8 9; 8 10; 8 11; 9 10; 
                    9 11; 10 11];
	code = zeros(1,CodeLength);  % pn_code arrayv 
	g1 = [0 1 0 1 0 1 0 1 0 1 0 ];   %g1 initial phase 
	g2 = [0 1 0 1 0 1 0 1 0 1 0 ];	 %g2 initial phase
	n1 =  BDB1ICAlist(PRN_num,1); %g2_phase ,根据我们输入的卫星数,在数组里面确定第一个数
	n2 =  BDB1ICAlist(PRN_num,2); %g2_phase,根据我们输入的卫星数,在数组里面确定第一个数
	for i = 1: CodeLength
		g2_i = bitxor(g2(n1),g2(n2)); % bitxor ,bit异或
		code(i) = bitxor(g1(11),g2_i);%  得到测距码,
		g1_r = bitxor(bitxor(bitxor(bitxor(bitxor(g1(11),g1(10)),g1(9)),g1(8)),g1(7)),g1(1)); %g1寄存器异或
		g2_r = bitxor(bitxor(bitxor(bitxor(bitxor(bitxor(bitxor(g2(11),g2(9)),g2(8)),g2(5)),g2(4)),g2(3)),g2(2)),g2(1));%g2寄存器异或
		g1(2:11) = g1(1:10);%register ,g1寄存器移位
		g2(2:11) = g2(1:10);%register ,g2寄存器移位
		g1(1) = g1_r;
		g2(1) = g2_r;
		if(i == CodeLength)%2046
		g1 = [0 1 0 1 0 1 0 1 0 1 0 ];   %g1 initial phase
		g2 = [0 1 0 1 0 1 0 1 0 1 0 ];	 %g2 initial phase	
		end
	end
	code(code == 0) = -1;%wwhen code == 0, make code = -1
	pn_code = code;
	SampleLength = round((SampleFreq / CodeFreq)* CodeLength); %roud ,intgret
	codeindex =ceil((CodeFreq/SampleFreq) *(1:SampleLength));%1111 2222 3333 ....... 2046 2046
    codevalidindex = zeros(1,SignalLength);
    cnt = 1;   %用查表的方式
    for index = 1:SignalLength
        codevalidindex(index) = codeindex(cnt);
        if(cnt == SampleLength)
            cnt = 0;
        end
        cnt = cnt + 1;
    end
     pn_code_freq = code(codevalidindex);   %用角标的方式进行索引, ,然后输出
	
end

 FPGA程序见连接:

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值