SatNOGS client V2.x / SoapyRTLSDR: setting Freq Correction (PPM)

The PPM parameter is set inside the SoapyRTLSDR implementation of setFrequency:

SoapyRTLSDR never get non-zero PPM parameter (see above) :

double value = 60.0;
this->setFrequency(dir, chan, “CORR”, value);

P.S. It turns out that the reason for the incorrect setting PPM is that at the start of the source_impl.cc (gr-soapy), the PPM value is always set 0, and other PPM values ​​take effect only when the PPM parameter is changed (see test “soapy-ppm.grc” video) .

It was possible to solve the problem by changing the order of the initial soapy commands (as it was earlier in Gnuradio v3.7) that were generated in the Python code.

Code generated by GRCC:

    # Setup Frequency correction. If set to 0 internally the source block
    # will handle the case if no frequency correction is supported
    self.soapy_source_0_0.set_frequency_correction(0,ppm)
    self.soapy_source_0_0.set_agc(0,False)
    self.soapy_source_0_0.set_frequency(0,"BB",bb_freq)
    self.soapy_source_0_0.set_frequency(0, rx_freq - lo_offset)
    self.soapy_source_0_0.set_antenna(0,antenna)

The correct order of commands:

    self.soapy_source_0_0.set_frequency(0, rx_freq - lo_offset)
    self.soapy_source_0_0.set_frequency(0,"BB",bb_freq)
    self.soapy_source_0_0.set_agc(0,False)
    self.soapy_source_0_0.set_antenna(0,antenna)
    # Setup Frequency correction. If set to 0 internally the source block
    # will handle the case if no frequency correction is supported
    self.soapy_source_0_0.set_frequency_correction(0,ppm)

Is it possible to ensure the correct sequence of the generated Python code for Gnuradio v3.8?

1 Like

I made changes to the gr-soapy_source.block.yml (gr-soapy) file - the following code:

    # Setup Frequency correction. If set to 0 internally the source block
    # will handle the case if no frequency correction is supported 
    self.${id}.set_frequency_correction(0,${correction0})
    % if context.get('nchan')() > 1:
    self.${id}.set_frequency_correction(1,${correction1})
    % endif

moved to a new place following the text:

       % if context.get('devname')() in ['bladerf']:
        self.${id}.set_gain(0,"rxvga1", ${rxvga1_gain})
        self.${id}.set_gain(0,"rxvga2", ${rxvga2_gain})
        % endif
    % endif

Thanks to changes in gr-soapy, there are no problems now.

If this really is an issue, can you please raise an issue at: https://gitlab.com/librespacefoundation/gr-soapy/-/issues

Done

1 Like

Fix is at the master branch now. Can you check if it solves the problem? I made a quick test with RTL and seems now that PPM takes effect.

1 Like

It works, thank you.

1 Like

Is there any RTL-SDR ppm correction now on satnogs-setup?

satnogs-config Commits ff36d0b5

2 Likes

Many thanks all of you. Now RTL-SDR is working fine

Also many thanks @uy0ll for investigating, explaining and also providing the solution for this issue & staying around until it was fixed!

2 Likes