我是靠谱客的博主 香蕉招牌,最近开发中收集的这篇文章主要介绍北斗B1I测距码的产生以及matlab程序,FPGA程序北斗介绍matlab程序:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

北斗介绍

首先关于北斗卫星 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程序见连接:

最后

以上就是香蕉招牌为你收集整理的北斗B1I测距码的产生以及matlab程序,FPGA程序北斗介绍matlab程序:的全部内容,希望文章能够帮你解决北斗B1I测距码的产生以及matlab程序,FPGA程序北斗介绍matlab程序:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部