Receiving and transmitting at 1MHz

Hi @martywittrock,

Thanks for your response - regarding the bands, the LimeSuite Sink in GNU Radio defines the bands as BAND1 and BAND2, so BAND1 in this case is correct and refers to TXx_1.

I did manage to make some progress regarding transmission after reading through this forum post and messing around with the Modules->API calls menu in LimeSuite GUI (for some reason this option is not available in the Linux version). This helped me understand better how the internals of the LimeSDR work thus identify the problem. I’ll explain below in case anyone else runs into the same issue.

Essentially, although the LimeSDR’s continuous frequency range is 100kHz-3.8MHz, the local oscillator in the LimeSDR can only tune down to 30MHz. You can see this in the LimeSuite GUI in the SXR or SXT tab by trying to set the frequency to anything less than 30MHz. The GUI will respond with the following error message:

[20:35:04] ERROR: SetFrequencySXT(29 MHz) - required VCO frequency is out of range [3800-7714] MHz

So how do get down to low frequencies? By tuning the LO to 30MHz or thereabouts but then capturing a very large bandwidth - e.g. set the LO to 32MHz and the bandwidth to 64MHz, which allows you to capture everything from 0 all the way to 64MHz. This is all very well, but 64MHz bandwidth is huge and transferring that over the USB and processing it can be impractical. In order to get around that, the LimeSDR has a second digital mixing stage, powered by the NCO, which is used to convert the signals of interest up to 0Hz. After that, there is a digital filter and a second sampling stage and this is actually what gets sent to over the USB connection. The relationship between the two sample rates (the ADC sample rate and the digital baseband sample rate after the NCO) is set by the Oversample option i.e. ADC rate = sample rate x oversample. The same process occurs, but in reverse, for transmission.

Essentially (for RX), the block diagram looks like this:

RF Input -> RF Mixer -> Analogue filter -> ADC -> Digital Mixer using NCO -> Digital Filter -> Downsample -> USB

So in my case, the area of spectrum I’m interested in is the AM band from about 0.5-1.5MHz, with a centre at 1MHz. So here’s how I configure the LimeSuite Sink in GNU Radio:

  • Set the RF Frequency to 32MHz.
  • Set the sample rate to 2MHz, and the oversample to x32. This would result in an ADC sample rate of 64Msps, and thus with a centre frequency of 32MHz, capture everything from DC-64MHz.
  • In order to get my 1MHz to DC, we need an NCO frequency of -31MHz (that’s negative: target_freq - rf_freq or 1MHz-32Mhz = -31Mhz).
  • Because our RF bandwidth is 64MHz, the analogue filter bandwidth also needs to be at least this wide, otherwise our signals of interest will be filtered out.
  • The digital filter needs to be set to at most the sample rate (2MHz in this case).

Now, in GNU Radio I can finally transmit at 1MHz. For comparison, I used SDR Angel (configured in the same way above) to transmit a single tone at 1.825MHz and the output power was -12.6dBm with the gain cranked up to 70dB (the maximum in SDR Angel). So that’s not too far away from your own figure of -8.77dBm@1.825MHz, so I’m happy that the hardware is hopefully working fine.

Note: When dealing with low frequencies such as this, there is a lower limit on what the baseband sample rate can be. In the example above, it’s not possible to go below 2Msps for the baseband sample rate. Any lower than that and even at 30MHz LO and the highest oversample rate of 32x, you won’t have enough ADC bandwidth to capture the very low frequencies. This explains the error message [ERROR] Cannot achieve desired sample rate: rate too low that can sometimes occur when trying to configure the LimeSDR.

Now apparently, you don’t normally need to go to this much detail when setting up the LimeSDR as the driver should automatically take care of setting up the hardware correctly to achieve the desired sample rate and centre frequency. I don’t know why isn’t the case with the LimeSuite source/sink blocks in GNU Radio (I’m using LimeSuite v19.04.0-myriadrf1~bionic and the gr-limesuite module is compiled from the latest source, so should be up to date). I might look into it when I get some time. But at least now I can transmit at 1MHz (and hopefully receive as well once I apply the HF mod) and hopefully understand the LimeSDR better.

@martywittrock What program did you use to generate the output at 1.825MHz? Did you have to go through this detailed setup as well, or did you just dial in the desired frequency?