Skip to content

Commit 96f26d4

Browse files
Zhicheng WangZhicheng Wang
authored andcommitted
Initial commit
1 parent 464951e commit 96f26d4

File tree

8 files changed

+3911
-0
lines changed

8 files changed

+3911
-0
lines changed

gnuradio_project/gps_rx.grc

Lines changed: 1671 additions & 0 deletions
Large diffs are not rendered by default.

gnuradio_project/gps_rx.py

Lines changed: 414 additions & 0 deletions
Large diffs are not rendered by default.

gnuradio_project/gps_rx_final.py

Lines changed: 414 additions & 0 deletions
Large diffs are not rendered by default.

gnuradio_project/gps_rx_single_ant.grc

Lines changed: 1038 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 234 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
4+
#
5+
# SPDX-License-Identifier: GPL-3.0
6+
#
7+
# GNU Radio Python Flow Graph
8+
# Title: gps_rx_single_ant
9+
# Author: rango
10+
# GNU Radio version: v3.9.0.0-188-g8a33a88b
11+
12+
from distutils.version import StrictVersion
13+
14+
if __name__ == '__main__':
15+
import ctypes
16+
import sys
17+
if sys.platform.startswith('linux'):
18+
try:
19+
x11 = ctypes.cdll.LoadLibrary('libX11.so')
20+
x11.XInitThreads()
21+
except:
22+
print("Warning: failed to XInitThreads()")
23+
24+
from PyQt5 import Qt
25+
from gnuradio import qtgui
26+
from gnuradio.filter import firdes
27+
import sip
28+
from gnuradio import blocks
29+
from gnuradio import gr
30+
from gnuradio.fft import window
31+
import sys
32+
import signal
33+
from argparse import ArgumentParser
34+
from gnuradio.eng_arg import eng_float, intx
35+
from gnuradio import eng_notation
36+
from gnuradio import uhd
37+
import time
38+
39+
40+
41+
from gnuradio import qtgui
42+
43+
class gps_rx_single_ant(gr.top_block, Qt.QWidget):
44+
45+
def __init__(self):
46+
gr.top_block.__init__(self, "gps_rx_single_ant", catch_exceptions=True)
47+
Qt.QWidget.__init__(self)
48+
self.setWindowTitle("gps_rx_single_ant")
49+
qtgui.util.check_set_qss()
50+
try:
51+
self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
52+
except:
53+
pass
54+
self.top_scroll_layout = Qt.QVBoxLayout()
55+
self.setLayout(self.top_scroll_layout)
56+
self.top_scroll = Qt.QScrollArea()
57+
self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
58+
self.top_scroll_layout.addWidget(self.top_scroll)
59+
self.top_scroll.setWidgetResizable(True)
60+
self.top_widget = Qt.QWidget()
61+
self.top_scroll.setWidget(self.top_widget)
62+
self.top_layout = Qt.QVBoxLayout(self.top_widget)
63+
self.top_grid_layout = Qt.QGridLayout()
64+
self.top_layout.addLayout(self.top_grid_layout)
65+
66+
self.settings = Qt.QSettings("GNU Radio", "gps_rx_single_ant")
67+
68+
try:
69+
if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
70+
self.restoreGeometry(self.settings.value("geometry").toByteArray())
71+
else:
72+
self.restoreGeometry(self.settings.value("geometry"))
73+
except:
74+
pass
75+
76+
##################################################
77+
# Variables
78+
##################################################
79+
self.samp_rate = samp_rate = 4e6
80+
self.gain = gain = 58
81+
self.freq = freq = 1.57542e9
82+
self.ant0 = ant0 = "/home/ssd2/gnss-sdr/fsc_data/data/ant0_ .dat"
83+
84+
##################################################
85+
# Blocks
86+
##################################################
87+
self.uhd_usrp_source_0 = uhd.usrp_source(
88+
",".join(("", '')),
89+
uhd.stream_args(
90+
cpu_format="fc32",
91+
args='',
92+
channels=list(range(0,1)),
93+
),
94+
)
95+
self.uhd_usrp_source_0.set_clock_source('external', 0)
96+
self.uhd_usrp_source_0.set_time_source('external', 0)
97+
self.uhd_usrp_source_0.set_subdev_spec('A:0', 0)
98+
self.uhd_usrp_source_0.set_samp_rate(samp_rate)
99+
# No synchronization enforced.
100+
101+
self.uhd_usrp_source_0.set_center_freq(freq, 0)
102+
self.uhd_usrp_source_0.set_antenna("RX1", 0)
103+
self.uhd_usrp_source_0.set_gain(gain, 0)
104+
self.uhd_usrp_source_0.set_auto_dc_offset(True, 0)
105+
self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c(
106+
1024, #size
107+
window.WIN_BLACKMAN_hARRIS, #wintype
108+
0, #fc
109+
samp_rate, #bw
110+
"", #name
111+
1,
112+
None # parent
113+
)
114+
self.qtgui_freq_sink_x_0.set_update_time(0.10)
115+
self.qtgui_freq_sink_x_0.set_y_axis(-140, 10)
116+
self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB')
117+
self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "")
118+
self.qtgui_freq_sink_x_0.enable_autoscale(False)
119+
self.qtgui_freq_sink_x_0.enable_grid(False)
120+
self.qtgui_freq_sink_x_0.set_fft_average(1.0)
121+
self.qtgui_freq_sink_x_0.enable_axis_labels(True)
122+
self.qtgui_freq_sink_x_0.enable_control_panel(False)
123+
self.qtgui_freq_sink_x_0.set_fft_window_normalized(False)
124+
125+
126+
127+
labels = ['', '', '', '', '',
128+
'', '', '', '', '']
129+
widths = [1, 1, 1, 1, 1,
130+
1, 1, 1, 1, 1]
131+
colors = ["blue", "red", "green", "black", "cyan",
132+
"magenta", "yellow", "dark red", "dark green", "dark blue"]
133+
alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
134+
1.0, 1.0, 1.0, 1.0, 1.0]
135+
136+
for i in range(1):
137+
if len(labels[i]) == 0:
138+
self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i))
139+
else:
140+
self.qtgui_freq_sink_x_0.set_line_label(i, labels[i])
141+
self.qtgui_freq_sink_x_0.set_line_width(i, widths[i])
142+
self.qtgui_freq_sink_x_0.set_line_color(i, colors[i])
143+
self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i])
144+
145+
self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget)
146+
self.top_layout.addWidget(self._qtgui_freq_sink_x_0_win)
147+
self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_gr_complex*1, ant0, True)
148+
self.blocks_file_sink_0.set_unbuffered(False)
149+
150+
151+
152+
##################################################
153+
# Connections
154+
##################################################
155+
self.connect((self.uhd_usrp_source_0, 0), (self.blocks_file_sink_0, 0))
156+
self.connect((self.uhd_usrp_source_0, 0), (self.qtgui_freq_sink_x_0, 0))
157+
158+
159+
def closeEvent(self, event):
160+
self.settings = Qt.QSettings("GNU Radio", "gps_rx_single_ant")
161+
self.settings.setValue("geometry", self.saveGeometry())
162+
self.stop()
163+
self.wait()
164+
165+
event.accept()
166+
167+
def get_samp_rate(self):
168+
return self.samp_rate
169+
170+
def set_samp_rate(self, samp_rate):
171+
self.samp_rate = samp_rate
172+
self.qtgui_freq_sink_x_0.set_frequency_range(0, self.samp_rate)
173+
self.uhd_usrp_source_0.set_samp_rate(self.samp_rate)
174+
175+
def get_gain(self):
176+
return self.gain
177+
178+
def set_gain(self, gain):
179+
self.gain = gain
180+
self.uhd_usrp_source_0.set_gain(self.gain, 0)
181+
self.uhd_usrp_source_0.set_gain(self.gain, 1)
182+
self.uhd_usrp_source_0.set_gain(self.gain, 2)
183+
self.uhd_usrp_source_0.set_gain(self.gain, 3)
184+
185+
def get_freq(self):
186+
return self.freq
187+
188+
def set_freq(self, freq):
189+
self.freq = freq
190+
self.uhd_usrp_source_0.set_center_freq(self.freq, 0)
191+
self.uhd_usrp_source_0.set_center_freq(self.freq, 1)
192+
self.uhd_usrp_source_0.set_center_freq(self.freq, 2)
193+
self.uhd_usrp_source_0.set_center_freq(self.freq, 3)
194+
195+
def get_ant0(self):
196+
return self.ant0
197+
198+
def set_ant0(self, ant0):
199+
self.ant0 = ant0
200+
self.blocks_file_sink_0.open(self.ant0)
201+
202+
203+
204+
205+
def main(top_block_cls=gps_rx_single_ant, options=None):
206+
207+
if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
208+
style = gr.prefs().get_string('qtgui', 'style', 'raster')
209+
Qt.QApplication.setGraphicsSystem(style)
210+
qapp = Qt.QApplication(sys.argv)
211+
212+
tb = top_block_cls()
213+
214+
tb.start()
215+
216+
tb.show()
217+
218+
def sig_handler(sig=None, frame=None):
219+
tb.stop()
220+
tb.wait()
221+
222+
Qt.QApplication.quit()
223+
224+
signal.signal(signal.SIGINT, sig_handler)
225+
signal.signal(signal.SIGTERM, sig_handler)
226+
227+
timer = Qt.QTimer()
228+
timer.start(500)
229+
timer.timeout.connect(lambda: None)
230+
231+
qapp.exec_()
232+
233+
if __name__ == '__main__':
234+
main()

gnuradio_project/readme.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
启动方法是:
2+
conda deactivate 先退出conda环境
3+
然后运行这个.py脚本
4+
5+
6+
7+
8+
9+
#############################################################
10+
因为每次运行.grc(GNUradio GUI)的话都会重新生成.py
11+
所以运行我这个修改好的.py就行了,不去直接运行.grc
12+
import datetime
13+
14+
self.ant3 = ant3 = "/home/ssd2/gnss-sdr/fsc_data/data/" + datetime.datetime.now().strftime("%Y%m%d_%H%M%S%f") + "_ant3" + ".dat"
15+
self.ant2 = ant2 = "/home/ssd2/gnss-sdr/fsc_data/data/" + datetime.datetime.now().strftime("%Y%m%d_%H%M%S%f") + "_ant2" + ".dat"
16+
self.ant1 = ant1 = "/home/ssd2/gnss-sdr/fsc_data/data/" + datetime.datetime.now().strftime("%Y%m%d_%H%M%S%f") + "_ant1" + ".dat"
17+
self.ant0 = ant0 = "/home/ssd2/gnss-sdr/fsc_data/data/" + datetime.datetime.now().strftime("%Y%m%d_%H%M%S%f") + "_ant0" + ".dat"

post_processing.conf

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
[GNSS-SDR]
2+
3+
;######### GLOBAL OPTIONS ##################
4+
GNSS-SDR.internal_fs_sps=4000000
5+
6+
;######### SIGNAL_SOURCE CONFIG ############
7+
SignalSource.implementation=File_Signal_Source
8+
SignalSource.filename=/home/ssd2/gnss-sdr/fsc_data/data/20241227_104134121342_ant3.dat
9+
SignalSource.item_type=gr_complex
10+
SignalSource.sampling_frequency=4000000
11+
SignalSource.samples=0
12+
13+
;######### SIGNAL_CONDITIONER CONFIG ############
14+
SignalConditioner.implementation=Signal_Conditioner
15+
InputFilter.implementation=Pass_Through
16+
InputFilter.item_type=gr_complex
17+
Resampler.implementation=Pass_Through
18+
19+
20+
;######### CHANNELS GLOBAL CONFIG ############
21+
Channels_1C.count=8
22+
Channels.in_acquisition=8
23+
Channel.signal=1C
24+
25+
;######### ACQUISITION GLOBAL CONFIG ############
26+
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
27+
Acquisition_1C.item_type=gr_complex
28+
Acquisition_1C.pfa=0.01
29+
Acquisition_1C.doppler_max=10000
30+
Acquisition_1C.doppler_step=250
31+
Acquisition_1C.blocking=true
32+
33+
;######### TRACKING GLOBAL CONFIG ############
34+
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
35+
Tracking_1C.item_type=gr_complex
36+
Tracking_1C.pll_bw_hz=40.0;
37+
Tracking_1C.dll_bw_hz=4.0;
38+
39+
;######### TELEMETRY DECODER GPS CONFIG ############
40+
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
41+
42+
;######### OBSERVABLES CONFIG ############
43+
Observables.implementation=Hybrid_Observables
44+
45+
;######### PVT CONFIG ############
46+
PVT.implementation=RTKLIB_PVT
47+
PVT.positioning_mode=Single
48+
PVT.output_rate_ms=100
49+
PVT.display_rate_ms=500
50+
PVT.iono_model=Broadcast
51+
PVT.trop_model=Saastamoinen
52+
PVT.flag_rtcm_server=true
53+
PVT.flag_rtcm_tty_port=false
54+
PVT.rtcm_dump_devname=/dev/pts/1
55+
PVT.rtcm_tcp_port=2101
56+
PVT.rtcm_MT1019_rate_ms=5000
57+
PVT.rtcm_MT1077_rate_ms=1000
58+
PVT.rinex_version=3

real_time.conf

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
[GNSS-SDR]
2+
3+
;######### GLOBAL OPTIONS ##################
4+
GNSS-SDR.internal_fs_sps=4000000
5+
6+
;######### SIGNAL_SOURCE CONFIG ############
7+
SignalSource.implementation=UHD_Signal_Source
8+
SignalSource.item_type=gr_complex
9+
SignalSource.sampling_frequency=4000000 ; Sampling frequency in [Hz]
10+
SignalSource.freq=1575420000 ; RF front-end center frequency in [Hz]
11+
SignalSource.gain=58 ; Front-end gain in dB
12+
SignalSource.subdevice=A:0 ; UHD subdevice specification (for USRP1 use A:0 or B:0, for USRP B210 use A:0)
13+
SignalSource.clock=external ;Use GPSDO as the external clock: 10MHz -> REF IN
14+
SignalSource.time=external; Use GPSDO as the external time: 1PPS -> PPS IN
15+
16+
;######### SIGNAL_CONDITIONER CONFIG ############
17+
SignalConditioner.implementation=Signal_Conditioner
18+
# DataTypeAdapter.implementation=Ishort_To_Complex
19+
InputFilter.implementation=Pass_Through
20+
InputFilter.item_type=gr_complex
21+
Resampler.implementation=Pass_Through
22+
# Resampler.implementation=Direct_Resampler
23+
# Resampler.sample_freq_in=4000000
24+
# Resampler.sample_freq_out=2000000
25+
# Resampler.item_type=gr_complex
26+
27+
;######### CHANNELS GLOBAL CONFIG ############
28+
Channels_1C.count=8
29+
Channels.in_acquisition=8
30+
Channel.signal=1C
31+
32+
;######### ACQUISITION GLOBAL CONFIG ############
33+
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
34+
Acquisition_1C.item_type=gr_complex
35+
Acquisition_1C.pfa=0.01
36+
Acquisition_1C.doppler_max=10000
37+
Acquisition_1C.doppler_step=250
38+
Acquisition_1C.blocking=true
39+
40+
;######### TRACKING GLOBAL CONFIG ############
41+
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
42+
Tracking_1C.item_type=gr_complex
43+
Tracking_1C.pll_bw_hz=40.0;
44+
Tracking_1C.dll_bw_hz=4.0;
45+
46+
;######### TELEMETRY DECODER GPS CONFIG ############
47+
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
48+
49+
;######### OBSERVABLES CONFIG ############
50+
Observables.implementation=Hybrid_Observables
51+
52+
;######### PVT CONFIG ############
53+
PVT.implementation=RTKLIB_PVT
54+
PVT.positioning_mode=Single
55+
PVT.output_rate_ms=100
56+
PVT.display_rate_ms=500
57+
PVT.iono_model=Broadcast
58+
PVT.trop_model=Saastamoinen
59+
PVT.flag_rtcm_server=true
60+
PVT.flag_rtcm_tty_port=false
61+
PVT.rtcm_dump_devname=/dev/pts/1
62+
PVT.rtcm_tcp_port=2101
63+
PVT.rtcm_MT1019_rate_ms=5000
64+
PVT.rtcm_MT1077_rate_ms=1000
65+
PVT.rinex_version=3

0 commit comments

Comments
 (0)