The CRC16 of the AX.25 seems that is too weak for the new
decoding approach and we get many false positives.
Now the AX.25 decoder, makes waits for at least two
occurances of the AX.25 SYNC flag.
This commit adds GRCC into the CMake build system and creates the
executables from the .grc files on demand.
Because there is always the case that the gr-satnogs has not
been installed yet in the system, we still ship the auto-generated
from our side executables. In next releases, during the install
target, the GRCC and the executables generation, will be called
after the gr-satnogs is installed.
The IQ File sink, tried to create the IQ
file even if it was instructed by the user not to
store IQ data. Despite the fact that no data were
written, it could trigger however errors in case
the destination file could not be opened,
eg. due to permissions.
The problem was that the base class tried to
open the file at its contructor. This commit
deals with this issue and the file is created
only if the user specifies that wants the IQ
data to be stored.
This commit adds a generic IQ receiver supporting
arbitrary output sampling rate. It also allows the
user to disable or enable the Doppler correction applied.
The commit also drops the outdated fm_demod flowgraph.
This commit adds a hierarchical block that performs Doppler
compensation and resampling.
Rather than using directly the available Doppler correction blocks,
based on the user parameters of the incoming sampling rate and the
desired target sampling rate, it applies proper decimation on the signal
so the frequency shift to be applied to a smaller sampling rate,
reducing significantly the CPU resources required. At the previous
architecture (gr-satnogs 1.x.x) we used seperate blocks for the doppler
correction and the LO digital shift, operating at the device sampling rate.
These two blocks, performing almost the same operation, contributed to a
30% CPU usage of the overall application. Now the LO is compensated by
the Doppler correction block, taking into account at the same time the
Doppler drift.
After the digital LO shift, the Doppler corrected signal is passed through
an Polyphase Arbitrary Resampler, to match exactly the sampling rate
requested by the user.
The waterfall file has now a constant sized header of 52 bytes,
so that plotting tools can reconstruct properly the spectrum.
The structure of the header is the following:
- A 32 byte string containing the timestamp in
ISO-8601 format. This timer has microsecond accuracy.
- A 4 byte integer containing the sampling rate
- A 4 byte integer with the FFT size
- A 4 byte integer containing the number of FFT snapshots for one row
at the waterfall
- A 4 byte float with the center frequency of the observation.
- A 4 byte integer indicating the endianness of the rest of the file. If
set to 0 the file continues in Big endian. Otherwise, in little endian.
The change of the endianness is performed to reduce the overhead at the
station.
Note that all contents of the header are in Network Byte order! The rest
of the file is in native byte order, mainly for performance reasons.
Users can use data of the header to determine if their architecture match
the architecture of the host generated the waterfall file and act
accordingly.
The file continues with information regarding the spectral content of the
observation.
Each waterfall line is prepended with a int64_t field indicating the
absolute time in microseconds with respect to the start of the waterfall
data (stored in the corresponding header field).
The spectral content is stored in $FFT$ float values already converted in
dB scale.
The new GNU Radio linkage system seems that has some
issues. There are linkage dependencies that they should
be private on the GNU Radio target.
In addition, find_package(Boost) is also called on the
gnuradio-runtime target. Calling it again in the OOT
module overwrites the existing list of dependencies,
causing many problems.
We are staring a process of dropping Boost and use
the C++11 variants.