Skip to content

Burst Inspector Milestone

Gonzalo José Carracedo Carballal edited this page Nov 17, 2019 · 2 revisions

PLEASE NOTE: This is still a tentative feature, and not even the workflow is defined yet. I'm still evaluating what is the best way (from UX perspective) to perform burst analysis and demodulation.

The goal of the burst inspector feature is to isolate bursts on low duty cycle signals and leverage the global knowledge of the captured signal to perform deferred demodulation. This would allow manual demodulation, even for cases where the burst is so short that feedback synchronization blocks cannot sync to the signal.

Task list

  • Create channel-based signal source.
  • Implement a channel-based signal source from predefined sample buffers
  • Implement a pass-thru inspector for recording purposes
  • Add a second Analyzer object to GUI configured as burst channel source
  • Implement a push-to-record and squelch-based capture buttons
  • Allow GUI to open burst inspectors (implies replay button).
  • Implement a time-domain view (wave and spectrum)
  • Implement a time-selection tool in inspector
  • Implement time-domain signal analysis (slope detection, transition, etc)
  • Implement non-causal signal synchronization (clock and carrier)

Task details

Create channel-based signal source

  • Link to issue: (none)
  • Task page: (none) Currently, Suscan sources can be of type SUSCAN_SOURCE_TYPE_FILE or SUSCAN_SOURCE_TYPE_SDR. In both sources, the wideband sample stream is passed to a source worker that is continuously computing the FFT on them, and channelizing if necessary. This channel-based signal source skips the channelization part, delegating it to a "driver" that must create & feed channel objects with samples and (optionally) spectrum updates.

This kind source changes the behavior of the Analyzer object heavily, as the source worker will not be required for channelized sources and, consequently, baseband filters will not work either.

Potentially, channelized analyzers will be created from a pointer to an existing driver object.

Channelized source drivers must implement an interface with, at least, the following methods:

  • .ctor()
  • .properties()
  • .list()
  • .open()
  • .close()
  • .read()
  • .seek()
  • .dtor()

Inspectors will no longer be opened based on a frequency. Instead, they will be opened based on a channel number.

Implement a channel-based signal source from memory buffers

  • Link to issue: (none)
  • Task page: (none)

In this channelized source, the user provides a sample buffer and it is automatically managed as a source channel. To prevent large data transfers, this source will acquire ownership on an existing buffer.

Implement pass-thru inspector

  • Link to issue: (none)
  • Task page: (none)

The goal of this inspector is to forward samples to the client as they are received from the channel. We'll use this inspector to perform raw sample captures.

Add channel-based Analyzer object to the GUI

  • Link to issue: (none)
  • Task page: (none)

Create a memory buffer channel source along with the corresponding Analyzer object on startup.

Implement push to record and squealch-based capture buttons

  • Link to issue: (none)
  • Task page: (none)

These buttons will open a pass-thru inspector and start recording samples to a memory buffer. The resulting buffer is then transfered to the channel-based memory buffer source, which will expose a new channel.

Allow GUI to open burst inspectors

  • Link to issue: (none)
  • Task page: (none)

Open burst inspectors on the channel-based analyzer. This inspector will be slightly different to the streaming ones as it allows random access to its samples. It will have a replay button and a loop toggle button.

Decide whether it makes sense to derive the Inspector object to have extra methods, like direct access to samples, etc. Decide as well whether it makes sense to keep the streaming controls visible in the left panel (things like Costas loops or Gardner may not be necessary anymore).

Implement a time-domain view (wave and spectrum)

  • Link to issue: (none)
  • Task page: (none)

Implement a time-domain view, both in waveform and spectrum, so we can see the contents of a burst inspector. This time view must allow overlaying multiple signals to compare them. In particular, channel samples must be compared against the demodulated output.

Implement a time-selection tool in inspector

  • Link to issue: (none)
  • Task page: (none)

Visualize and demodulate samples based on a fixed time interval. Allow to perform a time-selection in the waveform / time view.

Implement time-domain signal analysis (slope detection, transition, etc)

  • Link to issue: (none)
  • Task page: (none)

Add things like a transition detector based on simple differentiation ((x - prev) * SU_C_CONJ(x - prev)), instantaneous phase, slope detector or envelope approximation. These things must be overlaid on top of the time-domain view.

Implement non-causal signal synchronization (clock and carrier)

  • Link to issue: (none)
  • Task page: (none)

Exploit the global knowledge of the captured burst in order to make global corrections of Doppler frequency drifts, sudden amplitude changes, inexact baudrates, etc.