\qquad 在HD-GR导航软件的相关数据累积任务(accum_task)中,来自射频前端的GPS和BDS基带信号分别被引进十个并行通道,参见源文件main_accum_task.c中的accum_task()函数。每个通道实时搜索、捕获、跟踪分配给它的卫星,并在锁定卫星信号后,对卫星导航电文进行解码。这些处理任务在以下分立状态中完成:
其中,每个通道使用一个变量(state)跟踪当前处理状态,每个状态对应一个分立子任务(状态响应函数),它在满足一定信号条件和处理条件下转换为另一状态。
\qquad 下面分别讨论GPS L1和BDS B1I信号通道的环路控制逻辑和算法,其中涉及的基础知识参见有关书籍,实现细节可通过阅读源码和注释来体会。
\qquad 相关数据累积任务(accum_task)仅处理有新相关数据等待累积的GPS L1通道。对于一个待处理通道,先调用函数gps_accum_newdata(…)读取新相关数据,接着调用函数gps_track_channels(…),后者根据通道当前状态,调用以下代码中的函数予以响应。参见源文件gps_accum_task.c。
switch (m_GPS_CH[ch].state) { // m_GPS_CH[ch].state即上文中的state
case CHANNEL_ACQUISITION:
gps_acquire( ch); // 捕获状态响应函数
break;
case CHANNEL_CONFIRM:
gps_confirm( ch); // 确认状态响应函数
break;
case CHANNEL_FREQ_PULL:
gps_freq_pull( ch); // 频率调整状态响应函数
break;
case CHANNEL_PULL_IN:
gps_pull_in( ch); // 微调状态响应函数
break;
case CHANNEL_LOCK:
gps_lock( ch); // 锁定状态响应函数
break;
default:
break;
}
\qquad 本小节将对这些状态响应函数以及不同状态之间的转换关系做进一步说明。
\qquad 一个通道,在未分配卫星和初始化之前,处于关闭状态(CHANNEL_OFF);在分配了卫星和初始化之后,进入捕获状态(CHANNEL_ACQUISITION)。捕获状态的响应函数(简称捕获函数)为gps_acquire(…),任务是找到一个高相关峰值:
下面对函数中应用的常数和算法予以说明。
\qquad 为了进行信号捕获,需要搜索载波频率和码相位空间,直到检测到信号。偏离载波频率标称值(IF信号中心频率)的最大值由最大载波多普勒频移加上最大接收时钟误差来定义。最大码相位由(固定的)码长度定义。典型地,在一个给定的载波频率上搜索所有码相位,然后再推进到下一个载波频率上重复码相位搜索。为此,在AGRS_GP_1代码实现中,进行了以下设置:
\qquad 在基带模块中,一个通道的载波NCO频率受控于它的频率控制字f_control。一旦导航软件将f_control新值设置到基带模块的指定通道,通道的载波NCO频率立即就会改变,从而引起载波NCO信号的变化。具体而言,f_control数值按以下公式计算:
\qquad f = fControl * Clk / 2^N
其中:
\qquad f = 所要求的载波频率;
\qquad Clk = 16.368*6 MHz(基带模块时钟频率)
\qquad N = 30 (相位累加器的位长)
\qquad fControl = 29-位(无符号)控制字
\qquad 在基带模块中,一个通道的码NCO频率受控于它的频率控制字f_control。一旦导航软件将f_control新值设置到基带模块的指定通道,通道的码NCO频率就会立即改变,从而引起码NCO信号的变化。具体而言,f_control数值按以下公式计算:
\qquad f = fControl * Clk / 2^N
其中:
\qquad f = 所要求的码频率;
\qquad Clk = 16.368*6 MHz(基带模块时钟频率)
\qquad N = 29(相位累加器的位长)
\qquad fControl = 28-位(无符号)控制字
\qquad 如果超前码(early)、即时码(prompt)、以及滞后码(late)的功率(power)之和大于一个预定义阈值,则通道状态机将从捕获状态切换到确认状态。这个阈值可以基于以下考虑来找到:HD-2769-2RF-2射频前端的MAX2769被设计为产生一个2-位数字流,具有4个数字级+3, +1, -1和-3。它的每个量化级的采样百分比是均匀的:
\qquad -3 \qquad 25%
\qquad -1 \qquad 25%
\qquad +1 \qquad 25%
\qquad +3 \qquad 25%
\qquad 来自射频前端的数字输出流在进行1ms积分前,被基带模块用本地产生的载波复现信号(同相和正交)进行混频。这两个复现信号在一个载波周期上的数字流为
In-phase +2 +2 +1 -1 -2 -2 -1 +1
Quadrature +1 -1 -2 -2 -1 +1 +2 +2
\qquad 当输入信号为+3时,它与同相本地复现信号在一个周期上的乘积为
\qquad +3×(In-Phase) = +6 +6 +3 -3 -6 -6 -3 +3
具有22.5的均方值 (mean square value);当输入信号为+1时,与同相本地复现信号在一个周期上的乘积为
\qquad +1×(In-Phase)= +2 +2 +1 -1 -2 -2 -1 +1
具有2.5的均方值。假设采样频率为16.368 MHz,则可以找到1ms累积时间上的同相分支均方值如下:
I 2 = [ ( 22.5 × 0.50 ) + ( 2.5 × 0.50 ) ] × 16.368 × 1000 = 204600 \qquad I^2=[(22.5×0.50)+(2.5×0.50)]×16.368×1000=204600 I2=[(22.5×0.50)+(2.5×0.50)]×16.368×1000=204600
总功率为:
I 2 + Q 2 = 409200 I 2 + Q 2 = 640 \qquad I^2+Q^2=409200 \qquad \sqrt{I^2+Q^2}=640 I2+Q2=409200I2+Q2=640
\qquad 这是在无GPS信号出现情形下,我们期望从early, prompt和 late分支读取的值。但实际情况是,噪声经常使这些分支的功率更高。为解决这个问题,可以尝试增大阈值以获得一个满意情形。在我们的接收机中,用1500代替640作为一个分支的噪声底限似乎是一个好选择,即:
I 2 + Q 2 = 1500 \qquad \sqrt{I^2+Q^2}=1500 I2+Q2=1500
假设我们希望跟踪比噪声底限高6dB的信号,则这时应该期望得到的值为 I 2 + Q 2 I^2+Q^2 I2+Q2= 8957411。考虑到这点,单独一个分支(early、prompt或late)的阈值可以选择为:
I 2 + Q 2 = 2993 \qquad \sqrt{I^2+Q^2}= 2993 I2+Q2=2993
并且如果我们求三个分支之和,在最差情况下 (6dB over early, 3dB over prompt, 0dB over late),可以选择
2993 + 2119 + 1500 = 6612 \qquad 2993+2119+1500=6612 2993+2119+1500=6612
AGRS_GP_1项目用以上数值作为捕获和确认阈值实现了通道跟踪代码。具体常量定义和代码实现参见头文件constants.h和源文件gps_accum_task.c。
\qquad 捕获函数一旦找到了一个高相关功率值,就会认为捕获到了似然信号,而立即将通道切换为确认状态(CHANNEL_CONFIRM)。确认状态的响应函数(简称确认函数)为gps_confirm(…),它的任务是进一步判定这个高相关峰值的似然性:
下面对函数中应用的常数和算法予以说明。
\qquad 参见小节“1、捕获”。
\qquad (n,m)检测器是n中取m的固定时间段检测器。在n次检测的每个时间段中,将信号与其阈值做比较。如果其中有m个或更多个超过了阈值,便宣布信号存在;否则,宣布信号不存在。有关(n,m)检测器的检测概率的进一步讨论,参见文献“GPS原理与应用(第二版)”的第5.8.2节。
\qquad 由捕获函数gps_acquire(…)获得的频率值可能与实际信号频率值相差较大,为了提高信号锁定速度,函数gps_confirm(…)在确认信号出现了高相关峰值后,将通道切换到频率调整状态(CHANNEL_FREQ_PULL)。频率调整状态的响应函数为gps_freq_pull(…),它实现了一个1-阶FLL,它的频率调整过程是:
下面对函数中应用的算法予以说明。
\qquad 唐氏判决器是一种可变滞留时间段判决器,在这里用它检测在若干时间段上信号功率较小的概率是否一直较大。若是,宣布信号不存在,通道退回捕获状态;否则,通道保持当前状态。具体做法是:
有关唐氏判决器的初值/阈值选择和检测概率的详细讨论,参见文献“GPS原理与应用(第二版)”的第5.8.1节。
\qquad 四象反正切鉴频器使用相邻两相关累积数据点上的即时码 I I I分支( i _ p _ 1 , i _ p _ 2 i\_p\_1, i\_p\_2 i_p_1,i_p_2)和 Q Q Q分支( q _ p _ 1 , q _ p _ 2 q\_p\_1, q\_p\_2 q_p_1,q_p_2),计算它们的叉积(cross)和点积(dot),以及叉积、点积的反正切arctan(cross, dot),从而得到频率误差 Δ f \Delta f Δf:
c r o s s = i _ p _ 1 ⋅ q _ p _ 2 − q _ p _ 1 ⋅ i _ p _ 2 d o t = i _ p _ 1 ⋅ i _ p _ 2 + q _ p _ 1 ⋅ q _ p _ 2 Δ f = arctan ( c r o s s , d o t ) ( t 2 − t 1 ) cross = i\_p\_1 \cdot q\_p\_2 - q\_p\_1 \cdot i\_p\_2 \newline dot = i\_p\_1 \cdot i\_p\_2 + q\_p\_1 \cdot q\_p\_2\newline \Delta f=\frac{\arctan(cross ,dot )}{(t_2 - t_1)} cross=i_p_1⋅q_p_2−q_p_1⋅i_p_2dot=i_p_1⋅i_p_2+q_p_1⋅q_p_2Δf=(t2−t1)arctan(cross,dot)
其中 t 2 − t 1 t_2 - t_1 t2−t1为相邻两点的时间间隔。
\qquad 这种鉴频器在高和低信噪比时都为最佳,且鉴频结果与信号幅度无关,其单边频率牵引范围为相关积分时间所对应的检测带宽的一半。缺点是对运算量要求较高,通常采用查表法或定点算法。
\qquad 捕获到的频率经过调整已接近实际频率,接着为了锁定信号,需要对频率进行微调。微调状态(CHANNEL_PULL_IN)的响应函数为gps_pull_in(…),它实现了一个2-阶DLL和一个1-阶FLL辅助的2-阶PLL。它在每个1 ms相关累积数据点上对信号频率进行微调,并试图在这种微调状态达到T_pullin ms之后,用最后的T_phasetest ms数据来判决码和载波是否都已锁定。如果都已锁定,则将通道切换到锁定状态(CHANNEL_LOCK)。下面是响应函数gps_pull_in(…)完成这些任务的具体步骤:
下面对函数中应用的常数和算法予以说明。
\qquad 参见小节“3、频率调整”。
\qquad 2-阶DLL使用经典的归一化超前码( i _ e , q _ e i\_e, q\_e i_e,q_e)包络( e _ m a g e\_mag e_mag)减滞后码( i _ l , q _ l i\_l, q\_l i_l,q_l)包络( l _ m a g l\_mag l_mag)鉴别器计算码片误差:
Δ f = 1 2 e _ m a g − l _ m a g e _ m a g + l _ m a g \Delta f=\frac{1}{2}\frac{e\_mag-l\_mag}{e\_mag+l\_mag} Δf=21e_mag+l_mage_mag−l_mag
其中: e _ m a g = ( i _ e 2 + q _ e 2 ) 1 / 2 , l _ m a g = ( i _ l 2 + q _ l 2 ) 1 / 2 e\_mag = (i\_e^2 + q\_e^2)^{1/2}, l\_mag = (i\_l^2 + q\_l^2)^{1/2} e_mag=(i_e2+q_e2)1/2,l_mag=(i_l2+q_l2)1/2。
\qquad 这种鉴别器因其输出误差在1个码片范围内呈线性而得到广泛应用。缺点是运算量大。
\qquad 2-阶PLL使用二象反正切鉴相器的以下变种计算相位误差:
Δ p = arctan ( q _ p + q _ e + q _ l i _ p + i _ e + i _ l ) \Delta p=\arctan\Big ( \frac{q\_p+q\_e+q\_l}{i\_p+i\_e+i\_l}\Big) Δp=arctan(i_p+i_e+i_lq_p+q_e+q_l)
其中:( i _ p , q _ p i\_p, q\_p i_p,q_p), ( i _ e , q _ e i\_e, q\_e i_e,q_e), ( i _ l , q _ l i\_l, q\_l i_l,q_l)分别是即时码、超前码、滞后码的 I I I分支和 Q Q Q分支。这个鉴相器的输出值范围为[–π ⁄ 2, π ⁄ 2]。需要时,可除以2π对它归一化。
\qquad 二象反正切鉴相器只使用即时码的 I I I分支( i _ p i\_p i_p)和 Q Q Q分支( q _ p q\_p q_p)计算相位误差,在高和低信噪比时都为最佳,且相位结果与信号幅度无关。上面定义的鉴相器的运算量与它相当,通常采用查表法或定点算法。
\qquad 辅助2-阶PLL的1-阶FLL使用相邻两相关累积数据点上的即时码 I I I分支( i _ p _ 1 , i _ p _ 2 i\_p\_1, i\_p\_2 i_p_1,i_p_2)和 Q Q Q分支( q _ p _ 1 , q _ p _ 2 q\_p\_1, q\_p\_2 q_p_1,q_p_2),计算它们的叉积(cross)和点积(dot)的符号,从而得到频率误差Δf,因此称为叉积×符号(点积)鉴频器:
c r o s s = i _ p _ 1 ⋅ q _ p _ 2 − q _ p _ 1 ⋅ i _ p _ 2 d o t = i _ p _ 1 ⋅ i _ p _ 2 + q _ p _ 1 ⋅ q _ p _ 2 Δ f = c r o s s ⋅ s g n ( d o t ) ( t 2 − t 1 ) cross = i\_p\_1 \cdot q\_p\_2 - q\_p\_1 \cdot i\_p\_2 \newline dot = i\_p\_1 \cdot i\_p\_2 + q\_p\_1 \cdot q\_p\_2\newline \Delta f=\frac{cross \cdot sgn(dot) }{(t_2 - t_1)} cross=i_p_1⋅q_p_2−q_p_1⋅i_p_2dot=i_p_1⋅i_p_2+q_p_1⋅q_p_2Δf=(t2−t1)cross⋅sgn(dot)
其中: t 2 − t 1 t_2 - t_1 t2−t1为相邻两点的时间间隔。
\qquad 这种鉴频器在高信噪比时接近最佳,但鉴频结果与信号幅度有关,其单边频率牵引范围为相关积分时间所对应的检测带宽的1/4。运算量要求适中。
\qquad 环路滤波器的目标是降低噪声,以便在其输出端产生原始信号的准确估计值。在一个锁相环中,环路滤波器的输出信号要与原始信号相减以产生误差信号,误差信号再反馈到滤波器输入端形成闭环过程。下面给出了2-阶PLL(包括1-阶FLL辅助的2-阶PLL)的数字滤波器的计算公式,其中数字积分器采用矩形变换或双线性变换。在实际应用这些公式时,首先通过选择滤波器阶数来确定滤波计算公式,以及通过选择噪声带宽( B n B_n Bn)来计算乘法系数。之后,将输入信号与乘法系数相乘,按公式进行计算,就能完成信号滤波。
2-阶PLL数字滤波器公式(矩形变换)
ω ( n ) = ω ( n − 1 ) + ( ω 0 2 T + a 2 ω 0 ) p ( n ) − ( a 2 ω 0 ) p ( n − 1 ) \omega (n) = \omega (n-1)+(\omega _0 ^2 T+a_2\omega _0)p(n)-(a_2\omega _0)p(n-1) ω(n)=ω(n−1)+(ω02T+a2ω0)p(n)−(a2ω0)p(n−1)
2-阶PLL数字滤波器公式(双线性变换)
ω ( n ) = ω ( n − 1 ) + ( ω 0 2 T 2 + a 2 ω 0 ) p ( n ) + ( ω 0 2 T 2 − a 2 ω 0 ) p ( n − 1 ) \omega (n) = \omega (n-1)+\Big(\frac{\omega _0 ^2 T}{2} +a_2\omega _0\Big)p(n)+\Big(\frac{\omega _0 ^2 T}{2}-a_2\omega _0\Big)p(n-1) ω(n)=ω(n−1)+(2ω02T+a2ω0)p(n)+(2ω02T−a2ω0)p(n−1)
其中:
进一步,记
c 1 = ω 0 2 T 2 + a 2 ω 0 c 2 = ω 0 2 T 2 − a 2 ω 0 c_1=\frac{\omega _0 ^2 T}{2}+a_2\omega _0 \newline c_2=\frac{\omega _0 ^2 T}{2}-a_2\omega _0 c1=2ω02T+a2ω0c2=2ω02T−a2ω0
则2-阶PLL数字滤波器的双线性变换公式可改写为
ω ( n ) = ω ( n − 1 ) + c 1 p ( n ) + c 2 p ( n − 1 ) \omega (n) = \omega (n-1)+c_1p(n)+c_2p(n-1) ω(n)=ω(n−1)+c1p(n)+c2p(n−1)
1-阶FLL辅助的2-阶PLL数字滤波器公式(矩形变换)
ω ( n ) = ω ( n − 1 ) + ( ω 0 p 2 T + a 2 ω 0 p ) p ( n ) − ( a 2 ω 0 p ) p ( n − 1 ) − ( ω 0 f T ) f ( n ) \omega (n) = \omega (n-1) +(\omega _{0p} ^2 T+a_2\omega _{0p})p(n) \\ -(a_2\omega _{0p})p(n-1)-(\omega _{0f}T)f(n) ω(n)=ω(n−1)+(ω0p2T+a2ω0p)p(n)−(a2ω0p)p(n−1)−(ω0fT)f(n)
1-阶FLL辅助的2-阶PLL数字滤波器公式(双线性变换)
ω ( n ) = ω ( n − 1 ) + ( ω 0 p 2 T 2 + a 2 ω 0 p ) p ( n ) + ( ω 0 p 2 T 2 − a 2 ω 0 p ) p ( n − 1 ) − ( ω 0 f T 2 ) [ f ( n ) + f ( n − 1 ) ] \omega (n) = \omega (n-1) + \Big(\frac{\omega _{0p} ^2 T}{2}+a_2\omega _{0p}\Big)p(n) \\ +\Big(\frac{\omega _{0p} ^2 T}{2}-a_2\omega _{0p}\Big)p(n-1) -\Big(\frac{\omega _{0f}T}{2}\Big)[f(n)+f(n-1)] ω(n)=ω(n−1)+(2ω0p2T+a2ω0p)p(n)+(2ω0p2T−a2ω0p)p(n−1)−(2ω0fT)[f(n)+f(n−1)]
其中:
进一步,记
c 1 = ω 0 p 2 T 2 + a 2 ω 0 p c 2 = ω 0 p 2 T 2 − a 2 ω 0 p c 3 = − ω 0 f T 2 c_1=\frac{\omega _{0p} ^2 T}{2}+a_2\omega _{0p} \newline c_2=\frac{\omega _{0p} ^2 T}{2}-a_2\omega _{0p} \newline c_3=-\frac{\omega _{0f} T}{2} c1=2ω0p2T+a2ω0pc2=2ω0p2T−a2ω0pc3=−2ω0fT
则1-阶FLL辅助的2-阶PLL数字滤波器的双线性变换公式可改写为
ω ( n ) = ω ( n − 1 ) + c 1 p ( n ) + c 2 p ( n − 1 ) + c 3 [ f ( n ) + f ( n − 1 ) ] \omega (n) = \omega (n-1)+c_1p(n)+c_2p(n-1)+c_3[f(n)+f(n-1)] ω(n)=ω(n−1)+c1p(n)+c2p(n−1)+c3[f(n)+f(n−1)]
\qquad 参见“(5) 环路滤波公式”。对于微调状态的DLL,选择2-阶滤波器、5 Hz噪声带宽、以及1 ms(滤波器)采样时间间隔,于是:
由此可根据公式计算出:
\qquad 参见“(5) 环路滤波公式”。对于微调状态的1-阶FLL辅助的2-阶PLL,选择30 Hz PLL噪声带宽、300 Hz FLL噪声带宽、以及1 ms(滤波器)采样时间间隔,于是:
由此可根据公式计算出:
\qquad 在微调状态中,为了减小启动时的瞬时变化,码环路在2ms后闭合,载波环路在5ms后闭合。这个状态的有效时间为GPS_PULLIN_TIME(约1000 ms),其中最后GPS_PHASETEST_TIME(约500ms)用于测量相位误差(阈值约40°),且程序试图同步到一个数据位的边界。这些参数值继承了Namuru源码的定义,其来源和测试说明可参考文献”OpenSource GPS: Open Source Software for Learning about GPS”。
\qquad 微调状态(CHANNEL_PULL_IN)在锁定了码和载波之后,将通道将切换到锁定状态(CHANNEL_LOCK)。锁定状态的响应函数为gps_lock(…),它实现了一个2-阶DLL和一个1-阶FLL辅助的2-阶PLL,用以跟踪码和载波,以及解码导航电文位。具体来说,在每个相关累积数据点上:
下面对函数中应用的常数和算法予以说明。
\qquad 参见小节“3、频率调整”。
\qquad 参见小节“4、微调”。
\qquad 2-阶PLL使用二象归一化正弦鉴相器的以下变种计算相位误差:
Δ p = s g n ( i _ s u m ) ⋅ q _ s u m l m a g ( i _ s u m , q _ s u m ) \Delta p=\frac{sgn(i\_sum) \cdot q\_sum}{lmag(i\_sum, q\_sum)} Δp=lmag(i_sum,q_sum)sgn(i_sum)⋅q_sum
其中: i _ s u m = i _ p + i _ e + i _ l , q _ s u m = q _ p + q _ e + q _ l i\_sum = i\_p + i\_e + i\_l, q\_sum = q\_p + q\_e + q\_l i_sum=i_p+i_e+i_l,q_sum=q_p+q_e+q_l; ( i _ p , q _ p ) , ( i _ e , q _ e ) , ( i _ l , q _ l ) (i\_p, q\_p), (i\_e, q\_e), (i\_l, q\_l) (i_p,q_p),(i_e,q_e),(i_l,q_l)分别是即时码、超前码、滞后码的 I I I分支和 Q Q Q分支; l m a g ( i _ s u m , q _ s u m ) = ( i _ s u m 2 + q _ s u m 2 ) 1 / 2 lmag(i\_sum, q\_sum) = (i\_sum^2 + q\_sum^ 2)^{1/2} lmag(i_sum,q_sum)=(i_sum2+q_sum2)1/2。
\qquad 在这个鉴相器中, Q Q Q分支被 I I I、 Q Q Q分支包络归一化,将输出相位误差近似到±π/4。归一化使得对高、低信噪声比不敏感,也使斜率与信号幅度无关,运算量小。
\qquad 参见小节“4、微调”。
\qquad 参见小节“4、微调”的“(5) 环路滤波公式”。对于锁定状态的DLL,选择2-阶滤波器、1Hz噪声带宽、以及20 ms(滤波器)采样时间间隔,于是:
由此可根据公式计算出:
\qquad 参见小节“4、微调”的“(5) 环路滤波公式”。对于锁定状态的1-阶FLL辅助的2-阶PLL,选择25 Hz PLL噪声带宽、250 Hz FLL噪声带宽、以及1 ms(滤波器)采样时间间隔,于是:
由此可根据公式计算出:
\qquad 对比BDS B1I信号和GPS L1信号的基带处理可知,其通道的状态转换控制、状态响应逻辑、以及算法总体上是一样的,不同之处在于BDS B1I信号包含了D1和D2两种导航电文,这是跟踪BDS B1I信号必须考虑的:
在处理BDS B1I信号的代码中,这些特性差异影响了微调状态(CHANNEL_PULL_IN)和锁定状态(CHANNEL_LOCK)的响应函数,参见源文件b1i_accum_task.c。本小节将对它们予以说明。至于在具体响应函数中,一些预定常数的由来和计算可参考前一小节中的相应说明。
\qquad 在BDS B1I信号通道中,微调状态(CHANNEL_PULL_IN)的响应函数为b1i_pull_in(…),与GPS L1信号响应函数gps_pull_in(…)一样,它通过组合使用一个锁频环(FLL)和一个锁相环(PLL)来跟踪信号。它至少需要响应21次(21个相关累积数据),以下是它每次响应所进行的处理:
\qquad BDS B1I导航电文,按照速率、结构和卫星的不同,分为D1导航电文和D2导航电文。D1导航电文速率为50 bps,调制有一个二次码;D2导航电文速率为500 bps。MEO和IGSO卫星的B1I信号播发D1导航电文,GEO卫星的B1I信号播发D2导航电文。
\qquad D1导航电文上的二次码用20-位Neumann-Hoffman码(简称NH码)(0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0)进行调制,码周期为20 ms,与1-位数据的宽度相同;码片宽为1 ms,与C/A码片周期相同,因此码片速率为1 kbps。
\qquad 剥离二次码就是将D1导航电文的每个1 ms C/A码分支( i _ p , q _ p , i _ e , q _ e , i _ l , q _ l i\_p, q\_p, i\_e, q\_e, i\_l, q\_l i_p,q_p,i_e,q_e,i_l,q_l)与上述NH码的相应码片对齐并进行相关计算,即:当NH码片值为1时,C/A码分支数值不变,为0时,数值反号。
\qquad 在BDS B1I信号通道中,锁定状态(CHANNEL_LOCK)的响应函数为b1i_lock(…),与GPS L1信号响应函数gps_lock(…)一样,它的任务是跟踪码和载波,以及部分解码导航电文。具体来说,在每个相关累积数据点上:
\qquad 参见小节“1、微调”。