I got the chance to look into uhd's guts.
My driver for the X300, x300_radio_control.cpp, uses get_tree() to set/get
all its properties.
This tree is maintained in RFNOC. I don't use it. I use Vivado.
The path given for get_rx_lo_names db_path("rx", channel) didn't have any /
"los" key in it.
I guess all other keys must have worked, or i couldn't set/get anything in
my box.
Could it be because i don't use RFNOC? that would be a shame:(

TIA
Nikos

On Sat, May 24, 2025 at 12:30 PM Nikos Balkanas <nbalka...@gmail.com> wrote:

> Hi,
>
> Problem fixed:) It was easier than I thought. No patches needed:)
> The answer was in host/lib/types/tune.cpp always:
>
> tune_request_t::tune_request_t(double target_freq, double lo_off)
>  .target_freq(target_freq)
> , rf_freq_policy(POLICY_MANUAL)
> , rf_freq(target_freq + lo_off)
> , dsp_freq_policy(POLICY_AUTO)
> , dsp_freq(0.0)
>
> There is only a labeling confusion in the definition of tune_request_t.
> The first 3 fields refer to the RF chain. It is curious that there are
> both target_freq and  rf_freq
> at the same time. Rf_freq should be renamed lo_freq!
> rf_freq_policy affects both target freq and lo_freq:)
>
> HTH
> Nikos
>
>
>
>
> On Sat, May 24, 2025 at 6:16 AM Nikos Balkanas <nbalka...@gmail.com>
> wrote:
>
>> Hi Marcus,
>>
>> I am aware of those. I wouldn't be doing all these if they were available
>> to me:(
>> You can check C API availability in usrp.h:)
>>
>> BR
>> Nikos
>>
>> On Sat, May 24, 2025 at 12:33 AM Marcus D. Leech <patchvonbr...@gmail.com>
>> wrote:
>>
>>> On 2025-05-23 13:41, Nikos Balkanas wrote:
>>>
>>> Hi Rob,
>>>
>>> I've done all these, but they do not affect LO offset.
>>> C API exports only these low level LO commands (in usrp.h)
>>> So, either I work it out with what I have, or I expand the C API
>>> to include the higher level C++ constructors.
>>> My luck. Both issues have to do with the C API:)
>>> Sampling rate is very important, but not useful in this case.
>>> I leave it on auto. RF is on manual:)
>>>
>>> BR
>>> Nikos
>>>
>>> I'll note that the C++ API has a couple of "helper" functions for
>>> creating tune_request_t objects:
>>>
>>>
>>> https://files.ettus.com/manual/structuhd_1_1tune__request__t.html#af9d2c5fb89c10024b1acae43e88ebe7f
>>>
>>> The second form, which takes both a desired target frequency, and the
>>> desired lo_offset, is what I have used in the past.
>>>
>>> I don't know if these are somehow available in the C API to form the
>>> tune_request_t  structure.
>>>
>>>
>>>
>>> On Fri, May 23, 2025 at 7:59 PM Rob Kossler <rkoss...@nd.edu> wrote:
>>>
>>>> I forgot to mention, the function you were looking at
>>>> 'uhd_usrp_set_rx_lo_freq' is not the function you need.  This is a
>>>> low-level function that is rarely needed. You will want to stay with the
>>>> function 'uhd_usrp_set_rx_freq' which will send the appropriate command to
>>>> the radio to set the LO and to the DDC to set the desired DSP frequency
>>>> shift that will compensate for the LO being offset.
>>>> Rob
>>>>
>>>> On Fri, May 23, 2025 at 12:55 PM Rob Kossler <rkoss...@nd.edu> wrote:
>>>>
>>>>> Hi Nikos,
>>>>> Although I have not used the 'c' API, it appears it can do the same
>>>>> thing as the c++ API with regard to tune request.  The 'c' structure
>>>>> uhd_tune_reqest_t
>>>>> <https://github.com/EttusResearch/uhd/blob/master/host/include/uhd/types/tune_request.h#L28>
>>>>> includes a field called 'dsp_freq'.  It seems that you can set this to 30
>>>>> MHz.  The c++ documentation  for tune_request_t
>>>>> <https://files.ettus.com/manual/structuhd_1_1tune__request__t.html#af9d2c5fb89c10024b1acae43e88ebe7f>
>>>>> indicates that you should set the RF policy to manual and the DSP policy 
>>>>> to
>>>>> automatic.  I don't know for certain if you should set the 'target_freq' 
>>>>> or
>>>>> the 'rf_freq' field of the tune request to the desired frequency but I'm
>>>>> guessing 'target_freq'.
>>>>>
>>>>> There is an example program called rx_samples_c.c
>>>>> <https://github.com/EttusResearch/uhd/blob/master/host/examples/rx_samples_c.c>
>>>>> which you may have seen. This shows using a tune request but without an LO
>>>>> offset.
>>>>> Rob
>>>>>
>>>>> On Fri, May 23, 2025 at 12:09 PM Nikos Balkanas <nbalka...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Ty Rob for the link and the suggestions,
>>>>>>
>>>>>> We agree completely. I need to offset my LO.
>>>>>> You are probably not aware that I am using the C API.
>>>>>> I cannot use the C++ constructors for tune_request unless they are
>>>>>> exported as C API.
>>>>>> I can just use the tune_request_t struct, which has no lo_off member.
>>>>>> So, I have  to offset my LO manually:
>>>>>> uhd_usrp_set_rx_lo_freq(uhd_usrp_handle h, double freq, char *name,
>>>>>> size_t channel, double *outfreq)
>>>>>> I have everything that I need except the LO name:(
>>>>>> To get name I use:
>>>>>> uhd_usrp_get_rx_lo_names()
>>>>>> That's my problem, right there. It just returns me an empty list of
>>>>>> names. No errors either. Why?
>>>>>> Without it, I cannot use the uhd_usrp_set_rx_lo_freq:(
>>>>>> Unfortunately, gdb is no help in this case. After 10 calls to the
>>>>>> /usr/include/c++ files and 7 more
>>>>>> calls to boost and preprocessor defines, it just advances to the next
>>>>>> source line.
>>>>>> Not gdb friendly sources:(
>>>>>> I am also looking to export as C API the tune_request(freq, lo_off)
>>>>>> C++ constructor.
>>>>>> This will mean to change code in uhd, which I will eventually have
>>>>>> to, but right now,
>>>>>> getting uhd_usrp_get_rx_lo_names() to work, is better:)
>>>>>>
>>>>>> BR
>>>>>> Nikos
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, May 23, 2025 at 4:57 PM Marcus D. Leech <
>>>>>> patchvonbr...@gmail.com> wrote:
>>>>>>
>>>>>>> On 2025-05-23 09:49, Rob Kossler wrote:
>>>>>>>
>>>>>>> Hi Nikos,
>>>>>>> Your RF card has 120 MHz bandwidth.  The strong tone you see will
>>>>>>> always be at the center.  But, if your application can tolerate using an
>>>>>>> instantaneous bandwidth < 60 MHz, you can use offset tuning as Marcus
>>>>>>> mentioned.  To do this you simply need to create a tune request with 
>>>>>>> your
>>>>>>> desired RF frequency and then specify an LO offset frequency of 30 MHz.
>>>>>>> This is all that is needed (again assuming that your bandwidth of 
>>>>>>> interest
>>>>>>> is < 60 MHz).  This link
>>>>>>> <https://dsp.stackexchange.com/questions/30562/large-spike-at-the-center-frequency-when-using-ettus-x310>
>>>>>>> discusses the topic.
>>>>>>>
>>>>>>> Also, if you want to reduce the DC offset, there are calibrations
>>>>>>> for the X310 - one of which will mitigate this signal.
>>>>>>> Rob
>>>>>>>
>>>>>>> Just a note that AFAIR, the *RX* DC-offset correction is something
>>>>>>> that doesn't require input from the calibration routines--it runs all 
>>>>>>> the
>>>>>>> time (if its turned on).
>>>>>>>
>>>>>>> But phase/amplitude *balance* does require that you run the
>>>>>>> appropriate CAL utilities:
>>>>>>>
>>>>>>> https://files.ettus.com/manual/page_calibration.html
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Fri, May 23, 2025 at 8:11 AM Nikos Balkanas <nbalka...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> I have implemented the following calls for uhd_usrp_set_rx_lo_freq:
>>>>>>>>
>>>>>>>> uhd_string_vector_handle  names;
>>>>>>>> uhd_string_vector_make(&names);
>>>>>>>> if ((err = uhd_usrp_get_rx_lo_names(dev[channel], channel, &names)))
>>>>>>>>        warn(log, "Failed to get lo names (%d). %s.\n", 0, FL, LN,
>>>>>>>> FN, err, uhdError(err));
>>>>>>>> if ((err = uhd_string_vector_size(names, &len)))
>>>>>>>>      warn(log, "Failed to get lo names size (%d).
>>>>>>>> %s.\n",0,FL,LN,FN,err, uhdError(err));
>>>>>>>> if (!len)
>>>>>>>> {
>>>>>>>>       error(log, "No lo names found on channel %d.\n", 0, FL, LN,
>>>>>>>> FN, channel);
>>>>>>>>        uhd_string_vector_free(&names);
>>>>>>>>         return(FAIL);
>>>>>>>> }
>>>>>>>> uhd_string_vector_free(&names);
>>>>>>>>
>>>>>>>> The problem is that names always returns 0. This is not right for
>>>>>>>> my SBX-120, or any
>>>>>>>> daughterboard with  a tuner:( This is what i can get from the API.
>>>>>>>> There are no LO examples.
>>>>>>>> I have seen lo_enable() in c++, but nothing exported to C. What am
>>>>>>>> I missing?
>>>>>>>>
>>>>>>>> TIA
>>>>>>>> Nikos
>>>>>>>>
>>>>>>>> On Fri, May 23, 2025 at 8:12 AM Nikos Balkanas <nbalka...@gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Thx Marcus,
>>>>>>>>>
>>>>>>>>> For your fast and informative answers. Sorry it took me a while to
>>>>>>>>> reply,
>>>>>>>>> but I'm still trying to get:
>>>>>>>>> tune_request(freq, lo_off)
>>>>>>>>> to work in C.
>>>>>>>>> My X310 has 2 SBX-120 boards. Using uhd 4.6.0 in Ubuntu 24.04.
>>>>>>>>> True about the tuner. Much cheaper and easier to implement it in
>>>>>>>>> analog.
>>>>>>>>> I am using your FPGA image. Haven't touched it myself, yet.
>>>>>>>>> So, the spike is pretty narrow to interfere with my signals, but
>>>>>>>>> still messes my power calculations:(
>>>>>>>>> I already implemented the integer frequency tuner and working on
>>>>>>>>> the low oscillator offset.
>>>>>>>>> If you have any pointers about it, feel free to advise.
>>>>>>>>> LO is not part of the request_tuner_t struct. It is set
>>>>>>>>> independently.
>>>>>>>>> Is this the same LO in uhd_usrp_set_rx_lo_freq?
>>>>>>>>> If this is the case I can modify it externally:)
>>>>>>>>>
>>>>>>>>> BR
>>>>>>>>> Nikos
>>>>>>>>>
>>>>>>>>> On Fri, May 23, 2025 at 4:40 AM Marcus D. Leech <
>>>>>>>>> patchvonbr...@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> On 2025-05-22 21:31, Nikos Balkanas wrote:
>>>>>>>>>>
>>>>>>>>>> The spike is very clean to come from outside.
>>>>>>>>>> Must be from my X310. My tuner must be adding a signal to the
>>>>>>>>>> center frequency. The small artifact at 2 Ghz is probably the
>>>>>>>>>> tuner not
>>>>>>>>>> equilibrating fully.
>>>>>>>>>> I recently updated my FPGA image. Is that where the tuner lives?
>>>>>>>>>>
>>>>>>>>>> You haven't mentioned in this thread which daughtercard you're
>>>>>>>>>> using.   RF front-ends that use complex-baseband
>>>>>>>>>>   downconversion suffer from something called "DC-offset", which
>>>>>>>>>> produces a spike at 0Hz in the complex spectrum.
>>>>>>>>>>   The radio block in the standard FPGAs has methods for reducing
>>>>>>>>>> this, unless you turn it off.  This is a very very
>>>>>>>>>>   *normal* thing for complex-baseband receiver chains.
>>>>>>>>>>
>>>>>>>>>> If the algorithms are engaged and working, then there'll still be
>>>>>>>>>> a central spike, but *considerably* reduced, and I find that
>>>>>>>>>>   said spike is usually swamped by external signals, even in
>>>>>>>>>> radio astronomy.
>>>>>>>>>>
>>>>>>>>>> The other method that people use is to use "offset tuning".
>>>>>>>>>> Where the tuner is tuned to a different RF frequency, and the
>>>>>>>>>>    DDC brings your signal of interest down to 0Hz.
>>>>>>>>>>
>>>>>>>>>> https://files.ettus.com/manual/page_general.html#general_tuning
>>>>>>>>>>
>>>>>>>>>> The "tuner" is an analog collection of components, including an
>>>>>>>>>> LO generator, and mixers.  While it is *controlled* through
>>>>>>>>>>   the FPGA, it is an analog subsystem.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Fri, May 23, 2025 at 3:19 AM Nikos Balkanas <
>>>>>>>>>> nbalka...@gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hello,
>>>>>>>>>>>
>>>>>>>>>>> Whenever I look at my spectrum I always see an energy spike at
>>>>>>>>>>> the center frequency.
>>>>>>>>>>> In the first image you can see a spike at 2, but not at 2.001
>>>>>>>>>>> Ghz. In the next image,
>>>>>>>>>>>  at 2.001 Ghz you can see the energy spike at the center
>>>>>>>>>>> frequency, but also a small
>>>>>>>>>>>  spike at 2 Ghz.
>>>>>>>>>>> I have verified these results by both fosphor (OpenCL fft) and
>>>>>>>>>>> fftw3f. Besides, if it were
>>>>>>>>>>>  an fft artifact, why is the spike at 2 Ghz still visible after
>>>>>>>>>>> a few mins? These spikes
>>>>>>>>>>>  seem to be transient, but real. In that part of the spectrum,
>>>>>>>>>>> you there is no traffic. Could it be  harmonics from my power 
>>>>>>>>>>> supply?
>>>>>>>>>>> Problems with my X-310? My transmitter
>>>>>>>>>>>  doing funny things (I have 2 boards and not enabling my
>>>>>>>>>>> transmitter anywhere)?
>>>>>>>>>>> Naming of images is freq_sr.jpg. All are in Mhz.
>>>>>>>>>>>
>>>>>>>>>>> TIA
>>>>>>>>>>> Nikos
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com
>>>>>>>>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com
>>>>>>>>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com
>>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com
>>>>>>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com
>>>>>>>>
>>>>>>>
>>>>>>>
>>>
_______________________________________________
USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-le...@lists.ettus.com

Reply via email to