开源夏令营《基于HackRF开发GPS信号仿真模拟器》终期汇报

目前的项目进展能够实现的功能有:
1、在Matlab中完整运行数据生成部分功能,产生中频数据
在Matlab中,依次读取某天的全部卫星星历、确定用户的状态(位置、速度和加速度)、依据时间计算卫星的状态(位置、速度和加速度)、确定卫星的可见性、计算传输时间、计算码相位、载波相位等参数、生成GPS L1 C/A所用的NAV电文格式、完成了通道信息的生成。至此,数据生成部分全部实现 ,并能产生数据供接收机使用。
2、GPS L1 C/A码信号特性分析
GPS L1 C/A采用的调制方式是BPSK,先将速率为50bps的电文与速度为1.023MHz的伪码相乘形成信息码,然后再用1575.42MHz的载波进行BPSK调制。其过程示意图如下:
开源夏令营《基于HackRF开发GPS信号仿真模拟器》终期汇报_第1张图片
其信号频谱以1575.42MHz为中心频点,主瓣带宽为2.046MHz。如下图:
开源夏令营《基于HackRF开发GPS信号仿真模拟器》终期汇报_第2张图片


C/A的产生是依据GPS_ICD_200F文件中所描述规则而生成的。其自相关特性与互相关特性如下图所示:
开源夏令营《基于HackRF开发GPS信号仿真模拟器》终期汇报_第3张图片


至此GPS L1 C/A的信号结构特性得到验证。

3、GNURadio中流图的实现
在Ubuntu 14.04下安装了GNURadio。从第一个程序dial_tone开始,验证了软件的安装正确性;搭建了接收WBFM信号的流图,用Hackrf做为信号源接收FM信号,然后解调得到广播,从而验证了Hackrf的正常工作;搭建了GPS_L1_CA信号的生成流程,其中的C/A码和电文是在Matlab中生成,通过octave读取最后保存到GNURadio中可用的数据格式的,对于每一颗星,电文都是以300bit的子帧为单位存储的,这样一方面不会导致文件过大,另一方面需要每隔6s就要重新读取一次电文文件。
===========================================================================================================================
比照着预案目标,我在以下这几方面存在着不足:
1、不依赖于Matlab完成信号的生成
如前所述,中频数据信号的产生也是在Matlab中完成的,并没有完成脱离。在Matlab环境下研究了一套结构体、全局变量数据交换、模块划分的定义,但在GNURadio或者说Python下并没有也如此定义出这样的结构。
2、通过HackRF发射出来的信号可以在手机上得到验证
通过HackRF发射的信号只能在GRC内部的FFT频谱分析仪上进行显示,其频谱符合预期。但是由于手机上的软件都是成熟的GPS接收技术,因此对于没有多颗电文并发的信号来讲,无法实现定位,因此也没有得到验证。
3、可以指定输入经度/纬度
目前项目引入的有关卫星运动状态的描述依赖于来自某观测站在某一天的星历文件(这样的星历文件可以从CDDIS下载),这就在时间和空间上限制了模拟器的扩展。如果时间范围大,则由星历计算出的卫星位置偏离真实位置会比较大;如果空间范围大,则会出现某些星出现没有星历的情况。因此没有实现指定纬度、经度信号的仿真(应该还包括高度信息)。
解决这个问题的方法为:研究星历的外推和拟合,使用根据初始值能够生成长时间、高精度的星历。这样就解决了在时间和空间上的限制。
4、提供一个简单的命令行参数实用程序,直接对接hackrf_transfer或grc生成的python程序
当前可以实现命令行启动GRC程序,并自由配置时间,但无法完整的运行程序。

你可能感兴趣的:(matlab,gnuradio,GPS信号模拟器,HackRF)