Files
lec-sdr/hw4.Rmd
2026-05-17 12:41:24 +02:00

106 lines
3.3 KiB
Plaintext

---
title: "HW4"
subtitle: "Software Defined Radio"
output: pdf_document
date: "`r Sys.Date()`"
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
# Assignment
Write an R script to calculate the output of the Klobuchar model.
Provide a GUI means for entering input data, and the name and the
path to navigation message file with coefficients of the Klobuchar
model. Load the coefficients of the Klobuchar model from the given
RINEX n file using a dedicated function in the R script. Provide a
feature to calculate the value of the ionospheric delay of the GPS
signal during 24 hours of a given day, in 1-minute increments, with
the given coefficients of the ionospheric model. Verify the correctness
of the algorithm implementation with a given numerical example. After
that, conduct a 24-hour simulation of the GPS ionospheric delay in 1-
minute increments for the position $\varphi_u$ = 45.33709°, $\lambda_u$ = 14.42496°, $E$
= 90°, $A$ = 180°. Store the estimated 24-hour simulation data set in a
dedicated file on the local disc.
The problem description, method, R script and implementation results
should be presented in a single HTML document, which should be
sent to the subject teacher's e-mail by May 21, 2026 at 23:59 CEST.
```{r select-file}
library(rstudioapi)
rinex_file <- rstudioapi::selectFile()
```
```{r read-file}
# Function to extract Klobuchar parameters from a RINEX navigation file
extract_klobuchar_parameters <- function(rinex_file) {
ion_alpha <- numeric(4)
ion_beta <- numeric(4)
# Read the file line by line
con <- file(rinex_file, "r")
while (length(line <- readLines(con, n = 1)) > 0) {
if (grepl("ION ALPHA", line, fixed = TRUE)) {
# Extract the 4 numeric values from the line
ion_alpha <- unlist(strsplit(line, "\\s+"))[2:5]
}
if (grepl("ION BETA", line, fixed = TRUE)) {
# Extract the 4 numeric values from the line
ion_beta <- unlist(strsplit(line, "\\s+"))[2:5]
}
# Stop reading if we've reached the end of the header (END OF HEADER)
if (grepl("END OF HEADER", line, fixed = TRUE)) {
break
}
}
close(con)
# Return the parameters as a named list
list(
ION_ALPHA = ion_alpha,
ION_BETA = ion_beta
)
}
klobuchar_params <- extract_klobuchar_parameters(rinex_file)
print(klobuchar_params)
```
```{r select-date}
# TODO
selected_date <- as.Date("2000-1-1")
```
## Klobuchar calculation
1. Calculate earth-centered angle
What are R_E and h?
$$ \psi = \pi/2 - E - \arcsin(\frac{R_E}{R_E + h} \cos(E)) $$
2. Compute the latitude of the IPP (ionospheric pierce point)
$$ \phi_I = \arcsin( sin \varphi_u \cos \psi + \cos\varphi_u \sin\psi \cos A )$$
3. Compute the longitude of the IPP
$$ \lambda_I= \lambda_u + \frac{\psi \sin A}{\cos \phi_I}$$
4. Find the geomagnetic latitude of the IPP
What is phi_P?
$$ \phi_m = \arcsin(\sin\phi_I \sin\phi_P + \cos\phi_I \cos\phi_P \cos(\lambda_I - \lambda_P)) $$
5. Find the local time at the IPP
$$ t = 43200 \lambda_I / \pi + t_{GPS} $$
$\lambda_I$ in radians, $t$ in seconds.
where $0 \leq t \leq 86 400$. Therefore:
If $t \geq 86 400$, subtract $86 400$. If $t < 0$, add $86 400$.
6. Compute the amplitude of ionospheric delay
$$ A_I = \sum_{n=0}^{3} \alpha_n(\phi_m/\pi)^n $$
If $A_I < 0$, then $A_I =0$.
```{r simulate}
# input constants
lat = 45.33709 # phi
lon = 14.42496 # lambda
E = 90
A = 180
```