Skydel Custom Signal Documentation
  • Introduction
  • Development Environment
    • Ubuntu 22.04
    • Windows
    • Compilation
  • Architecture
  • Implementation
  • Usage
  • Examples
  • Future Evolutions
Powered by GitBook
On this page
  • Architecture
  • XML file
  • CustomSignal
  • Subcarrier
  • Code
  • ModulationCoef
  • Fdma
  • Shared library
  • ICustomSignal
  • ICustomSignalCode
  • ICustomSignalNavMsg

Architecture

PreviousCompilationNextImplementation

Last updated 7 months ago

Architecture

For existing GNSS signal generation, Skydel already knows all the signals specifications and how to generate the navigation message bits and the code chips. However, in order to generate a “custom signal”, users must provide information and compiled code to Skydel.

As shown in the diagram above, users needs to provide an XML file and a C++ shared library (.dll in Windows or .so in Linux) for each custom signal. Note that the same library can be shared by several custom signals.

For the legacy signals, Skydel automatically simulates the satellite visibility, signal dynamics and impairments (atmospheric delays, multipaths). The custom signal user must provide the signal data in the correct timeframe scheduled by the Skydel Engine.

A custom signal is composed of an arbitrary number of Subcarriers and Codes. The signal composition is described in an XML file. The codes' chips must be provided through a C++ shared library, as illustrated in the figure below.

The IQ samples are generated according to the following equation:

sample(t)=A×∏i=1CCi(t)×SC(t)sample(t)=A× ∏^C_{i=1}C_i(t)×SC(t)sample(t)=A×i=1∏C​Ci​(t)×SC(t)

Where:

  • A A A a constant (in CCC) multiplication factor

  • CCC the number of codes

  • Ci(t)C_i(t)Ci​(t) are the code chips value (-1 or 1) defined in the shared library (DLL)

  • SC(t)SC(t)SC(t) the subcarriers defined as:

Where:

SC(t)=1 if S=0, ∑j=1SSCj(t) otherwiseSC(t)=1 \space if \space S=0, \space ∑^S_{j=1}SCj(t) \space otherwiseSC(t)=1 if S=0, j=1∑S​SCj(t) otherwise
  • SSS the number of subcarriers

  • SCj(t)SC_j(t)SCj​(t) are the subcarrier Real values defined in the XML file

XML file

CustomSignal

Version

Document interface version, current version is "1.0".

NavMsg

Optional Boolean. If missing, it will attempt to get a navigation message from the shared library. If set to True, it will generate an error if the navigation message is missing from the shared library.

Constellation

The satellite constellation to which this custom signal will be attached.

CentralFreq

Custom signal's central frequency, in Hertz.

Bandwidth

Custom signal's bandwidth, in Hertz.

DLLPath

Path to the shared library, relative to the XML.

SignalLevel

Default power offset to the constellation reference, in dB.

SignalTimeDelays

Optionnal parameter. An array of real numbers representing the delay to be added to a signal in nanoseconds. The size of the array is equal to the number of satellites in the Custom Signal Constellation.

For example, For a GPS Custom Signal, if the TGD of a satellite is 5.12 ns, and you want to set an ISC for your Custom Signal of -2.36 ns for this satellite, you need to set the Signal Time Delay of the satellite to TGD - ISC = 7.48 ns.

This parameter is not configurable for GLONASS Custom Signals.

Subcarrier

Id

Subcarrier identifier.

Rate

Subcarrier rate, in Hertz.

Coef

An array of real numbers representing the subcarrier chip values. For example, a BOC would have the [-1, 1] coefficients. A CosBOC at half power would have the [-0.5, 0.5, 0.5, -0.5] coefficients.

Code

Id

Code identifier. Can be used to distinguish different custom signals in the same shared library.

ModulationCoef

Real

The real part of the multiplier applied to every sample.

Imag

The imaginary part of the multiplier applied to every sample.

Fdma

FdmaChannelOffset

The frequency offset in hertz between channels (SV IDs). This value will be multiplied by the given channel assignation for an SV ID.

FdmaChannelAssignations

Integer assignations for each channel. Requires as many channels as available SV IDs in the signal's constellation.

Shared library

ICustomSignal

Constructor

Your implementation constructor must take a reference to a constant CSInitData structure, containing various simulation start information.

getNavMsg

Returns a pointer to the navigation message object or nullptr if this shared library does not define any.

getCode

Returns a pointer to the code object that matches the null-terminated identifier name or nullptr if this is not a recognized name.

ICustomSignalCode

getNumberOfChipsPerMSec

Returns the code rate in chips per millisecond.

getChips

Copy your custom chips for elapsed time elapsed and PRN prn into the buffer chips. The buffer is guaranteed to be getNumberOfChipsPerMSec() + getExtraAllocSize() long.

getExtraAllocSize

Extra bytes to allocate for the chips buffer.

ICustomSignalNavMsg

getNavMsgDurationMs

Returns the navigation message duration in milliseconds.

buildNavMsg

Called every getNavMsgDurationMs() with updated simulation data.

getTOWOffset

Returns the navigation message's offset to the constellation's Time Of Week.

With this approach, it is possible to generate several GNSS modulation types, such as BPSK(N), BOC(M,N) and MBOC(M,N,P). Some examples of legacy GNSS signals are provided in the . Tracking and accuracy of these signals have been validated using a GNSS receiver.

An evolution of the custom signal feature will bring even more genericity. The goal is to ensure the generation of all legacy signals using the custom signal feature. Description of these possible evolutions is given .

Github repository
here