我是靠谱客的博主 酷炫芒果,这篇文章主要介绍北斗B1I测距码特性及程序生成,现在分享给大家,希望可以做个参考。

目录

1 测距码特性

2 matlab程序生成


1 测距码特性

测距码就是伪随机噪声( pseudo random noise,PRN)码,也称作伪码,常作为扩频系统的扩频码,工程上常用一系列0或1组成的二进制序列码,按照一定的编码规则来产生伪噪声码。伪码具有确定性、周期性以及良好的自相关性,大体被分为三类:m序列、组合码和非线性码,北斗伪卫星信号的Ⅰ支路测距码是一种由m序列构成的组合码。

北斗伪卫星系统中,Ⅰ支路使用的测距码是Gold 码,由两个11级的m序列G1、G2,通过模二和,并截短一个码片后产生。北斗伪卫星系统中Gold码的速率为2.046Mcps,长度为2046,伪码周期为1ms,即1个伪码周期包含2046个码片。两个移位寄存器的G1,G2的生成多项式为:

          G1(X) = 1+X+X^{7}+X^{8}+X^{9}+X^{10}+X^{11}

          G2(X) = 1+X+X^{2}+X^{3}+X^{4}+X^{5}+X^{8}+X^{9}+X^{11}

G1 和 G2 的初始相位为:
       G1 序列初始相位:01010101010;
       G2 序列初始相位:01010101010。

码发生器如图下:

通过对产生 G2 序列的移位寄存器不同抽头的模二加可以实现G2 序列相位的不同偏移,与 G1 序列模二加后可生成不同卫星的测距码。G2 序列相位分配如表:

2 matlab程序生成

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
function codes = GoldGenerator(No,num) codeLen = 2046; % ??????? % ?????????????, ???0?? polynomial1 = [1 0 0 0 0 0 1 1 1 1 1]; % [1 7 8 9 10 11] ???е????????????????????????????? polynomial2 = [1 1 1 1 1 0 0 1 1 0 1]; % [1 2 3 4 5 8 9 11] % ???????????????? %rand('twister', sum(100*clock)); %randn('state', sum(100*clock)); % ????????????λ????? sd1 = [0 1 0 1 0 1 0 1 0 1 0]; % ???????λ?????1 sd2 = [0 1 0 1 0 1 0 1 0 1 0]; % ???????λ?????2 % ????α??1 pn1 = zeros(1, codeLen); for i=1:codeLen pn1(i) = sd1(11); % ???????GOLD? newGold = mod((sum(polynomial1 & sd1)), 2); %???1????????????????????????1 % ??λ sd1(2:11) = sd1(1:10); sd1(1) = newGold; end % ????α??2 if No==30 pn2 = zeros(1, codeLen); for i=1:codeLen pn2(i) = xor(sd2(6),sd2(10)); % ???????GOLD? newGold = mod((sum(polynomial2 & sd2)), 2); % ??λ sd2(2:11) = sd2(1:10); sd2(1) = newGold; end elseif No==1 pn2 = zeros(1, codeLen); for i=1:codeLen pn2(i) = xor(sd2(1),sd2(3)); % ???????GOLD? newGold = mod((sum(polynomial2 & sd2)), 2); % ??λ sd2(2:11) = sd2(1:10); sd2(1) = newGold; end elseif No==2 pn2 = zeros(1, codeLen); for i=1:codeLen pn2(i) = xor(sd2(1),sd2(4)); % ???????GOLD? newGold = mod((sum(polynomial2 & sd2)), 2); % ??λ sd2(2:11) = sd2(1:10); sd2(1) = newGold; end elseif No==3 pn2 = zeros(1, codeLen); for i=1:codeLen pn2(i) = xor(sd2(1),sd2(5)); % ???????GOLD? newGold = mod((sum(polynomial2 & sd2)), 2); % ??λ sd2(2:11) = sd2(1:10); sd2(1) = newGold; end elseif No==4 pn2 = zeros(1, codeLen); for i=1:codeLen pn2(i) = xor(sd2(1),sd2(6)); % ???????GOLD? newGold = mod((sum(polynomial2 & sd2)), 2); % ??λ sd2(2:11) = sd2(1:10); sd2(1) = newGold; end elseif No==5 pn2 = zeros(1, codeLen); for i=1:codeLen pn2(i) = xor(sd2(1),sd2(8)); % ???????GOLD? newGold = mod((sum(polynomial2 & sd2)), 2); % ??λ sd2(2:11) = sd2(1:10); sd2(1) = newGold; end elseif No==6 pn2 = zeros(1, codeLen); for i=1:codeLen pn2(i) = xor(sd2(1),sd2(9)); % ???????GOLD? newGold = mod((sum(polynomial2 & sd2)), 2); % ??λ sd2(2:11) = sd2(1:10); sd2(1) = newGold; end elseif No==7 pn2 = zeros(1, codeLen); for i=1:codeLen pn2(i) = xor(sd2(1),sd2(10)); % ???????GOLD? newGold = mod((sum(polynomial2 & sd2)), 2); % ??λ sd2(2:11) = sd2(1:10); sd2(1) = newGold; end elseif No==8 pn2 = zeros(1, codeLen); for i=1:codeLen pn2(i) = xor(sd2(1),sd2(11)); % ???????GOLD? newGold = mod((sum(polynomial2 & sd2)), 2); % ??λ sd2(2:11) = sd2(1:10); sd2(1) = newGold; end elseif No==9 pn2 = zeros(1, codeLen); for i=1:codeLen pn2(i) = xor(sd2(2),sd2(7)); % ???????GOLD? newGold = mod((sum(polynomial2 & sd2)), 2); % ??λ sd2(2:11) = sd2(1:10); sd2(1) = newGold; end elseif No==10 pn2 = zeros(1, codeLen); for i=1:codeLen pn2(i) = xor(sd2(3),sd2(4)); % ???????GOLD? newGold = mod((sum(polynomial2 & sd2)), 2); % ??λ sd2(2:11) = sd2(1:10); sd2(1) = newGold; end elseif No==11 pn2 = zeros(1, codeLen); for i=1:codeLen pn2(i) = xor(sd2(5),sd2(3)); % ???????GOLD? newGold = mod((sum(polynomial2 & sd2)), 2); % ??λ sd2(2:11) = sd2(1:10); sd2(1) = newGold; end elseif No==12 pn2 = zeros(1, codeLen); for i=1:codeLen pn2(i) = xor(sd2(6),sd2(3)); % ???????GOLD? newGold = mod((sum(polynomial2 & sd2)), 2); % ??λ sd2(2:11) = sd2(1:10); sd2(1) = newGold; end else % error('The wrong satellite number!') pn2 = zeros(1, codeLen); end % ???GOLD?? codes1 = xor(pn1,pn2); nf = ceil(num/codeLen); for frame=1:nf codes((1:codeLen)+((frame-1)*codeLen))=codes1(1:codeLen); end codes=double(codes(1:num)); % for i=1:num % if codes(i)==1 % codes(i)=-1; % else % codes(i)=1; % end % end

最后

以上就是酷炫芒果最近收集整理的关于北斗B1I测距码特性及程序生成的全部内容,更多相关北斗B1I测距码特性及程序生成内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部