LimeSDR实验教程(9) GPS接收 (portapack发射的信号、实际卫星信号)

2023-10-07 14:20

本文主要是介绍LimeSDR实验教程(9) GPS接收 (portapack发射的信号、实际卫星信号),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LimeSDR接收GPS其实我去年试过,但是没成功锁定。所以停滞了一段时间。最近用了portapack,可以手持式发射gps信号,这样我有了可控的信号源,确保信号强度没问题,并且实验环境搭建也方便了好多,所以这几天我打算重新测试gps接收功能,搞定以后再到室外收实际信号。

首先我们来实现portapack的gps发射。

参考这个视频:

https://www.bilibili.com/video/av76517684

要注意portapack必须要购买带高精度晶振的版本,另外固件要刷gridRF版本,用官方的或者havoc的都不行。

固件在这下载:

链接: https://pan.baidu.com/s/16flB0h_nBvkfMGmqYMv95w 提取码: iccf 

刷完固件要上github:

https://github.com/furrtek/portapack-havoc

到这里把sdcard目录里的东西复制到一张tf卡里。

如果网速不够可以从下面地址下载:

链接: https://pan.baidu.com/s/1wnjvZTCjrqkQyzI147bSFQ 提取码: avgp

然后用之前发射gps文章里提过的gps-sdr-sim里的命令

./gps-sdr-sim -e brdc3540.14n -l 40,110,100 -b 8

这个命令会生成生成gpssim.bin文件。

接下来是关键部分:

首先把你生成的gpssim.bin文件改名为BBD_0003.C8,另外再新建一个BBD_0003.TXT,内容是:

sample_rate=2600000

center_frequency=1575420000

然后把BBD_0003.C8和BBD_0003.TXT这两个文件一起复制到sd卡根目录下,再把sd卡放到portapack里。

这样,你在portapack里就能用这个文件了,步骤如下。

这样portapack就能作为gps信号源了。

接下来说电脑如何安装gnss-sdr。ubuntu 16.04里可以apt安装0.0.6版本,但是我的ubuntu里现在gnuradio是我自己编译的3.7.13了,gnss-sdr会自动让apt装3.7.9的老版本gnuradio,有冲突,所以我自己下载了gnss-sdr源代码安装。我也试过了好多个版本,最新的0.0.11版本,它会嫌弃ubuntu 16.04里的2.6版protobuf太老,要求下载protobuf,是从code.google.com里下载的,国内被墙,而且我自己按照他们的步骤编译安装的3.9版本也没找到。然后我倒退了几个版本,发现0.0.9版本,编译起来还算比较容易。下面是步骤,由于我试过几个版本,安装包有重复安装的情况,所以下面的步骤不一定完全正确,要以后找干净的电脑试了才准确知道。

有几个包挺重要的,如果不apt装他们,编译gnss-sdr的时候会自动上网下载它们的源代码,那就非常耗时了而且可能失败,所以推荐apt装好:

libmatio-dev   libpugixml-dev  libgtest-dev

另外,libblas-dev liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev libhdf5-dev  libgnutls-openssl-dev这些包我应该没去装,我是按照gnss-sdr的编译教程里下载源代码装的,但是apt装这些包有可能就不用编译那些代码了,以后可以试试。

下面是gnss-sdr里编译这些依赖库的步骤,我都做过了,但是我觉得可以用上面那些apt包代替,也许你可以不装下面的这些东西。

 

Install Armadillo, a C++ linear algebra library:

$ sudo apt-get install libblas-dev liblapack-dev       # For Debian/Ubuntu/LinuxMint
$ sudo yum install lapack-devel blas-devel             # For Fedora/CentOS/RHEL
$ sudo zypper install lapack-devel blas-devel          # For OpenSUSE
$ sudo pacman -S blas lapack                           # For Arch Linux
$ wget http://sourceforge.net/projects/arma/files/armadillo-9.600.4.tar.xz
$ tar xvfz armadillo-9.600.4.tar.xz
$ cd armadillo-9.600.4
$ cmake .
$ make
$ sudo make install

The full stop separated from cmake by a space is important. CMake will figure out what other libraries are currently installed and will modify Armadillo's configuration correspondingly. CMake will also generate a run-time armadillo library, which is a combined alias for all the relevant libraries present on your system (eg. BLAS, LAPACK and ATLAS).

Install Gflags, a commandline flags processing module for C++:

$ wget https://github.com/gflags/gflags/archive/v2.2.2.tar.gz
$ tar xvfz v2.2.2.tar.gz
$ cd gflags-2.2.2
$ cmake -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -DBUILD_gflags_nothreads_LIB=OFF .
$ make
$ sudo make install
$ sudo ldconfig

Install Glog, a library that implements application-level logging:

$ wget https://github.com/google/glog/archive/v0.4.0.tar.gz
$ tar xvfz v0.4.0.tar.gz
$ cd glog-0.4.0
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig

Build the Google C++ Testing Framework, also known as Google Test:

$ wget https://github.com/google/googletest/archive/release-1.8.1.zip
$ unzip release-1.8.1.zip
$ cd googletest-release-1.8.1
$ cmake -DINSTALL_GTEST=OFF -DBUILD_GMOCK=OFF .
$ make

Please DO NOT install Google Test (do not type sudo make install). Every user needs to compile his tests using the same compiler flags used to compile the installed Google Test libraries; otherwise he may run into undefined behaviors (i.e. the tests can behave strangely and may even crash for no obvious reasons). The reason is that C++ has this thing called the One-Definition Rule: if two C++ source files contain different definitions of the same class/function/variable, and you link them together, you violate the rule. The linker may or may not catch the error (in many cases it is not required by the C++ standard to catch the violation). If it does not, you get strange run-time behaviors that are unexpected and hard to debug. If you compile Google Test and your test code using different compiler flags, they may see different definitions of the same class/function/variable (e.g. due to the use of #if in Google Test). Therefore, for your sanity, we recommend to avoid installing pre-compiled Google Test libraries. Instead, each project should compile Google Test itself such that it can be sure that the same flags are used for both Google Test and the tests. The building system of GNSS-SDR does the compilation and linking of googletest to its own tests; it is only required that you tell the system where the googletest folder that you downloaded resides. Just add to your $HOME/.bashrc file the following line:

export GTEST_DIR=/home/username/googletest-release-1.8.1/googletest

changing /home/username/googletest-release-1.8.1/googletest by the actual directory where you built googletest.

Install the GnuTLS or OpenSSL libraries:

$ sudo apt-get install libgnutls-openssl-dev    # For Debian/Ubuntu/LinuxMint
$ sudo yum install openssl-devel                # For Fedora/CentOS/RHEL
$ sudo zypper install openssl-devel             # For OpenSUSE
$ sudo pacman -S openssl                        # For Arch Linux

In case the GnuTLS library with openssl extensions package is not available in your GNU/Linux distribution, GNSS-SDR can also work well with OpenSSL.

Install Protocol Buffers, a portable mechanism for serialization of structured data:

GNSS-SDR requires Protocol Buffers v3.0.0 or later. If the packages that come with your distribution are older than that (e.g., Ubuntu 16.04 Xenial and Debian 8 Jessie came with older versions), then you will need to install it manually. First, install the dependencies:

$ sudo apt-get install autoconf automake libtool curl make g++ unzip

and then: 

$ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.9.0/protobuf-cpp-3.9.0.tar.gz
$ tar xvfz protobuf-cpp-3.9.0.tar.gz
$ cd protobuf-3.9.0
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig

前期准备做完了可以编译安装gnss-sdr了。

https://github.com/gnss-sdr/gnss-sdr

你可以直接到gnss-sdr的release里找到0.0.9版本。

$ cd gnss-sdr
$ mkdir build
$ cd build
$ cmake -DENABLE_OSMOSDR=ON ..
$ make
$ sudo make install

这样gnss-sdr就装好了,你还需要一个好用的conf文件,这个也很重要。

我用的是这个,对于limesdr-mini,天线用LNAW,如果是limesdr-usb,我用的是LNAL。

[GNSS-SDR];######### GLOBAL OPTIONS ##################
GNSS-SDR.internal_fs_hz=2000000;######### SIGNAL_SOURCE CONFIG ############
SignalSource.implementation=Osmosdr_Signal_Source
SignalSource.item_type=gr_complex
SignalSource.sampling_frequency=2000000
;# LimeSDR RX1 antennas: NONE,LNAH,LNAL,LNAW
SignalSource.antenna=LNAW
SignalSource.freq=1575420000
SignalSource.gain=40
SignalSource.rf_gain=40
SignalSource.if_gain=30
SignalSource.AGC_enabled=false
SignalSource.samples=0
SignalSource.repeat=false
;# Next line enables the LimeSDR
SignalSource.osmosdr_args=driver=lime,soapy=0
SignalSource.enable_throttle_control=false
SignalSource.dump=false
SignalSource.dump_filename=./LimeSDR_signal_source.dat;######### SIGNAL_CONDITIONER CONFIG ############
SignalConditioner.implementation=Signal_Conditioner;######### DATA_TYPE_ADAPTER CONFIG ############
DataTypeAdapter.implementation=Pass_Through;######### INPUT_FILTER CONFIG ############
InputFilter.implementation=Freq_Xlating_Fir_Filter
InputFilter.decimation_factor=1
InputFilter.input_item_type=gr_complex
InputFilter.output_item_type=gr_complex
InputFilter.taps_item_type=float
InputFilter.number_of_taps=5
InputFilter.number_of_bands=2
InputFilter.band1_begin=0.0
InputFilter.band1_end=0.85
InputFilter.band2_begin=0.9
InputFilter.band2_end=1.0
InputFilter.ampl1_begin=1.0
InputFilter.ampl1_end=1.0
InputFilter.ampl2_begin=0.0
InputFilter.ampl2_end=0.0
InputFilter.band1_error=1.0
InputFilter.band2_error=1.0
InputFilter.filter_type=bandpass
InputFilter.grid_density=16
InputFilter.dump=false
InputFilter.dump_filename=…/data/input_filter.dat;######### RESAMPLER CONFIG ############
Resampler.implementation=Pass_Through;######### CHANNELS GLOBAL CONFIG ############
Channels_1C.count=8
Channels.in_acquisition=1
Channel.signal=1C;######### ACQUISITION GLOBAL CONFIG ############
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
Acquisition_1C.item_type=gr_complex
Acquisition_1C.if=0
Acquisition_1C.sampled_ms=1
Acquisition_1C.threshold=0.015
Acquisition_1C.doppler_max=10000
Acquisition_1C.doppler_min=-10000
Acquisition_1C.doppler_step=500
Acquisition_1C.max_dwells=15
Acquisition_1C.dump=false
Acquisition_1C.dump_filename=./acq_dump.dat;######### TRACKING GLOBAL CONFIG ############
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
Tracking_1C.item_type=gr_complex
Tracking_1C.if=0
Tracking_1C.pll_bw_hz=30.0;
Tracking_1C.dll_bw_hz=4.0;
Tracking_1C.order=3;
Tracking_1C.early_late_space_chips=0.5;
Tracking_1C.dump=false
Tracking_1C.dump_filename=./tracking_ch_;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
TelemetryDecoder_1C.decimation_factor=1;;######### OBSERVABLES CONFIG ############
Observables.implementation=GPS_L1_CA_Observables
Observables.dump=true
Observables.dump_filename=./observables.dat;######### PVT CONFIG ############
PVT.implementation=GPS_L1_CA_PVT
PVT.flag_averaging=true
PVT.averaging_depth=5
PVT.output_rate_ms=100
PVT.display_rate_ms=500
PVT.flag_nmea_tty_port=false;
PVT.nmea_dump_devname=/dev/pts/4
PVT.nmea_dump_filename=./nmea_pvt.nmea
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
PVT.dump=true
PVT.dump_filename=./PVT

有了这个文件以后,在这个文件目录下,执行:

gnss-sdr --config_file=./limesdr.conf

参考limesdr接收gps(portapack发射):

https://www.bilibili.com/video/av77174591

如果你要接收室外真实gps信号,还需要一个有源天线和电压偏置就行。

参考:https://www.bilibili.com/video/av77179389

portapack镜像:


 

这篇关于LimeSDR实验教程(9) GPS接收 (portapack发射的信号、实际卫星信号)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/158333

相关文章

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

全屋WiFi 7无死角! 华硕 RP-BE58无线信号放大器体验测评

《全屋WiFi7无死角!华硕RP-BE58无线信号放大器体验测评》家里网络总是有很多死角没有网,我决定入手一台支持Mesh组网的WiFi7路由系统以彻底解决网络覆盖问题,最终选择了一款功能非常... 自2023年WiFi 7技术标准(IEEE 802.11be)正式落地以来,这项第七代无线网络技术就以超高速

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser

MySQL 安装配置超完整教程

《MySQL安装配置超完整教程》MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典MySQLAB公司开发,目前属于Oracle公司旗下产品,:本文主要介绍MySQL安装配置... 目录一、mysql 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL5.1

MQTT SpringBoot整合实战教程

《MQTTSpringBoot整合实战教程》:本文主要介绍MQTTSpringBoot整合实战教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录MQTT-SpringBoot创建简单 SpringBoot 项目导入必须依赖增加MQTT相关配置编写

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查