Quantcast
Channel: LimeSDR - MyriadRF Discourse
Viewing all articles
Browse latest Browse all 150

Can anyone shed some light how Soapy driver sets frequencies?

$
0
0

I was pretty surprised it is possible with the soapy driver to get two receivers on different frequencies(running at 700kS/s via wdsp library). As they have the same LO I’m guessing the adc is actually running at a much faster rate (maybe max?) and the fpga is giving us the relevant chunk of the total bandwidth.

Coming back to single RX use case this creates an uncertainty when LO will actually move during frequency change. What will it be initially? (judging by leakage it is probably set right on target when first started and frequency is requested).

I’ve found information somewhere we can have two receivers on different frequencies as long as they are within one 61mhz block which would suggest the adc is running at max rate.

So based on that with one receiver it should be possible to park the LO at let’s say 429.9MHz, calibrate the rx and have the entire 430 to 440mhz available to move within without having LO move (and mess with calibration).

Does anyone know if this is right? If so what soapy api to use?

Edit: Just to clarify, the library I’m using on top WDSP has a feature where I can move the frequency within the sdr bandwidth while keeping the sdr at one frequency . They call it CTUN. I’m looking for the exact same thing but at soapy/lime level. (as WDSP is limited to 700kS/s on my hw).

Soapy has such comment above its API:

/*******************************************************************
 * Frequency API
 ******************************************************************/

/*!
 * Set the center frequency of the chain.
 *  - For RX, this specifies the down-conversion frequency.
 *  - For TX, this specifies the up-conversion frequency.
 *
 * The default implementation of setFrequency() will tune the "RF"
 * component as close as possible to the requested center frequency.
 * Tuning inaccuracies will be compensated for with the "BB" component.
 *
 * The args can be used to augment the tuning algorithm.
 *  - Use "OFFSET" to specify an "RF" tuning offset,
 *    usually with the intention of moving the LO out of the passband.
 *    The offset will be compensated for using the "BB" component.
 *  - Use the name of a component for the key and a frequency in Hz
 *    as the value (any format) to enforce a specific frequency.
 *    The other components will be tuned with compensation
 *    to achieve the specified overall frequency.
 *  - Use the name of a component for the key and the value "IGNORE"
 *    so that the tuning algorithm will avoid altering the component.
 *  - Vendor specific implementations can also use the same args to augment
 *    tuning in other ways such as specifying fractional vs integer N tuning.
 *
 * \param device a pointer to a device instance
 * \param direction the channel direction RX or TX
 * \param channel an available channel on the device
 * \param frequency the center frequency in Hz
 * \param args optional tuner arguments
 * \return an error code or 0 for success

Which seems one can use this OFFSETT to accomplish this, but I found no examples online how to actually use it, what the argument should look like etc.

9 posts - 3 participants

Read full topic


Viewing all articles
Browse latest Browse all 150

Trending Articles