This commits introduces a significant redesign of the AX.25 decoding
block. Due to the poor AX.25 sync flag, the decoders exhibited too many
false alarms. To deal with this problem, we introduced the quadrature
demod filter block, that tried to measure the SNR based on the running
variance of the signal. The problem with that was that the user should
have to fine tune two parameters, the one related with the amplitude of
the incoming signal and the second one related with the window that the
calculations should take place. This solution worked until now, but we
can always increase the performance.
The new AX.25 decoder stores the bitstream in a queue and always tries
to exlpoit possible valid frames in the queue. If now sync flags have
been encountered, the queue is flushed. After a valid frame extraction,
bits corresponding to this frame are also deleted from the queue.
This technique requires more memory and CPU, but it increases a lot the
decoding performance.
This commit includes a blind frequency correction mechanism for FM
signals. It uses the information of the angle difference between two
concecutive samples and a VCO to continuously compenstate any frequency
offset. To avoid intermodulations, a low pass filter is used trying to
pass only the DC component that is needed.
* Switch from amplitude based approach to auto-correlation
* Limit the bandwidth of the PLL using a low pass filter
* Reject noise of the PLL using a very steep low pass after it
* Introduce the hysteresis option, in order the CW demodulator to adjust
properly the plateau length based on the WPM and any filtering that can
be used before
* Instead for a frame per word, now the CW decoder waits for 10 long
spaces before it commits a frame. With this way many words are placed on
the same frame telemetry decoding is easier
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 commit implements a new approach for the BPSK AX.25 decoding. It
seems that the GNU Radio equalizers (both CMA and LMS) are not ideal for
bursty transmissions. After they loose 'lock', they tend to converge
quite slow again.
The equalizing problem is again solved using an AGC2 block. However, the
placement of this block is quite critical. In older versions the AGC was
placed several steps after resampling and filtering. This resulted to
poor equalization and noise increase. Now the AGC is placed as early as
possible when the signal has a large span.
Some distros do not contain the GrVersion.cmake module so the git
version can be applied into the gr-satnogs version reporting script.
This commits adds this module into the project, so the build system can
use it during project configuration.
The new BPSK decoder uses a blind equalizer in par with an LMS based
equalizer. Both of them adapt more quickly in the channel response than
the AGC.
The decoder supports baudrates up to 19200.
Note that the bpsk_ax25.grc deprecates the bpsk_decoder.grc and
bpsk_demod.grc and they will be removed on the next release.
The ```fox_id``` consists of three bits.
To mask these three bits a value of 0x7 is neccessary.
Added additional spacecraft identifiers.
Signed-off-by: Patrick Dohmen <dl4pd@darc.de>