I took a look at your raw file, and the problem is actually with the way that IQ input for FSK signals works in gr-satellites.
When you use IQ input, gr-satellites needs to perform the FM demodulation of FSK, and so it needs to know the deviation of the FSK signal in order to use the correct gain in the quadrature demod. The default deviation is 5000 Hz, because this is sort of standard for Amateur packet radio, and because no-one has made a thorough study of the deviations used by each of the FSK satellites.
It turns out that AAUSAT-4 uses a deviation of around 1000 Hz, so the default is inadequate. Interestingly, the deviation for a 2400 baud GMSK signal would be 600 Hz, but the deviation seems higher than this.
When running with non-IQ input, this is not an issue because since we don’t know the gain of the FM demodulator (which is external and typically uses the wrong gain), there is an AGC to compensate for this.
So you have two options to improve the decodes with the IQ data. Specify the deviation, as:
gr_satellites AAUSAT-4 --rawint16 3250192_2020-12-05T13-16-58_AAUSAT_4.raw --samp_rate 48e3 --iq --hexdump --deviation 1000
or enable the same AGC that is used with the non-IQ input:
gr_satellites AAUSAT-4 --rawint16 3250192_2020-12-05T13-16-58_AAUSAT_4.raw --samp_rate 48e3 --iq --hexdump --use_agc
Both of these will give me 14 decodes, while the wav file gives 18 out of 20 visible packets (and 2 of them are too weak to expect to be able to decode them).
How to improve this further and get back our 18 packets? I’ve reviewed the FSK demodulator for the IQ case (which sees much less use than the non-IQ case, so it might have some rough spots), and the issue is that all the input goes directly to the quadrature demod. So here you’re needlessly feeding in 48kHz of noise into the demod. The appropriate thing to do is to put a lowpass filter before, that cuts off a bandwidth according to Carson’s rule.
I’ve just done this (and will now push the commit to master) and now I get 18 decodes with both of the command lines indicated above. Carson’s rule depends on the deviation, so the correct thing to do would be to specify the --deviation
even if using --agc_on
, but even so I still get 18 decodes if I don’t do it.