Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions example/settings/sample_satellite/components/gnss_receiver.ini
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,17 @@ antenna_model = SIMPLE
// Antenna half width [deg]
antenna_half_width_deg = 60

// Klobuchar coefficients for ionospheric delay correction
klobuchar_alpha(0) = 0.2235E-07
klobuchar_alpha(1) = 0.2235E-07
klobuchar_alpha(2) = -0.1192E-06
klobuchar_alpha(3) = -0.1192E-06
klobuchar_beta(0) = 0.1270E+06
klobuchar_beta(1) = 0.8192E+05
klobuchar_beta(2) = -0.1966E+06
klobuchar_beta(3) = 0.0000E+00

// Random noise for pseudorange observation
// Constant bias noise of receiver clock bias[s]
constant_bias_receiver_clock_s = 1.0E-3

Expand Down
51 changes: 25 additions & 26 deletions scripts/Plot/plot_gnss_receiver_pseudorange.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,35 +49,34 @@
# Read S2E CSV
time = read_scalar_from_csv(read_file_name, 'elapsed_time[s]')

plt.figure(0)
for gps_idx in range(32):
gps_str = 'GPS' + str(gps_idx)
pseudorange = read_scalar_from_csv(read_file_name, gps_str + '_pseudorange[m]')
plt.scatter(time[0][1:], pseudorange[0][1:], marker=".", label=gps_str)
# Plotting function for pseudoranges
def plot_pseudorange(fig_idx, phase_suffix, title):
plotted = False
plt.figure(fig_idx)
for gps_idx in range(32):
gps_str = f'GPS{gps_idx}'
column_name = f"{gps_str}_pseudorange_{phase_suffix}[m]"
try:
pseudorange = read_scalar_from_csv(read_file_name, column_name)
plt.scatter(time[0][1:], pseudorange[0][1:], marker=".", label=gps_str)
plotted = True
except:
continue
if plotted:
plt.title(title)
plt.xlabel("Time [s]")
plt.ylabel(f"Pseudorange {phase_suffix} [m]")
plt.legend(fontsize=7, loc="upper right")
else:
plt.close(fig_idx)

plt.title("GPS Psuedorange")
plt.xlabel("Time [s]")
plt.ylabel("Psuedorange [m]")
plt.legend(fontsize=7, loc="upper right")


plt.figure(1)
spacecraft_position_ecef_m = read_3d_vector_from_csv(read_file_name, 'spacecraft_position_ecef', 'm')[:, :-1]
for gps_idx in range(32):
gps_str = 'GPS' + str(gps_idx)
pseudorange = read_scalar_from_csv(read_file_name, gps_str + '_pseudorange[m]')[:, 1:]
gps_position = read_3d_vector_from_csv(read_file_name, gps_str + '_position_ecef', 'm')[:, 1:]
geometric_range = np.linalg.norm(gps_position - spacecraft_position_ecef_m, axis=0)
pseudorange_error = pseudorange - geometric_range
plt.scatter(time[0][:-1], pseudorange_error, marker=".", label=gps_str)

plt.title("GPS Pseudorange Error")
plt.xlabel("Time [s]")
plt.ylabel("Pseudorange Error [m]")
plt.legend(fontsize=7, loc="upper right")
# Plot each pseudorange if data exists
plot_pseudorange(0, 1, "GPS Pseudorange (L1)")
plot_pseudorange(1, 2, "GPS Pseudorange (L2)")
plot_pseudorange(2, 5, "GPS Pseudorange (L5)")

# Data save
if args.no_gui:
plt.savefig(read_file_tag + "_gnss_receiver_pseudorange.png") # save last figure only
else:
plt.show()
plt.show()
Loading