4.4 信号捕获和跟踪

\qquad 在HD-GR导航软件的相关数据累积任务(accum_task)中,来自射频前端的GPS和BDS基带信号分别被引进十个并行通道,参见源文件main_accum_task.c中的accum_task()函数。每个通道实时搜索、捕获、跟踪分配给它的卫星,并在锁定卫星信号后,对卫星导航电文进行解码。这些处理任务在以下分立状态中完成:

  • CHANNEL_OFF --关闭(空闲)
  • CHANNEL_ACQUISITION – 捕获
  • CHANNEL_CONFIRM – 确认
  • CHANNEL_FREQ_PULL – 频率调整
  • CHANNEL_PULL_IN – 微调
  • CHANNEL_LOCK – 锁定

其中,每个通道使用一个变量(state)跟踪当前处理状态,每个状态对应一个分立子任务(状态响应函数),它在满足一定信号条件和处理条件下转换为另一状态。

\qquad 下面分别讨论GPS L1和BDS B1I信号通道的环路控制逻辑和算法,其中涉及的基础知识参见有关书籍,实现细节可通过阅读源码和注释来体会。

  • 我的新浪博客账号
  • 我的存档免费软件
  • 我的存档学习资料

4.4.1 GPS L1信号捕获和跟踪

\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 本小节将对这些状态响应函数以及不同状态之间的转换关系做进一步说明。

1、捕获

\qquad 一个通道,在未分配卫星和初始化之前,处于关闭状态(CHANNEL_OFF);在分配了卫星和初始化之后,进入捕获状态(CHANNEL_ACQUISITION)。捕获状态的响应函数(简称捕获函数)为gps_acquire(…),任务是找到一个高相关峰值:

  • 通过搜索GPS L1信号的频率空间和码空间,找到一个具有高相关功率值(超过预定阈值ACQ_thresh)的频率值和码相位;
  • 一旦找到了这样的值,切换通道到确认状态 (CHANNEL_CONFIRM),以便做进一步考察;
  • 如果搜索完整个二维空间也未找到这样的值,复位通道为关闭状态(CHANNEL_OFF);
  • 否则(未搜索完整个二维空间),保持通道的捕获状态。

下面对函数中应用的常数和算法予以说明。

(1) 载波/码搜索区间和步长

\qquad 为了进行信号捕获,需要搜索载波频率和码相位空间,直到检测到信号。偏离载波频率标称值(IF信号中心频率)的最大值由最大载波多普勒频移加上最大接收时钟误差来定义。最大码相位由(固定的)码长度定义。典型地,在一个给定的载波频率上搜索所有码相位,然后再推进到下一个载波频率上重复码相位搜索。为此,在AGRS_GP_1代码实现中,进行了以下设置:

  • IF信号中心频率:4.092 MHz
  • 最大接收时钟误差:0(缺省值)
  • 载波搜索区间:±10 kHz
  • 载波搜索步长:500 Hz
  • 码搜索区间:0 ~ 1023码片
  • 码搜索步长:0.5码片

(2) 载波NCO频率控制字

\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-位(无符号)控制字

(3) 码NCO频率控制字

\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-位(无符号)控制字

(4) 捕获和确认阈值

\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。

2、确认

\qquad 捕获函数一旦找到了一个高相关功率值,就会认为捕获到了似然信号,而立即将通道切换为确认状态(CHANNEL_CONFIRM)。确认状态的响应函数(简称确认函数)为gps_confirm(…),它的任务是进一步判定这个高相关峰值的似然性:

  • 保持捕获函数所找到的频率值和码相位不变,继续计算随后N_thresh个(代码中为10)相关累积数据点上的功率值,并计数超过预定阈值的次数(称为确认次数,假定为m);
  • 如果m不小于某个预定的次数M_thresh(代码中为8),则确认信号出现了一个高相关峰值,切换通道到频率调整状态 (CHANNEL_FREQ_PULL);
  • 否则(m小于预定次数M_thresh),将通道切换回捕获状态 (CHANNEL_ACQUISITION)。

下面对函数中应用的常数和算法予以说明。

(1) 捕获和确认阈值

\qquad 参见小节“1、捕获”。

(2) (n,m)检测器

\qquad (n,m)检测器是n中取m的固定时间段检测器。在n次检测的每个时间段中,将信号与其阈值做比较。如果其中有m个或更多个超过了阈值,便宣布信号存在;否则,宣布信号不存在。有关(n,m)检测器的检测概率的进一步讨论,参见文献“GPS原理与应用(第二版)”的第5.8.2节。

3、频率调整

\qquad 由捕获函数gps_acquire(…)获得的频率值可能与实际信号频率值相差较大,为了提高信号锁定速度,函数gps_confirm(…)在确认信号出现了高相关峰值后,将通道切换到频率调整状态(CHANNEL_FREQ_PULL)。频率调整状态的响应函数为gps_freq_pull(…),它实现了一个1-阶FLL,它的频率调整过程是:

  • 在每个1 ms相关累积数据点上:
    • 应用唐氏判决器检查信号功率。如果信号功率在若干数据点上一直较小,使得判决值tang < T_thresh,则将通道退回到捕获状态(CHANNEL_ACQUISITION);
    • 用相关累积数据计算四象反正切鉴频值;
    • 累加鉴频值;
    • 保存最大/最小鉴频值。
  • 当鉴频计算次数m达到M _fl_thresh = 20时:
    • 在累加鉴频值中剔除最大/最小鉴频值;
    • 用累加鉴频值计算平均鉴频值;
    • 用平均鉴频值作为频率误差更新信号频率;
    • 将通道切换到微调状态 (CHANNEL_PULL_IN)。

下面对函数中应用的算法予以说明。

(1) 唐氏判决器

\qquad 唐氏判决器是一种可变滞留时间段判决器,在这里用它检测在若干时间段上信号功率较小的概率是否一直较大。若是,宣布信号不存在,通道退回捕获状态;否则,通道保持当前状态。具体做法是:

  • 给唐氏判决器的上/下行计数器赋初值0;
  • 若信号功率低于阈值TANG_THRESHOLD,计数器减一常数(代码中为3);否则,当计数器值小于上行阈值(代码中为90)时,计数器加一常数(代码中为1);
  • 检查计数器值:若小于下行阈值(代码中为-30),宣布信号不存在,通道退回捕获状态;否则,通道保持当前状态。

有关唐氏判决器的初值/阈值选择和检测概率的详细讨论,参见文献“GPS原理与应用(第二版)”的第5.8.1节。

(2) 四象反正切鉴频器

\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_1q_p_2q_p_1i_p_2dot=i_p_1i_p_2+q_p_1q_p_2Δf=(t2t1)arctan(cross,dot)

其中 t 2 − t 1 t_2 - t_1 t2t1为相邻两点的时间间隔。

\qquad 这种鉴频器在高和低信噪比时都为最佳,且鉴频结果与信号幅度无关,其单边频率牵引范围为相关积分时间所对应的检测带宽的一半。缺点是对运算量要求较高,通常采用查表法或定点算法。

4、微调

\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(…)完成这些任务的具体步骤:

  • 处理至少21个相关累积数据。在每个相关累积数据点上:
    • 应用唐氏判决器检查信号功率。如果信号功率在若干数据点上一直较小,使得判决值tang < T_thresh,则将通道退回到捕获状态(CHANNEL_ACQUISITION);
    • 应用超前减滞后归一化鉴别器跟踪码频率(2-阶DLL);
    • 应用四象反正切鉴相器和叉积×符号(点积)鉴频器跟踪载波频率(1-阶FLL辅助的2-阶PLL)。
  • 如果未进行位同步,检查位边界跃变。如果之前20个累积数据具有相同正负号,而当前累积数据正负号改变,则认为发生了数据位边界跃变:
    • 设置位同步标志;
    • 初始化位流计数器;
    • 设置标志使得函数gps_accum_newdata(…)在下次读取基带累积数据后,能及时设置基带1 ms历元计数器(1ms epoch counter),这将使这个历元计数器与这里的位流相同步。
  • 检查能否切换通道到锁定状态(CHANNEL_LOCK):
    • 对载波相位误差进行累积;
    • 如果微调状态达到预定持续时间T_pullin,且连续出现至少5次正确的位边界跃变:
      • 计算累积相位误差均方值;
      • 如果误差均方值小于预定常数,复位相应数据成员,切换通道到锁定状态;
      • 否则,切换通道到捕获状态(CHANNEL_ACQUISITION)。

下面对函数中应用的常数和算法予以说明。

(1) 唐氏判决器

\qquad 参见小节“3、频率调整”。

(2) 超前减滞后归一化鉴别器

\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_magl_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个码片范围内呈线性而得到广泛应用。缺点是运算量大。

(3) 二象反正切鉴相器

\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)计算相位误差,在高和低信噪比时都为最佳,且相位结果与信号幅度无关。上面定义的鉴相器的运算量与它相当,通常采用查表法或定点算法。

(4) 叉积×符号(点积)鉴频器

\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_1q_p_2q_p_1i_p_2dot=i_p_1i_p_2+q_p_1q_p_2Δf=(t2t1)crosssgn(dot)

其中: t 2 − t 1 t_2 - t_1 t2t1为相邻两点的时间间隔。

\qquad 这种鉴频器在高信噪比时接近最佳,但鉴频结果与信号幅度有关,其单边频率牵引范围为相关积分时间所对应的检测带宽的1/4。运算量要求适中。

(5) 环路滤波公式

\qquad 环路滤波器的目标是降低噪声,以便在其输出端产生原始信号的准确估计值。在一个锁相环中,环路滤波器的输出信号要与原始信号相减以产生误差信号,误差信号再反馈到滤波器输入端形成闭环过程。下面给出了2-阶PLL(包括1-阶FLL辅助的2-阶PLL)的数字滤波器的计算公式,其中数字积分器采用矩形变换或双线性变换。在实际应用这些公式时,首先通过选择滤波器阶数来确定滤波计算公式,以及通过选择噪声带宽( B n B_n Bn)来计算乘法系数。之后,将输入信号与乘法系数相乘,按公式进行计算,就能完成信号滤波。

2-阶PLL数字滤波器公式

  • 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)=ω(n1)+(ω02T+a2ω0)p(n)(a2ω0)p(n1)

  • 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)=ω(n1)+(2ω02T+a2ω0)p(n)+(2ω02Ta2ω0)p(n1)

其中:

  • ω 0 = 1.887 B n \omega _0 = 1.887B_n ω0=1.887Bn ω 0 \omega _0 ω0单位:rad/s, B n B_n Bn单位:Hz;
  • a 2 = 1.414 a_2 = 1.414 a2=1.414,为无量纲系数;
  • T T T为两次采样之间的时间间隔,单位:s;
  • p ( n ) , p ( n − 1 ) p(n), p(n-1) p(n),p(n1)为当前和上次采样时间上的归一化鉴相值;
  • ω ( n ) , ω ( n − 1 ) \omega(n),\omega(n-1) ω(n),ω(n1)为当前和上次采样时间上的滤波器输出值,单位:rad/s。

进一步,记
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ω02Ta2ω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)=ω(n1)+c1p(n)+c2p(n1)

1-阶FLL辅助的2-阶PLL数字滤波器公式

  • 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)=ω(n1)+(ω0p2T+a2ω0p)p(n)(a2ω0p)p(n1)(ω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)=ω(n1)+(2ω0p2T+a2ω0p)p(n)+(2ω0p2Ta2ω0p)p(n1)(2ω0fT)[f(n)+f(n1)]

其中:

  • ω 0 p = 1.887 B n p , ω 0 f = 4 B n f , ω 0 p 、 ω 0 f \omega _{0p}= 1.887B_{np}, ω_{0f} = 4B_{nf},ω_{0p}、ω_{0f} ω0p=1.887Bnp,ω0f=4Bnfω0pω0f单位:rad/s, B n p 、 B n f B_{np}、B_{nf} BnpBnf单位:Hz;
  • a 2 = 1.414 a_2 = 1.414 a2=1.414,为无量纲系数;
  • T T T为两次采样之间的时间间隔,单位:s;
  • p ( n ) , p ( n − 1 ) p(n), p(n-1) p(n),p(n1)为当前和上次采样时间上的归一化鉴相值;
  • f ( n ) , f ( n − 1 ) f(n), f(n-1) f(n),f(n1)为当前和上次采样时间上的鉴频值,单位:Hz;
  • ω ( n ) , ω ( n − 1 ) \omega(n), \omega(n-1) ω(n),ω(n1)为当前和上次采样时间上的滤波器输出值,单位:rad/s。

进一步,记
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ω0p2Ta2ω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)=ω(n1)+c1p(n)+c2p(n1)+c3[f(n)+f(n1)]

注释

  • 公式中的滤波器参数 a 2 a_2 a2、滤波器参数 ω 0 , ω 0 p , ω 0 f \omega _0,\omega _{0p},\omega _{0f} ω0,ω0p,ω0f表达式的系数,来自“《Understanding GPS: Principles and Applications》(第5.5节)”。
  • 公式中的每个量的单位都是明确的。在使用鉴相值[ p ( n ) , p ( n − 1 ) p(n), p(n-1) p(n),p(n1)]、鉴频值[ f ( n ) , f ( n − 1 ) f(n), f(n-1) f(n),f(n1)]之前,要将它们转换为正确的单位。使用不一致的单位可能引入错误因子,导致错误的结果。

(6) DLL参数计算

\qquad 参见“(5) 环路滤波公式”。对于微调状态的DLL,选择2-阶滤波器、5 Hz噪声带宽、以及1 ms(滤波器)采样时间间隔,于是:

  • B n = 5 H z B_n = 5Hz Bn=5Hz
  • T = 0.001 s T = 0.001 s T=0.001s
  • ω 0 = 1.887 B n = 9.435 r a d / s \omega_0 = 1.887 B_n = 9.435 rad/s ω0=1.887Bn=9.435rad/s

由此可根据公式计算出:

  • c 1 = 13.384 c_1 = 13.384 c1=13.384
  • c 2 = − 13.295 c_2 = -13.295 c2=13.295

(7) PLL参数计算

\qquad 参见“(5) 环路滤波公式”。对于微调状态的1-阶FLL辅助的2-阶PLL,选择30 Hz PLL噪声带宽、300 Hz FLL噪声带宽、以及1 ms(滤波器)采样时间间隔,于是:

  • B n p = 30 H z B_{np} = 30 Hz Bnp=30Hz
  • B n f = 300 H z B_{nf} = 300 Hz Bnf=300Hz
  • T = 0.001 s T = 0.001 s T=0.001s
  • ω 0 p = 1.887 B n p = 56.61 r a d / s \omega_{0p} = 1.887 B_{np} = 56.61 rad/s ω0p=1.887Bnp=56.61rad/s
  • ω 0 f = 4 B n f = 1200 r a d / s \omega_{0f} = 4 B_{nf} = 1200 rad/s ω0f=4Bnf=1200rad/s

由此可根据公式计算出:

  • c 1 = 83.242 c_1 = 83.242 c1=83.242
  • c 2 = − 76.834 c_2 = -76.834 c2=76.834
  • c 3 = − 0.600 c_3 = -0.600 c3=0.600

(8) 微调时间和相位误差阈值

\qquad 在微调状态中,为了减小启动时的瞬时变化,码环路在2ms后闭合,载波环路在5ms后闭合。这个状态的有效时间为GPS_PULLIN_TIME(约1000 ms),其中最后GPS_PHASETEST_TIME(约500ms)用于测量相位误差(阈值约40°),且程序试图同步到一个数据位的边界。这些参数值继承了Namuru源码的定义,其来源和测试说明可参考文献”OpenSource GPS: Open Source Software for Learning about GPS”。

5、锁定

\qquad 微调状态(CHANNEL_PULL_IN)在锁定了码和载波之后,将通道将切换到锁定状态(CHANNEL_LOCK)。锁定状态的响应函数为gps_lock(…),它实现了一个2-阶DLL和一个1-阶FLL辅助的2-阶PLL,用以跟踪码和载波,以及解码导航电文位。具体来说,在每个相关累积数据点上:

  • 应用唐氏判决器检查信号功率。如果信号功率在若干数据点上一直较小,使得判决值tang < T_thresh,则将通道退回到捕获状态(CHANNEL_ACQUISITION);
  • 按照从基带模块读取的C/A码计数值(epoch_codes),检查和校正通道的ms计数器(ms_count);
  • 应用四象反正切鉴相器和交叉×符号(点)鉴别器跟踪载波频率。
  • 累加即时、超前、以及滞后码。如果累加次数达到T_lock =20:
    • 应用超前减滞后归一化鉴别器跟踪码频率;
    • 用20 ms即时、超前、滞后码累加值计算数据位;
    • 设置标志通知相关数据累积任务(accum_task)处理该数据位;
    • 递增以位为单位的通道时间(time_in_bits),用于观测量读取任务(meas_task)。在电文处理任务(message_task)中,当从一个有效子帧中获得了TOW时,它将被设置为正确的时间;
    • 复位相应数据成员。

下面对函数中应用的常数和算法予以说明。

(1) 唐氏判决器

\qquad 参见小节“3、频率调整”。

(2) 超前减滞后归一化鉴别器

\qquad 参见小节“4、微调”。

(3) 二象正弦归一化鉴相器

\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。归一化使得对高、低信噪声比不敏感,也使斜率与信号幅度无关,运算量小。

(4) 交叉×符号(点)鉴频器

\qquad 参见小节“4、微调”。

(5) DLL参数计算

\qquad 参见小节“4、微调”的“(5) 环路滤波公式”。对于锁定状态的DLL,选择2-阶滤波器、1Hz噪声带宽、以及20 ms(滤波器)采样时间间隔,于是:

  • B n = 1 H z B_n = 1 Hz Bn=1Hz
  • T = 0.02 s T = 0.02 s T=0.02s
  • ω 0 = 1.887 B n = 1.887 r a d / s \omega_0 = 1.887 B_n = 1.887 rad/s ω0=1.887Bn=1.887rad/s

由此可根据公式计算出:

  • c 1 = 2.704 c_1 = 2.704 c1=2.704
  • c 2 = − 2.632 c_2 = -2.632 c2=2.632

(6) PLL参数计算

\qquad 参见小节“4、微调”的“(5) 环路滤波公式”。对于锁定状态的1-阶FLL辅助的2-阶PLL,选择25 Hz PLL噪声带宽、250 Hz FLL噪声带宽、以及1 ms(滤波器)采样时间间隔,于是:

  • B n p = 25 H z B_{np} = 25 Hz Bnp=25Hz
  • B n f = 250 H z B_{nf} = 250 Hz Bnf=250Hz
  • T = 0.001 s T = 0.001 s T=0.001s
  • ω 0 p = 1.887 B n p = 47.175 r a d / s \omega_{0p} = 1.887 B_{np} = 47.175 rad/s ω0p=1.887Bnp=47.175rad/s
  • ω 0 f = 4 B n f = 1000 r a d / s \omega_{0f} = 4 B_{nf} = 1000 rad/s ω0f=4Bnf=1000rad/s

由此可根据公式计算出:

  • c 1 = 68.923 c_1 = 68.923 c1=68.923
  • c 2 = − 64.473 c_2 = -64.473 c2=64.473
  • c 3 = − 0.5 c_3 = -0.5 c3=0.5

4.4.2 BDS B1I信号捕获和跟踪

\qquad 对比BDS B1I信号和GPS L1信号的基带处理可知,其通道的状态转换控制、状态响应逻辑、以及算法总体上是一样的,不同之处在于BDS B1I信号包含了D1和D2两种导航电文,这是跟踪BDS B1I信号必须考虑的:

  • D1数据位和D2数据位的持续时间不同,分别为20 ms和2 ms;
  • D1数据位经过了二次编码, D2数据位没有。

在处理BDS B1I信号的代码中,这些特性差异影响了微调状态(CHANNEL_PULL_IN)和锁定状态(CHANNEL_LOCK)的响应函数,参见源文件b1i_accum_task.c。本小节将对它们予以说明。至于在具体响应函数中,一些预定常数的由来和计算可参考前一小节中的相应说明。

1、微调

\qquad 在BDS B1I信号通道中,微调状态(CHANNEL_PULL_IN)的响应函数为b1i_pull_in(…),与GPS L1信号响应函数gps_pull_in(…)一样,它通过组合使用一个锁频环(FLL)和一个锁相环(PLL)来跟踪信号。它至少需要响应21次(21个相关累积数据),以下是它每次响应所进行的处理:

  • 应用唐氏判决器检查信号功率。如果信号功率在若干数据点上一直较小,则将通道退回到捕获状态(CHANNEL_ACQUISITION);
  • 应用超前减滞后包络鉴别器跟踪码频率;
  • 如果未进行位同步,检查位边界跃变:
    • 如果为D1导航电文(根据卫星PRN判断)
      • 剥离当前数据位的二次码;
      • 如果之前20个数据位具有相同正负号,而当前数据位正负号改变,则认为发生了数据位边界跃变,设置位同步标志;
    • 否则(为D2导航电文),如果满足若干条件,则认为发生了数据位边界跃变,设置位同步标志;
  • 如果本次响应确认了位同步:
    • 设置位同步标志;
    • 初始化位流计数器;
    • 设置标志使得函数b1i_accum_newdata(…)在下次读取基带累积数据后,能及时设置基带1 ms历元计数器(1ms epoch counter),它将使这个历元计数器与这里的位流相同步。
  • 应用二象反正切鉴相器和交叉×符号(点)鉴频器跟踪载波频率。
  • 检查是否能切换通道到锁定状态(CHANNEL_LOCK):
    • 对载波相位误差进行累积;
    • 如果微调状态达到预定持续时间:
      • 计算累积相位误差均方值;
      • 如果误差均方值小于预定常数,复位相应数据成员,通知通道分配任务(allocate_task)本通道正在锁定中,切换通道到锁定状态;
      • 否则,切换通道到捕获状态(CHANNEL_ACQUISITION)。

剥离二次码

\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时,数值反号。

2、锁定

\qquad 在BDS B1I信号通道中,锁定状态(CHANNEL_LOCK)的响应函数为b1i_lock(…),与GPS L1信号响应函数gps_lock(…)一样,它的任务是跟踪码和载波,以及部分解码导航电文。具体来说,在每个相关累积数据点上:

  • 应用唐氏判决器检查信号功率。如果信号功率在若干数据点上一直较小,则将通道退回到捕获状态(CHANNEL_ACQUISITION);
  • 按照从基带模块读取的C/A码计数值(epoch_codes),检查和校正通道的20 ms计数器(ms_count_20);
  • 递增以位为单位的通道时间 (time_in_bits),用于观测量读取任务(meas_task)。在电文处理任务(message_task)中,当从一个有效子帧中获得了TOW时,它将被设置为正确的时间;
  • 应用二象反正切鉴相器和交叉×符号(点)鉴频器跟踪载波频率;
  • 累加即时、超前、以及滞后码。如果为D1导航电文,剥离施加在即时、超前、滞后码上的二次码;
  • 跟踪码信号:
    • 应用超前减滞后包络鉴别器跟踪码频率;
    • 用20 ms(D1导航电文)或2 ms(D2导航电文)即时、超前、滞后码累加值计算数据位;
    • 设置标志通知相关数据累积任务(accum_task)处理该数据位;
    • 复位相应数据成员。

剥离二次码

\qquad 参见小节“1、微调”。

  • 我的新浪博客账号
  • 我的存档免费软件
  • 我的存档学习资料

你可能感兴趣的:(HD-GR实时GNSS接收机,#,4,HD-GR导航软件,算法,fpga,信号处理,c语言)