-
Notifications
You must be signed in to change notification settings - Fork 93
Burst Inspector Milestone
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.
- 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)
- Link to issue: (none)
-
Task page: (none)
Currently, Suscan sources can be of type
SUSCAN_SOURCE_TYPE_FILE
orSUSCAN_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.
- 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.
- 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.
- Link to issue: (none)
- Task page: (none)
Create a memory buffer channel source along with the corresponding Analyzer object on startup.
- 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.
- 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).
- 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.
- 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.
- 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.
- 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.