# `Sidereon.GNSS.RTK.DualFrequencyRinexArc`
[🔗](https://github.com/neilberkman/sidereon-ex/blob/main/lib/sidereon/gnss/rtk.ex#L143)

A dual-frequency RTK arc built from paired RINEX observation handles and
an SP3 ephemeris handle.

`epochs/1` exposes the exact core records, including ordered paired
observations and Julian/sort metadata. `baseline_epochs/1` adapts those
records to the existing dual-frequency RTK preparation helpers.

# `epoch`

```elixir
@type epoch() :: %{
  jd_whole: float(),
  jd_fraction: float(),
  epoch_sort_key: String.t() | nil,
  gap_time_s: float() | nil,
  observations: [satellite_observation()],
  satellite_positions_m: %{required(String.t()) =&gt; {float(), float(), float()}},
  base_satellite_positions_m: %{
    required(String.t()) =&gt; {float(), float(), float()}
  },
  rover_satellite_positions_m: %{
    required(String.t()) =&gt; {float(), float(), float()}
  },
  velocity_mps: {float(), float(), float()} | nil,
  prediction_time_s: float() | nil
}
```

Core-generated dual-frequency RTK epoch.

# `satellite_observation`

```elixir
@type satellite_observation() :: %{
  satellite_id: String.t(),
  base: map(),
  rover: map()
}
```

One ordered dual-frequency observation pair for a satellite.

# `t`

```elixir
@type t() :: %Sidereon.GNSS.RTK.DualFrequencyRinexArc{handle: reference()}
```

Dual-frequency RINEX RTK arc resource handle.

# `baseline_epochs`

```elixir
@spec baseline_epochs(t()) :: [map()]
```

Return dual-frequency epochs in the shape accepted by RTK helpers.

# `epoch_count`

```elixir
@spec epoch_count(t()) :: non_neg_integer()
```

Return the retained epoch count.

# `epochs`

```elixir
@spec epochs(t()) :: [epoch()]
```

Return exact core-generated dual-frequency epochs in engine order.

# `skipped_epoch_count`

```elixir
@spec skipped_epoch_count(t()) :: non_neg_integer()
```

Return the base-epoch count skipped by the core builder.

# `to_epochs`

```elixir
@spec to_epochs(t()) :: [epoch()]
```

Alias for `epochs/1`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
