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 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