Arbitrary 10 MHz filter on TX with LimeSDR mini + GNURadio + RPi 3 B plus [Error]

#1

I’m using the LimeSDR mini with gr-limesdr to transmit noise in 2.45. When the LimeSDR mini is on my laptop the signal looks like this (I am using a 10dB attenuator):

This signal looks ideal for my project. However, when is use the RPi, the signal is cut down to only 10 MHz of bandwidth around the center frequency (I don’t have a pic). When I set the sample rate lower than 10 MHz, the bandwidth of the signal is changed accordingly. When I set the sample rate higher than 10 MHz the bandwidth stays at 10 MHz. I can get the same behavior from my laptop, only when I use an analog filter, so to me it seems that when using the RPi the software sets an arbitrary 10 MHz filter even if it’s disabled in the block settings. The only error on the RPi is a TX calibration error because of insufficient gain. I have tried disabling the calibration and I wouldn’t get the error but it did not solve my problem. I have also tried using a Y cable with a bench power supply at 5V. It would draw around 50 mA, but the problem persisted.

This is the code I run on my laptop:

from gnuradio import analog
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from optparse import OptionParser
import limesdr


class Jammer(gr.top_block):

    def __init__(self):
        gr.top_block.__init__(self, "Jammer")

        ##################################################
        # Variables
        ##################################################
        self.freq = freq = 2.45e9

        ##################################################
        # Blocks
        ##################################################
        self.limesdr_sink_0 = limesdr.sink('1D424CCBE5850E', 0, '', '')
        self.limesdr_sink_0.set_sample_rate(30e6)
        self.limesdr_sink_0.set_oversampling(1)
        self.limesdr_sink_0.set_center_freq(freq, 0)
        self.limesdr_sink_0.set_gain(60,0)
        self.limesdr_sink_0.set_antenna(1,0)
            
        self.analog_fastnoise_source_x_0 = analog.fastnoise_source_c(analog.GR_GAUSSIAN, 1, 0, 8192)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.analog_fastnoise_source_x_0, 0), (self.limesdr_sink_0, 0))    

    def get_freq(self):
        return self.freq

    def set_freq(self, freq):
        self.freq = freq
        self.limesdr_sink_0.set_center_freq(self.freq, 0)


def main(top_block_cls=Jammer, options=None):

    tb = top_block_cls()
    tb.start()
    tb.wait()


if __name__ == '__main__':
    main()

This is the code I run on the RPi (I did the tests with a Qt GUI that is not included here):

from gnuradio import analog
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from optparse import OptionParser
import limesdr


class Jammer(gr.top_block):

    def __init__(self):
        gr.top_block.__init__(self, "Jammer")

        ##################################################
        # Variables
        ##################################################
        self.freq = freq = 2.45e9

        ##################################################
        # Blocks
        ##################################################
        self.limesdr_sink_0 = limesdr.sink('1D424CCBE5850E', 0, '', '')
        self.limesdr_sink_0.set_sample_rate(30e6)
        self.limesdr_sink_0.set_oversampling(1)
        self.limesdr_sink_0.set_center_freq(freq, 0)
        self.limesdr_sink_0.set_gain(60,0)
        self.limesdr_sink_0.set_antenna(1,0)
            
        self.analog_fastnoise_source_x_0 = analog.fastnoise_source_c(analog.GR_GAUSSIAN, 1, 0, 8192)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.analog_fastnoise_source_x_0, 0), (self.limesdr_sink_0, 0))    

    def get_freq(self):
        return self.freq

    def set_freq(self, freq):
        self.freq = freq
        self.limesdr_sink_0.set_center_freq(self.freq, 0)


def main(top_block_cls=Jammer, options=None):

    tb = top_block_cls()
    tb.start()
    tb.wait()


if __name__ == '__main__':
    main()