这个就是前文提到的捕获带宽太小的情况,所以需要很多steps才能cover 10khz的带宽 。为什么呢?怎么cover的?C/A码的乘积和FFT: c/a码捕获就是找到c/a码的初始相位,然后用这个c/a码去乘以射频信号,得到射频连续信号,从而得到载频值,如下图:图中最上面的信号是连续输入的c/a码被射频信号调制的波形;中间的图是捕获中得到的c/a码初始相位,是本地产生的;下面图表示的用本地的c/a码乘以输入的c/a coded input ,即:把c/a的影响从载波里strip out最后就得到纯的载波信号,这就可以求载频的频率 。
文章插图
一旦得到上图的载波,就可以用fft来求频率 。如果数据长度是1ms,那么fft的分辨率就是1khz 。为什么呢?这样好理解啊 。1ms的时间,可以表示的周期最长的信号也是1ms,也就是说如果有一个信号周期是2ms,那么在1ms的时间内只有半个周期,因此能表示的最小频率就是1/1ms=1khz,这也是fft的分辨率,所谓分辨率就是最小可以表示的频率 。继续讨论FFT找载波频率 。如果采样率5mhz,那么在1ms中就包含了5000个采样点,因此就需要5000-point FFT 。由于是实数输入,那么这5000个FFT就是 的,即:前面2500个点就包含了所有的信息 。由于频率分辨率是1khz,那么2500个点就可以表示2.5mhz的信息,这么看fft还是线性的,如果有的频率变化快,有的频率变化慢,这就不行了 。突然感觉自己以前对dsp的理解太low了,只知道记公式,公式是美丽,但是物理意义才更美丽,这是题外话!刚才说可以表示2.5mhz的信息,但是我们其实关心的只是多普勒频偏,而不是整个载频,也就是20khz的范围,那么显然2.5mhz就太多了,因此:直接的方法就是只需要计算21个输出值,用dft即可 。
这样做的话,可以节省大量时间和能量,比如:输入的c/a码和本地的c/a码在1ms内需要做乘法,由于有5000个采样点,每移动一次就要做5000次乘法和55000-point FFT,所以需要做5000×5000次FFT,这么看数据量就太大了,而如果只做21-point DFT,那么就只需要5000*21次DFT 。用上面的dft的方法,由于需要用本地产生的c/a码和输入的c/a码每移动一位都做乘法和fft,然后找频率的超过pre- 中的最大值,如果找到最大值,就可以把现在的本地的c/a码的位置记录下来,这就是c/a码的开头 。而且,由于码片的是200ns,也就是说找到的c/a码的开头有200ns的分辨率,或者说200ns的误差,而且由于整个data的长度是1ms,所以多普勒频率的分辨率就是1khz. 这个思路可以很容易: 现在我们考虑10ms的data,那么由于采样率不变,所以时间分辨率还是200ns,但是由于10ms和1ms相比,允许周期更长的信号出现,即:最多可以有10ms为周期的信号,因此频率分辨率就是100hz,能得到这个100hz的是要付出很大代价的,因为现在我们需要做50,000-, 而之前只需要5000-point FFT,而fft长度增加10倍,复杂度增加会超过10倍,所以整个复杂度不是线性增加的!time:这才是第二种方法,除了用fft来做,还可以用时域相关的方法来做 。这个方法本地产生的c/a码不再是简单的c/a码,还把RF信号加入在里面 。由于采样后的信号的载波是1.25mhz,那么考虑频偏在+/-10khz,那么就有21中可能的RF信号可能性,所以本地产生的信号就是如下:
文章插图
其中,Cs代表24颗卫星中某一颗的c/a码,注意:这里都是认为已知卫星的c/a码,只是不知道初始相位,fi代表不同的射频频率,如:1250-10,1250-9,1250-8,…,1250+10khz,也就是这些不同的频率是考虑了多普勒 。产生了这个本地信号后,仍然需要数字化成5mhz的数据,即:每1ms仍然是5000-point,这些点和输入数据相关,所谓相关,就是乘累加,如果本地的c/a码包含正确的c/a码和正确的频率,那么相关结果就会成高,产生一个峰值 。如下图:
- 详细 小白的决策树学习笔记
- 入门 小白的逻辑回归学习笔记
- C语言学习笔记——字符串操作
- 【计算机网络笔记】- 2.物理层概述
- 笔记本键盘下面的触摸区域叫什么
- 为什么笔记本触摸板失灵乱跳
- 隐马尔科夫模型 机器学习笔记Python笔记:HMM
- 上 Unity3D塔防游戏开发——学习笔记
- 学习笔记:MyBtaisPlus学习文档
- 计算机基础知识笔记