To simplify the logic and allow an easy and more efficient way to add
new decoders, the new architecture uses only one decoder block.
This block takes as input a void* stream and produces PDUs with their
metadata. To do so, the block accepts a decoder object. Every decoder
should implement the virtual class decoder(). This class provides the
necessary API and an arbitrary number of decoders can be supported. The
decoding status is reported to the frame_decoder block through the
decoder_status_t structure.
std::bitset can be used only with compile time known size. Most of the flowgraphs take the shift register size as a parameter through the GRC so it cannot be used. This commit implements a shift register using the std::deque that supports arbitrary number of memory stages
This is an attempt to cut the signal free period after the quadrature
demodulation block. The idea seems that works, but there still an issue
with the samples not passing correctly from the valve.
CW decoding using match filtering is pretty much useless in LEO.
The information about the tone frequency is very rare and carrier
oscillations during the satellite pass reduce significantly the
performance.
The new next CW decoder is based on the autocorrelation of the received
signal.
* Start Ogg source block
* Add OGG audio source block
The number of output streams for this block should match the number of
audio streams contained inside the ogg file. If there is a mismatch an
appropriate exception is thrown.
* UDP Message source can handle multiple data types
* Add a waterfall sink block
* Fix dependency issues with VOLK
* Add mean and max hold mode to the waterfall sink
* Add mean and max hold mode to the waterfall sink
* Install satnogs_waterfall.gp gnuplot script at
<install_prefix>/share/satnogs/scripts
* Automatically retrieve x and y axis ranges at the satnogs_waterfall.gp
The data whitening and de-whitening mechanism is implemented using
lookup tables for fast processing times. The implementation is quite
generic and modular supporting user defined polynomial masks and seeds.
The lookup table is created during the initialization without any
runtime overhead.
After managing to successfully receive raw bytes from the TI devboard
with the CC1120, its now time to pack them into a frame by searching for
the preamble and synchronizing with the known byte sync word.
The purpose of this block is to grab rigctl compatible commands from the
gr-satnogs client software and use the set_freq command in order to
compensate the doppler shift effect.
The AX.25 decoder is now decoding the received frames.
Also, the module now provides a UDP message source block. This block
will be responsible to receive UDP packets and transform them into PMT
messages for further processing in the GNU Radio flowgraph. As the
communication with the satnogs-client will be done in the same host, we
do not have to care about packet loss.
Furthermore, the module now provides and a debug message source block
for easy debugging.
FSK demodulation can be implemented pretty well either using envelopes
or matched filters. For now the matched filters seems to be a better
candidate. However, some normalization issues should be solved.
The clock recovery mechanism of GNU Radio is considered
an overkill for the needs of AFSK. So the afsk_decoder
will focus on a frequency domain approach.
The CW symbol decoder block takes as input the power of the processed
signal and tries to identify the dot and dash symbols. It produces
asynchronous messages containing the decoded symbols. The output
messages can be directly used by the Morse code decoder block, in order
to retrieve the clear text message.
There are some few thing that need to be done for the block to be fully
operational.