GPS长数据捕获时的C/A码相位漂移
GPS信号长数据捕获C/A码相位不一致的问题
在生成了固定C/A码相位(固定速度、加速度为0m/s2、加加速度为0m/s3)的较长时间的仿真数据后,用来做多次捕获实验。此时会发现,当捕获的次数多了之后会出现C/A码相位的递增现象。当然除了程序可能出现的各种原因以外,还可以做如下解释:由于采样频率不能为C/A码速率的整数倍,所以对信号进行采样的过程中会出现样本边界模糊的问题,即正常情况下应该是N个样本而某些C/A码周期会出现N+1个样本的情况。这个就是导致长时间捕获后C/A码出现相位递增的根本原因。在做捕获的时候,本地C/A码形成的时候相位是从0开始的,也就是说会产生N+1个点,而不会产生N个点,所以在一段周期内就会多读出一个样本点来,而这种连续捕获的后果就会让C/A码从错误的起始点开始与接收数据对齐,继而导致一段时间后相位就会增加。
相关文档:
/*
思路:递归算法
前0..cur-1位置上已经排好,当前cur位置取一个和前面都不一样的,然后递归处理后面的。
*/
/* 输出1,2,3,..,n的排列数 */
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
void p(int n)
{
extern void _p(int n, int cur, int *a);
int *a;
a = ......
/*
这是个常见的面试题哦,总之我面试的时候遇到过, 当时没有答上来
回去后想出来下面的方法一,该法还有个附加优点,可以判断出链表在哪个地方形成环的(即如果想拆开这个环,从哪个地方断开)。
后来知道还有个经典算法,即使用两个指针,一快一慢向前试探,如果最终重合则链表有环,果然优美的算法。
*/
#inc ......
#include <stdio.h>
#define bits(p, d) { \
int _tmp=p->d, _bits=0; \
for (p->d=1; p->d; p->d<<=1) \
_bits++; \
p->d=_tmp; \
printf("%s->%s has %d bits", #p, #d, _bits); \
}
typedef struct _s{
int a:4;
} S;
int main()
{
S tmp, ......
已经知道的,不说了...大家都知道的,可以问问,查查资料。这里又放些附加建议:
1.基本算数运算:
既然计算机里没有真正的整数,那么计算机里也没有真正的算数运算。
取值范围:
设a和b是两个占一样位宽的无符号整数,这种整数可取到最大值M ......