Signal Computation Foundations¶
bijux-gnss-signal owns reusable facts and computations between shared GNSS
types and receiver execution: signal catalogs, spreading codes, raw-sample
meaning, replicas, timing, spectra, correlation, and tracking-loop primitives.
Its behavior must remain meaningful without one receiver session, repository
layout, navigation estimator, or command workflow.
Decide By Physical Ownership¶
flowchart TD
behavior["candidate behavior"]
physical{"defines signal, code,<br/>sample, phase, or spectrum?"}
reusable{"same meaning outside<br/>one receiver session?"}
policy{"selects work, interprets<br/>history, or emits run evidence?"}
signal["signal package"]
receiver["receiver package"]
owner["stronger domain owner"]
behavior --> physical
physical -- yes --> reusable
physical -- no --> owner
reusable -- no --> receiver
reusable -- yes --> policy
policy -- no --> signal
policy -- yes --> receiver
State does not by itself make a component receiver-owned. An oscillator may preserve phase and a filter may preserve delay-line state while remaining a reusable signal primitive. Ownership moves to receiver when behavior schedules channels, combines session history, declares lifecycle state, or commits operational evidence.
Start From The Signal Question¶
| question | contract |
|---|---|
| Which carrier, code, component role, wavelength, or acquisition default applies? | Signal model assumptions |
| How is a primary, secondary, data, pilot, or multiplexed code generated? | Code contracts |
| Which timing, replica, spectrum, correlation, or loop primitive applies? | DSP contracts |
| What do encoded samples and capture metadata mean? | Raw IQ and sample contracts |
| Which signal pair is compatible for an observation operation? | Validation contracts |
| Which polymorphic source, sink, or correlator seam is stable? | Trait contracts |
| Does the behavior belong in this package? | Ownership boundary |
Preserve Continuity¶
Signal computations often process blocks while modeling continuous physical time. The contract must expose enough origin and state to make chunking an implementation choice rather than a change in meaning.
flowchart LR
origin["absolute sample or<br/>time origin"]
state["phase, rate, and<br/>code state"]
first["sample block"]
second["next sample block"]
joined["continuous result"]
origin --> state --> first --> second
first --> joined
second --> joined
A continuous interval generated in adjacent blocks should agree with the same interval generated as one block within the documented numerical tolerance. That requires explicit sample rate, phase origin, wrapping domain, code rate, carrier frequency, and units.
Refuse Ambiguous Meaning¶
- A signal identity must not be silently remapped to another carrier, component, code family, or GLONASS channel.
- Raw bytes without sample format, quantization, sampling rate, and intermediate-frequency context are not a complete signal input.
- Generic helpers must not erase data/pilot roles, secondary-code state, or constellation-specific modulation.
- A DSP metric does not declare receiver lock; it provides evidence the receiver may use under its own lifecycle policy.
- Signal compatibility does not establish navigation validity.
Use the package overview for the concise role, GPS L1 coarse-acquisition reference for a worked signal family, scope and non-goals for explicit refusals, and change principles before altering physical behavior.
Implementation evidence begins with the signal architecture, catalog guide, code-family guide, DSP guide, raw-IQ guide, and sample guide.