usrp-users@lists.ettus.com

Discussion and technical support related to USRP, UHD, RFNoC

View all threads

Re: Utilizing power calibration to obtain actual received power level

MB
Martin Braun
Mon, Apr 14, 2025 9:50 AM

Ah, those are more recent than UHD 4.6.

Is the environment variable XDG_DATA_HOME set on your system? What does
"echo $XDG_DATA_HOME" print for you?

BTW, if the only problem is that the cal data path is misattributed, then
you can set the environment variable
UHD_CAL_DATA_PATH=~/.local/uhd/shrae/uhd/cal. That should do the trick.
However, I would still like to figure out what caused this.

--M

On Mon, Apr 14, 2025 at 11:39 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello Martin,

only installed via apt, I did not specify snap.
uhd.get_lib_path() returns: /lib/x86_64-linux-gnu -> libuhd.so found here
uhd.get_pkg_path() returns: /lib
I am unable to use uhd.get_pkg_data_path() and uhd.get_module_paths() ->
uhd has no attribute

Tim

Op do 10 apr 2025 om 17:14 schreef Martin Braun martin.braun@ettus.com:

That was very helpful. So there's a discrepancy between what the cal-tool
thinks the path is (~/.local/...) and what UHD thinks it is
(~/snap/code/188/.local).

I'm also a bit surprised about that UHD path. Did you install UHD via
snap? (If yes, I didn't even know that was possible!). I know you say you
installed via apt, but I'm just baffled why UHD thinks this is the right
path.

There are other path APIs, here is what they look like on a system where
I install UHD, manually, into a random location:

uhd.get_lib_path()

'/home/mbr0wn/prefix/master/lib'

uhd.get_pkg_data_path()

'/home/mbr0wn/prefix/master/share/uhd'

uhd.get_cal_data_path()

'/home/mbr0wn/.local/share/uhd/cal'

The first (get_lib_path()) is the path where the libuhd.so file is
located. Is that the case for you?

You can see even there, the cal files are, by default, searched for in
~/.local/share/uhd/cal.

--M

On Thu, Apr 10, 2025 at 10:13 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello Martin,

it prints the following: home/username/snap/code/188/.local/share/uhd/cal
That folder does not exist, the deepest path I can go is
home/username/snap/code/188/.local/share/
I manually created the folders uhd/cal and pasted the calibration files
there. Now the function usrp.has_rx_power_reference() returns True. I'll
investigate further.

Tim

Op wo 9 apr 2025 om 09:02 schreef Martin Braun martin.braun@ettus.com:

Tim,

sorry for suggesting this so late: What does this Python script print:

import uhd
print(uhd.get_cal_data_path())

?

On Tue, Apr 8, 2025 at 10:53 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello Martin,

thanks for your reply. It would be helpful to know where the driver
looks for the file, but until now I did not find any variable or function
to obtain this location.

FYI, I am using a virtual environment on Ubuntu 24.0.2 LTS with Python
3.12.3.
The following packages related to uhd are installed via apt:

StatusPackage NameVersionArchitectureDescription
ii libgnuradio-uhd3.10.9t64:amd64 3.10.9.2-1.1ubuntu2 amd64 gnuradio
universal hardware driver functions
ii libuhd4.6.0t64:amd64 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal
hardware driver for Ettus Research products - library
ii python3-uhd 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal
hardware driver for Ettus Research products - Python3
ii soapysdr0.8-module-uhd:amd64 0.4.1-4build4 amd64 UHD device
support for SoapySDR
ii uhd-doc 4.6.0.0+ds1-5.1ubuntu0.24.04.1 all universal hardware
driver for Ettus Research products - doc
ii uhd-host 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal hardware
driver for Ettus Research products - host apps
Best regards,

Tim

Op di 8 apr 2025 om 10:14 schreef Martin Braun <martin.braun@ettus.com

:

Tim,

at first glance, you're doing everything right. Thanks for taking the
time and reading the docs. We'll need to look into this.

I saw you also opened https://github.com/EttusResearch/uhd/issues/842,
that's very helpful. Sorry I can't give you the right answer immediately!

--M

On Thu, Apr 3, 2025 at 11:28 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello

I've recently run the uhd_power_cal.py script to calibrate the RX
paths of a B200mini using a calibrated signal generator.

It generated two files, saved at /home/username/.local/share/uhd/cal:

  • b2xxmini_pwr_rx_rx2_33ECA1A#A.cal

  • b2xxmini_pwr_rx_tx+rx_33ECA1A#A.cal

Using python, I have the following code:

print(f"RX info: {usrp.get_usrp_rx_info()}")

This returns the following:

RX info: {'mboard_id': 'B200mini', 'mboard_name': 'B200mini', 'mboard_serial': '33ECA1A', 'module_serial': '33ECA1A', 'rx_antenna': 'TX/RX', 'rx_id': 'Unknown (0xffff)', 'rx_ref_power_key': 'b2xxmini_pwr_rx_tx+rx', 'rx_ref_power_serial': '33ECA1A#A', 'rx_serial': '', 'rx_subdev_name': 'FE-RX1', 'rx_subdev_spec': 'A:A'}

Running the following functions return false however.

usrp.has_rx_power_reference()
uhd.usrp.cal.database.has_cal_data('b2xxmini_pwr_rx_tx+rx', '33ECA1A#A'):

Why? How can I use the calibration file in python to obtain
estimated received power level at the RX side in dBm?
This is not
clear in the documentation. I would like to do this for the TX side as well.

Thanks!

References:

https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34...
https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34c

https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afb...
https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afbfb7d9
https://files.ettus.com/manual/page_power.html


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com

Ah, those are more recent than UHD 4.6. Is the environment variable XDG_DATA_HOME set on your system? What does "echo $XDG_DATA_HOME" print for you? BTW, if the only problem is that the cal data path is misattributed, then you can set the environment variable UHD_CAL_DATA_PATH=~/.local/uhd/shrae/uhd/cal. That should do the trick. However, I would still like to figure out what caused this. --M On Mon, Apr 14, 2025 at 11:39 AM Tim Vancauwenbergh < tim.vancauwenbergh13@gmail.com> wrote: > Hello Martin, > > only installed via apt, I did not specify snap. > uhd.get_lib_path() returns: /lib/x86_64-linux-gnu -> libuhd.so found here > uhd.get_pkg_path() returns: /lib > I am unable to use uhd.get_pkg_data_path() and uhd.get_module_paths() -> > uhd has no attribute > > Tim > > Op do 10 apr 2025 om 17:14 schreef Martin Braun <martin.braun@ettus.com>: > >> That was very helpful. So there's a discrepancy between what the cal-tool >> thinks the path is (~/.local/...) and what UHD thinks it is >> (~/snap/code/188/.local). >> >> I'm also a bit surprised about that UHD path. Did you install UHD via >> snap? (If yes, I didn't even know that was possible!). I know you say you >> installed via apt, but I'm just baffled why UHD thinks this is the right >> path. >> >> There are other path APIs, here is what they look like on a system where >> I install UHD, manually, into a random location: >> >> >>> uhd.get_lib_path() >> '/home/mbr0wn/prefix/master/lib' >> >>> uhd.get_pkg_data_path() >> '/home/mbr0wn/prefix/master/share/uhd' >> >>> uhd.get_cal_data_path() >> '/home/mbr0wn/.local/share/uhd/cal' >> >> >> The first (get_lib_path()) is the path where the libuhd.so file is >> located. Is that the case for you? >> >> You can see even there, the cal files are, by default, searched for in >> ~/.local/share/uhd/cal. >> >> --M >> >> On Thu, Apr 10, 2025 at 10:13 AM Tim Vancauwenbergh < >> tim.vancauwenbergh13@gmail.com> wrote: >> >>> Hello Martin, >>> >>> it prints the following: home/username/snap/code/188/.local/share/uhd/cal >>> That folder does not exist, the deepest path I can go is >>> home/username/snap/code/188/.local/share/ >>> I manually created the folders uhd/cal and pasted the calibration files >>> there. Now the function usrp.has_rx_power_reference() returns True. I'll >>> investigate further. >>> >>> Tim >>> >>> Op wo 9 apr 2025 om 09:02 schreef Martin Braun <martin.braun@ettus.com>: >>> >>>> Tim, >>>> >>>> sorry for suggesting this so late: What does this Python script print: >>>> >>>> import uhd >>>> print(uhd.get_cal_data_path()) >>>> >>>> >>>> ? >>>> >>>> On Tue, Apr 8, 2025 at 10:53 AM Tim Vancauwenbergh < >>>> tim.vancauwenbergh13@gmail.com> wrote: >>>> >>>>> Hello Martin, >>>>> >>>>> thanks for your reply. It would be helpful to know where the driver >>>>> looks for the file, but until now I did not find any variable or function >>>>> to obtain this location. >>>>> >>>>> FYI, I am using a virtual environment on Ubuntu 24.0.2 LTS with Python >>>>> 3.12.3. >>>>> The following packages related to uhd are installed via apt: >>>>> >>>>> *Status**Package Name**Version**Architecture**Description* >>>>> ii libgnuradio-uhd3.10.9t64:amd64 3.10.9.2-1.1ubuntu2 amd64 gnuradio >>>>> universal hardware driver functions >>>>> ii libuhd4.6.0t64:amd64 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal >>>>> hardware driver for Ettus Research products - library >>>>> ii python3-uhd 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal >>>>> hardware driver for Ettus Research products - Python3 >>>>> ii soapysdr0.8-module-uhd:amd64 0.4.1-4build4 amd64 UHD device >>>>> support for SoapySDR >>>>> ii uhd-doc 4.6.0.0+ds1-5.1ubuntu0.24.04.1 all universal hardware >>>>> driver for Ettus Research products - doc >>>>> ii uhd-host 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal hardware >>>>> driver for Ettus Research products - host apps >>>>> Best regards, >>>>> >>>>> Tim >>>>> >>>>> Op di 8 apr 2025 om 10:14 schreef Martin Braun <martin.braun@ettus.com >>>>> >: >>>>> >>>>>> Tim, >>>>>> >>>>>> at first glance, you're doing everything right. Thanks for taking the >>>>>> time and reading the docs. We'll need to look into this. >>>>>> >>>>>> I saw you also opened https://github.com/EttusResearch/uhd/issues/842, >>>>>> that's very helpful. Sorry I can't give you the right answer immediately! >>>>>> >>>>>> --M >>>>>> >>>>>> On Thu, Apr 3, 2025 at 11:28 AM Tim Vancauwenbergh < >>>>>> tim.vancauwenbergh13@gmail.com> wrote: >>>>>> >>>>>>> Hello >>>>>>> >>>>>>> >>>>>>> >>>>>>> I've recently run the uhd_power_cal.py script to calibrate the RX >>>>>>> paths of a B200mini using a calibrated signal generator. >>>>>>> >>>>>>> It generated two files, saved at /home/username/.local/share/uhd/cal: >>>>>>> >>>>>>> >>>>>>> >>>>>>> - b2xxmini_pwr_rx_rx2_33ECA1A#A.cal >>>>>>> >>>>>>> - b2xxmini_pwr_rx_tx+rx_33ECA1A#A.cal >>>>>>> >>>>>>> >>>>>>> >>>>>>> Using python, I have the following code: >>>>>>> >>>>>>> print(f"RX info: {usrp.get_usrp_rx_info()}") >>>>>>> >>>>>>> This returns the following: >>>>>>> >>>>>>> RX info: {'mboard_id': 'B200mini', 'mboard_name': 'B200mini', 'mboard_serial': '33ECA1A', 'module_serial': '33ECA1A', 'rx_antenna': 'TX/RX', 'rx_id': 'Unknown (0xffff)', 'rx_ref_power_key': 'b2xxmini_pwr_rx_tx+rx', 'rx_ref_power_serial': '33ECA1A#A', 'rx_serial': '', 'rx_subdev_name': 'FE-RX1', 'rx_subdev_spec': 'A:A'} >>>>>>> >>>>>>> Running the following functions return false however. >>>>>>> >>>>>>> usrp.has_rx_power_reference() >>>>>>> uhd.usrp.cal.database.has_cal_data('b2xxmini_pwr_rx_tx+rx', '33ECA1A#A'): >>>>>>> >>>>>>> Why? *How can I use the calibration file in python to obtain >>>>>>> estimated received power level at the RX side in dBm?* This is not >>>>>>> clear in the documentation. I would like to do this for the TX side as well. >>>>>>> >>>>>>> Thanks! >>>>>>> >>>>>>> References: >>>>>>> >>>>>>> https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34... >>>>>>> <https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34c> >>>>>>> >>>>>>> https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afb... >>>>>>> <https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afbfb7d9> >>>>>>> https://files.ettus.com/manual/page_power.html >>>>>>> _______________________________________________ >>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>>>> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >>>>>>> >>>>>> _______________________________________________ >>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>>> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >>>>>> >>>>> _______________________________________________ >> USRP-users mailing list -- usrp-users@lists.ettus.com >> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >> >
TV
Tim Vancauwenbergh
Mon, Apr 14, 2025 10:58 AM

Hi Martin,

running echo $XDG_DATA_HOME in the virtual environment gives:
/home/username/snap/code/188/.local/share
I am using Visual Studio Code, if it might help.

Tim

Op ma 14 apr 2025 om 11:51 schreef Martin Braun martin.braun@ettus.com:

Ah, those are more recent than UHD 4.6.

Is the environment variable XDG_DATA_HOME set on your system? What does
"echo $XDG_DATA_HOME" print for you?

BTW, if the only problem is that the cal data path is misattributed, then
you can set the environment variable
UHD_CAL_DATA_PATH=~/.local/uhd/shrae/uhd/cal. That should do the trick.
However, I would still like to figure out what caused this.

--M

On Mon, Apr 14, 2025 at 11:39 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello Martin,

only installed via apt, I did not specify snap.
uhd.get_lib_path() returns: /lib/x86_64-linux-gnu -> libuhd.so found here
uhd.get_pkg_path() returns: /lib
I am unable to use uhd.get_pkg_data_path() and uhd.get_module_paths() ->
uhd has no attribute

Tim

Op do 10 apr 2025 om 17:14 schreef Martin Braun martin.braun@ettus.com:

That was very helpful. So there's a discrepancy between what the
cal-tool thinks the path is (~/.local/...) and what UHD thinks it is
(~/snap/code/188/.local).

I'm also a bit surprised about that UHD path. Did you install UHD via
snap? (If yes, I didn't even know that was possible!). I know you say you
installed via apt, but I'm just baffled why UHD thinks this is the right
path.

There are other path APIs, here is what they look like on a system where
I install UHD, manually, into a random location:

uhd.get_lib_path()

'/home/mbr0wn/prefix/master/lib'

uhd.get_pkg_data_path()

'/home/mbr0wn/prefix/master/share/uhd'

uhd.get_cal_data_path()

'/home/mbr0wn/.local/share/uhd/cal'

The first (get_lib_path()) is the path where the libuhd.so file is
located. Is that the case for you?

You can see even there, the cal files are, by default, searched for in
~/.local/share/uhd/cal.

--M

On Thu, Apr 10, 2025 at 10:13 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello Martin,

it prints the following:
home/username/snap/code/188/.local/share/uhd/cal
That folder does not exist, the deepest path I can go is
home/username/snap/code/188/.local/share/
I manually created the folders uhd/cal and pasted the calibration files
there. Now the function usrp.has_rx_power_reference() returns True. I'll
investigate further.

Tim

Op wo 9 apr 2025 om 09:02 schreef Martin Braun <martin.braun@ettus.com

:

Tim,

sorry for suggesting this so late: What does this Python script print:

import uhd
print(uhd.get_cal_data_path())

?

On Tue, Apr 8, 2025 at 10:53 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello Martin,

thanks for your reply. It would be helpful to know where the driver
looks for the file, but until now I did not find any variable or function
to obtain this location.

FYI, I am using a virtual environment on Ubuntu 24.0.2 LTS with
Python 3.12.3.
The following packages related to uhd are installed via apt:

StatusPackage NameVersionArchitectureDescription
ii libgnuradio-uhd3.10.9t64:amd64 3.10.9.2-1.1ubuntu2 amd64 gnuradio
universal hardware driver functions
ii libuhd4.6.0t64:amd64 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal
hardware driver for Ettus Research products - library
ii python3-uhd 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal
hardware driver for Ettus Research products - Python3
ii soapysdr0.8-module-uhd:amd64 0.4.1-4build4 amd64 UHD device
support for SoapySDR
ii uhd-doc 4.6.0.0+ds1-5.1ubuntu0.24.04.1 all universal hardware
driver for Ettus Research products - doc
ii uhd-host 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal hardware
driver for Ettus Research products - host apps
Best regards,

Tim

Op di 8 apr 2025 om 10:14 schreef Martin Braun <
martin.braun@ettus.com>:

Tim,

at first glance, you're doing everything right. Thanks for taking
the time and reading the docs. We'll need to look into this.

I saw you also opened
https://github.com/EttusResearch/uhd/issues/842, that's very
helpful. Sorry I can't give you the right answer immediately!

--M

On Thu, Apr 3, 2025 at 11:28 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello

I've recently run the uhd_power_cal.py script to calibrate the RX
paths of a B200mini using a calibrated signal generator.

It generated two files, saved at
/home/username/.local/share/uhd/cal:

  • b2xxmini_pwr_rx_rx2_33ECA1A#A.cal

  • b2xxmini_pwr_rx_tx+rx_33ECA1A#A.cal

Using python, I have the following code:

print(f"RX info: {usrp.get_usrp_rx_info()}")

This returns the following:

RX info: {'mboard_id': 'B200mini', 'mboard_name': 'B200mini', 'mboard_serial': '33ECA1A', 'module_serial': '33ECA1A', 'rx_antenna': 'TX/RX', 'rx_id': 'Unknown (0xffff)', 'rx_ref_power_key': 'b2xxmini_pwr_rx_tx+rx', 'rx_ref_power_serial': '33ECA1A#A', 'rx_serial': '', 'rx_subdev_name': 'FE-RX1', 'rx_subdev_spec': 'A:A'}

Running the following functions return false however.

usrp.has_rx_power_reference()
uhd.usrp.cal.database.has_cal_data('b2xxmini_pwr_rx_tx+rx', '33ECA1A#A'):

Why? How can I use the calibration file in python to obtain
estimated received power level at the RX side in dBm?
This is not
clear in the documentation. I would like to do this for the TX side as well.

Thanks!

References:

https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34...
https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34c

https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afb...
https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afbfb7d9
https://files.ettus.com/manual/page_power.html


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com

Hi Martin, running echo $XDG_DATA_HOME in the virtual environment gives: /home/username/snap/code/188/.local/share I am using Visual Studio Code, if it might help. Tim Op ma 14 apr 2025 om 11:51 schreef Martin Braun <martin.braun@ettus.com>: > Ah, those are more recent than UHD 4.6. > > Is the environment variable XDG_DATA_HOME set on your system? What does > "echo $XDG_DATA_HOME" print for you? > > BTW, if the only problem is that the cal data path is misattributed, then > you can set the environment variable > UHD_CAL_DATA_PATH=~/.local/uhd/shrae/uhd/cal. That should do the trick. > However, I would still like to figure out what caused this. > > --M > > On Mon, Apr 14, 2025 at 11:39 AM Tim Vancauwenbergh < > tim.vancauwenbergh13@gmail.com> wrote: > >> Hello Martin, >> >> only installed via apt, I did not specify snap. >> uhd.get_lib_path() returns: /lib/x86_64-linux-gnu -> libuhd.so found here >> uhd.get_pkg_path() returns: /lib >> I am unable to use uhd.get_pkg_data_path() and uhd.get_module_paths() -> >> uhd has no attribute >> >> Tim >> >> Op do 10 apr 2025 om 17:14 schreef Martin Braun <martin.braun@ettus.com>: >> >>> That was very helpful. So there's a discrepancy between what the >>> cal-tool thinks the path is (~/.local/...) and what UHD thinks it is >>> (~/snap/code/188/.local). >>> >>> I'm also a bit surprised about that UHD path. Did you install UHD via >>> snap? (If yes, I didn't even know that was possible!). I know you say you >>> installed via apt, but I'm just baffled why UHD thinks this is the right >>> path. >>> >>> There are other path APIs, here is what they look like on a system where >>> I install UHD, manually, into a random location: >>> >>> >>> uhd.get_lib_path() >>> '/home/mbr0wn/prefix/master/lib' >>> >>> uhd.get_pkg_data_path() >>> '/home/mbr0wn/prefix/master/share/uhd' >>> >>> uhd.get_cal_data_path() >>> '/home/mbr0wn/.local/share/uhd/cal' >>> >>> >>> The first (get_lib_path()) is the path where the libuhd.so file is >>> located. Is that the case for you? >>> >>> You can see even there, the cal files are, by default, searched for in >>> ~/.local/share/uhd/cal. >>> >>> --M >>> >>> On Thu, Apr 10, 2025 at 10:13 AM Tim Vancauwenbergh < >>> tim.vancauwenbergh13@gmail.com> wrote: >>> >>>> Hello Martin, >>>> >>>> it prints the following: >>>> home/username/snap/code/188/.local/share/uhd/cal >>>> That folder does not exist, the deepest path I can go is >>>> home/username/snap/code/188/.local/share/ >>>> I manually created the folders uhd/cal and pasted the calibration files >>>> there. Now the function usrp.has_rx_power_reference() returns True. I'll >>>> investigate further. >>>> >>>> Tim >>>> >>>> Op wo 9 apr 2025 om 09:02 schreef Martin Braun <martin.braun@ettus.com >>>> >: >>>> >>>>> Tim, >>>>> >>>>> sorry for suggesting this so late: What does this Python script print: >>>>> >>>>> import uhd >>>>> print(uhd.get_cal_data_path()) >>>>> >>>>> >>>>> ? >>>>> >>>>> On Tue, Apr 8, 2025 at 10:53 AM Tim Vancauwenbergh < >>>>> tim.vancauwenbergh13@gmail.com> wrote: >>>>> >>>>>> Hello Martin, >>>>>> >>>>>> thanks for your reply. It would be helpful to know where the driver >>>>>> looks for the file, but until now I did not find any variable or function >>>>>> to obtain this location. >>>>>> >>>>>> FYI, I am using a virtual environment on Ubuntu 24.0.2 LTS with >>>>>> Python 3.12.3. >>>>>> The following packages related to uhd are installed via apt: >>>>>> >>>>>> *Status**Package Name**Version**Architecture**Description* >>>>>> ii libgnuradio-uhd3.10.9t64:amd64 3.10.9.2-1.1ubuntu2 amd64 gnuradio >>>>>> universal hardware driver functions >>>>>> ii libuhd4.6.0t64:amd64 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal >>>>>> hardware driver for Ettus Research products - library >>>>>> ii python3-uhd 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal >>>>>> hardware driver for Ettus Research products - Python3 >>>>>> ii soapysdr0.8-module-uhd:amd64 0.4.1-4build4 amd64 UHD device >>>>>> support for SoapySDR >>>>>> ii uhd-doc 4.6.0.0+ds1-5.1ubuntu0.24.04.1 all universal hardware >>>>>> driver for Ettus Research products - doc >>>>>> ii uhd-host 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal hardware >>>>>> driver for Ettus Research products - host apps >>>>>> Best regards, >>>>>> >>>>>> Tim >>>>>> >>>>>> Op di 8 apr 2025 om 10:14 schreef Martin Braun < >>>>>> martin.braun@ettus.com>: >>>>>> >>>>>>> Tim, >>>>>>> >>>>>>> at first glance, you're doing everything right. Thanks for taking >>>>>>> the time and reading the docs. We'll need to look into this. >>>>>>> >>>>>>> I saw you also opened >>>>>>> https://github.com/EttusResearch/uhd/issues/842, that's very >>>>>>> helpful. Sorry I can't give you the right answer immediately! >>>>>>> >>>>>>> --M >>>>>>> >>>>>>> On Thu, Apr 3, 2025 at 11:28 AM Tim Vancauwenbergh < >>>>>>> tim.vancauwenbergh13@gmail.com> wrote: >>>>>>> >>>>>>>> Hello >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> I've recently run the uhd_power_cal.py script to calibrate the RX >>>>>>>> paths of a B200mini using a calibrated signal generator. >>>>>>>> >>>>>>>> It generated two files, saved at >>>>>>>> /home/username/.local/share/uhd/cal: >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> - b2xxmini_pwr_rx_rx2_33ECA1A#A.cal >>>>>>>> >>>>>>>> - b2xxmini_pwr_rx_tx+rx_33ECA1A#A.cal >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Using python, I have the following code: >>>>>>>> >>>>>>>> print(f"RX info: {usrp.get_usrp_rx_info()}") >>>>>>>> >>>>>>>> This returns the following: >>>>>>>> >>>>>>>> RX info: {'mboard_id': 'B200mini', 'mboard_name': 'B200mini', 'mboard_serial': '33ECA1A', 'module_serial': '33ECA1A', 'rx_antenna': 'TX/RX', 'rx_id': 'Unknown (0xffff)', 'rx_ref_power_key': 'b2xxmini_pwr_rx_tx+rx', 'rx_ref_power_serial': '33ECA1A#A', 'rx_serial': '', 'rx_subdev_name': 'FE-RX1', 'rx_subdev_spec': 'A:A'} >>>>>>>> >>>>>>>> Running the following functions return false however. >>>>>>>> >>>>>>>> usrp.has_rx_power_reference() >>>>>>>> uhd.usrp.cal.database.has_cal_data('b2xxmini_pwr_rx_tx+rx', '33ECA1A#A'): >>>>>>>> >>>>>>>> Why? *How can I use the calibration file in python to obtain >>>>>>>> estimated received power level at the RX side in dBm?* This is not >>>>>>>> clear in the documentation. I would like to do this for the TX side as well. >>>>>>>> >>>>>>>> Thanks! >>>>>>>> >>>>>>>> References: >>>>>>>> >>>>>>>> https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34... >>>>>>>> <https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34c> >>>>>>>> >>>>>>>> https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afb... >>>>>>>> <https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afbfb7d9> >>>>>>>> https://files.ettus.com/manual/page_power.html >>>>>>>> _______________________________________________ >>>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>>>>> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >>>>>>>> >>>>>>> _______________________________________________ >>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>>>> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >>>>>>> >>>>>> _______________________________________________ >>> USRP-users mailing list -- usrp-users@lists.ettus.com >>> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >>> >> _______________________________________________ > USRP-users mailing list -- usrp-users@lists.ettus.com > To unsubscribe send an email to usrp-users-leave@lists.ettus.com >
MB
Martin Braun
Mon, Apr 14, 2025 12:37 PM

Hi Tim and others affected by this,

I think that narrows down. And I'm afraid UHD is not at fault here, or
rather, it has no way of knowing any better, at least I'm pretty confident
that is the case.

UHD is designed to follow the freedeskop specifications:
https://specifications.freedesktop.org/basedir-spec/latest/

...that means if you specify XDG_DATA_HOME, then UHD will use that value.
Not all data that UHD stores or loads is subject to this path, but the
calibration data are. So UHD is looking for the data in the "right spot",
and if you need a different path, you have to specify UHD_CAL_DATA_PATH
(see earlier message).

There's still two mysteries here:

  1. Why did usrp_calibrator store the data in /.local?

My hypothesis is that it was run in a context where XDG_DATA_HOME was not
set. The code to store and retrieve cal data is the same between
usrp_calibrator and normal UHD operations. That's how we make sure the
paths aren't the same.

  1. Why is XDG_DATA_HOME set in your case?

Maybe VS Code is installed from snap, and populates that variable? This is
ultimately a question for you, I'm afraid.

--M

On Mon, Apr 14, 2025 at 12:58 PM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hi Martin,

running echo $XDG_DATA_HOME in the virtual environment gives:
/home/username/snap/code/188/.local/share
I am using Visual Studio Code, if it might help.

Tim

Op ma 14 apr 2025 om 11:51 schreef Martin Braun martin.braun@ettus.com:

Ah, those are more recent than UHD 4.6.

Is the environment variable XDG_DATA_HOME set on your system? What does
"echo $XDG_DATA_HOME" print for you?

BTW, if the only problem is that the cal data path is misattributed, then
you can set the environment variable
UHD_CAL_DATA_PATH=~/.local/uhd/shrae/uhd/cal. That should do the trick.
However, I would still like to figure out what caused this.

--M

On Mon, Apr 14, 2025 at 11:39 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello Martin,

only installed via apt, I did not specify snap.
uhd.get_lib_path() returns: /lib/x86_64-linux-gnu -> libuhd.so found here
uhd.get_pkg_path() returns: /lib
I am unable to use uhd.get_pkg_data_path() and uhd.get_module_paths() ->
uhd has no attribute

Tim

Op do 10 apr 2025 om 17:14 schreef Martin Braun <martin.braun@ettus.com

:

That was very helpful. So there's a discrepancy between what the
cal-tool thinks the path is (~/.local/...) and what UHD thinks it is
(~/snap/code/188/.local).

I'm also a bit surprised about that UHD path. Did you install UHD via
snap? (If yes, I didn't even know that was possible!). I know you say you
installed via apt, but I'm just baffled why UHD thinks this is the right
path.

There are other path APIs, here is what they look like on a system
where I install UHD, manually, into a random location:

uhd.get_lib_path()

'/home/mbr0wn/prefix/master/lib'

uhd.get_pkg_data_path()

'/home/mbr0wn/prefix/master/share/uhd'

uhd.get_cal_data_path()

'/home/mbr0wn/.local/share/uhd/cal'

The first (get_lib_path()) is the path where the libuhd.so file is
located. Is that the case for you?

You can see even there, the cal files are, by default, searched for in
~/.local/share/uhd/cal.

--M

On Thu, Apr 10, 2025 at 10:13 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello Martin,

it prints the following:
home/username/snap/code/188/.local/share/uhd/cal
That folder does not exist, the deepest path I can go is
home/username/snap/code/188/.local/share/
I manually created the folders uhd/cal and pasted the calibration
files there. Now the function usrp.has_rx_power_reference() returns True.
I'll investigate further.

Tim

Op wo 9 apr 2025 om 09:02 schreef Martin Braun <martin.braun@ettus.com

:

Tim,

sorry for suggesting this so late: What does this Python script print:

import uhd
print(uhd.get_cal_data_path())

?

On Tue, Apr 8, 2025 at 10:53 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello Martin,

thanks for your reply. It would be helpful to know where the driver
looks for the file, but until now I did not find any variable or function
to obtain this location.

FYI, I am using a virtual environment on Ubuntu 24.0.2 LTS with
Python 3.12.3.
The following packages related to uhd are installed via apt:

StatusPackage NameVersionArchitectureDescription
ii libgnuradio-uhd3.10.9t64:amd64 3.10.9.2-1.1ubuntu2 amd64 gnuradio
universal hardware driver functions
ii libuhd4.6.0t64:amd64 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal
hardware driver for Ettus Research products - library
ii python3-uhd 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal
hardware driver for Ettus Research products - Python3
ii soapysdr0.8-module-uhd:amd64 0.4.1-4build4 amd64 UHD device
support for SoapySDR
ii uhd-doc 4.6.0.0+ds1-5.1ubuntu0.24.04.1 all universal hardware
driver for Ettus Research products - doc
ii uhd-host 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal hardware
driver for Ettus Research products - host apps
Best regards,

Tim

Op di 8 apr 2025 om 10:14 schreef Martin Braun <
martin.braun@ettus.com>:

Tim,

at first glance, you're doing everything right. Thanks for taking
the time and reading the docs. We'll need to look into this.

I saw you also opened
https://github.com/EttusResearch/uhd/issues/842, that's very
helpful. Sorry I can't give you the right answer immediately!

--M

On Thu, Apr 3, 2025 at 11:28 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello

I've recently run the uhd_power_cal.py script to calibrate the RX
paths of a B200mini using a calibrated signal generator.

It generated two files, saved at
/home/username/.local/share/uhd/cal:

  • b2xxmini_pwr_rx_rx2_33ECA1A#A.cal

  • b2xxmini_pwr_rx_tx+rx_33ECA1A#A.cal

Using python, I have the following code:

print(f"RX info: {usrp.get_usrp_rx_info()}")

This returns the following:

RX info: {'mboard_id': 'B200mini', 'mboard_name': 'B200mini', 'mboard_serial': '33ECA1A', 'module_serial': '33ECA1A', 'rx_antenna': 'TX/RX', 'rx_id': 'Unknown (0xffff)', 'rx_ref_power_key': 'b2xxmini_pwr_rx_tx+rx', 'rx_ref_power_serial': '33ECA1A#A', 'rx_serial': '', 'rx_subdev_name': 'FE-RX1', 'rx_subdev_spec': 'A:A'}

Running the following functions return false however.

usrp.has_rx_power_reference()
uhd.usrp.cal.database.has_cal_data('b2xxmini_pwr_rx_tx+rx', '33ECA1A#A'):

Why? How can I use the calibration file in python to obtain
estimated received power level at the RX side in dBm?
This is
not clear in the documentation. I would like to do this for the TX side as
well.

Thanks!

References:

https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34...
https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34c

https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afb...
https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afbfb7d9
https://files.ettus.com/manual/page_power.html


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com

Hi Tim and others affected by this, I think that narrows down. And I'm afraid UHD is not at fault here, or rather, it has no way of knowing any better, at least I'm pretty confident that is the case. UHD is designed to follow the freedeskop specifications: https://specifications.freedesktop.org/basedir-spec/latest/ ...that means if you specify XDG_DATA_HOME, then UHD will use that value. Not all data that UHD stores or loads is subject to this path, but the calibration data are. So UHD is looking for the data in the "right spot", and if you need a different path, you have to specify UHD_CAL_DATA_PATH (see earlier message). There's still two mysteries here: 1. Why did usrp_calibrator store the data in `/.local`? My hypothesis is that it was run in a context where XDG_DATA_HOME was not set. The code to store and retrieve cal data is the same between usrp_calibrator and normal UHD operations. That's how we make sure the paths aren't the same. 2. Why is XDG_DATA_HOME set in your case? Maybe VS Code is installed from snap, and populates that variable? This is ultimately a question for you, I'm afraid. --M On Mon, Apr 14, 2025 at 12:58 PM Tim Vancauwenbergh < tim.vancauwenbergh13@gmail.com> wrote: > Hi Martin, > > running echo $XDG_DATA_HOME in the virtual environment gives: > /home/username/snap/code/188/.local/share > I am using Visual Studio Code, if it might help. > > Tim > > Op ma 14 apr 2025 om 11:51 schreef Martin Braun <martin.braun@ettus.com>: > >> Ah, those are more recent than UHD 4.6. >> >> Is the environment variable XDG_DATA_HOME set on your system? What does >> "echo $XDG_DATA_HOME" print for you? >> >> BTW, if the only problem is that the cal data path is misattributed, then >> you can set the environment variable >> UHD_CAL_DATA_PATH=~/.local/uhd/shrae/uhd/cal. That should do the trick. >> However, I would still like to figure out what caused this. >> >> --M >> >> On Mon, Apr 14, 2025 at 11:39 AM Tim Vancauwenbergh < >> tim.vancauwenbergh13@gmail.com> wrote: >> >>> Hello Martin, >>> >>> only installed via apt, I did not specify snap. >>> uhd.get_lib_path() returns: /lib/x86_64-linux-gnu -> libuhd.so found here >>> uhd.get_pkg_path() returns: /lib >>> I am unable to use uhd.get_pkg_data_path() and uhd.get_module_paths() -> >>> uhd has no attribute >>> >>> Tim >>> >>> Op do 10 apr 2025 om 17:14 schreef Martin Braun <martin.braun@ettus.com >>> >: >>> >>>> That was very helpful. So there's a discrepancy between what the >>>> cal-tool thinks the path is (~/.local/...) and what UHD thinks it is >>>> (~/snap/code/188/.local). >>>> >>>> I'm also a bit surprised about that UHD path. Did you install UHD via >>>> snap? (If yes, I didn't even know that was possible!). I know you say you >>>> installed via apt, but I'm just baffled why UHD thinks this is the right >>>> path. >>>> >>>> There are other path APIs, here is what they look like on a system >>>> where I install UHD, manually, into a random location: >>>> >>>> >>> uhd.get_lib_path() >>>> '/home/mbr0wn/prefix/master/lib' >>>> >>> uhd.get_pkg_data_path() >>>> '/home/mbr0wn/prefix/master/share/uhd' >>>> >>> uhd.get_cal_data_path() >>>> '/home/mbr0wn/.local/share/uhd/cal' >>>> >>>> >>>> The first (get_lib_path()) is the path where the libuhd.so file is >>>> located. Is that the case for you? >>>> >>>> You can see even there, the cal files are, by default, searched for in >>>> ~/.local/share/uhd/cal. >>>> >>>> --M >>>> >>>> On Thu, Apr 10, 2025 at 10:13 AM Tim Vancauwenbergh < >>>> tim.vancauwenbergh13@gmail.com> wrote: >>>> >>>>> Hello Martin, >>>>> >>>>> it prints the following: >>>>> home/username/snap/code/188/.local/share/uhd/cal >>>>> That folder does not exist, the deepest path I can go is >>>>> home/username/snap/code/188/.local/share/ >>>>> I manually created the folders uhd/cal and pasted the calibration >>>>> files there. Now the function usrp.has_rx_power_reference() returns True. >>>>> I'll investigate further. >>>>> >>>>> Tim >>>>> >>>>> Op wo 9 apr 2025 om 09:02 schreef Martin Braun <martin.braun@ettus.com >>>>> >: >>>>> >>>>>> Tim, >>>>>> >>>>>> sorry for suggesting this so late: What does this Python script print: >>>>>> >>>>>> import uhd >>>>>> print(uhd.get_cal_data_path()) >>>>>> >>>>>> >>>>>> ? >>>>>> >>>>>> On Tue, Apr 8, 2025 at 10:53 AM Tim Vancauwenbergh < >>>>>> tim.vancauwenbergh13@gmail.com> wrote: >>>>>> >>>>>>> Hello Martin, >>>>>>> >>>>>>> thanks for your reply. It would be helpful to know where the driver >>>>>>> looks for the file, but until now I did not find any variable or function >>>>>>> to obtain this location. >>>>>>> >>>>>>> FYI, I am using a virtual environment on Ubuntu 24.0.2 LTS with >>>>>>> Python 3.12.3. >>>>>>> The following packages related to uhd are installed via apt: >>>>>>> >>>>>>> *Status**Package Name**Version**Architecture**Description* >>>>>>> ii libgnuradio-uhd3.10.9t64:amd64 3.10.9.2-1.1ubuntu2 amd64 gnuradio >>>>>>> universal hardware driver functions >>>>>>> ii libuhd4.6.0t64:amd64 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal >>>>>>> hardware driver for Ettus Research products - library >>>>>>> ii python3-uhd 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal >>>>>>> hardware driver for Ettus Research products - Python3 >>>>>>> ii soapysdr0.8-module-uhd:amd64 0.4.1-4build4 amd64 UHD device >>>>>>> support for SoapySDR >>>>>>> ii uhd-doc 4.6.0.0+ds1-5.1ubuntu0.24.04.1 all universal hardware >>>>>>> driver for Ettus Research products - doc >>>>>>> ii uhd-host 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal hardware >>>>>>> driver for Ettus Research products - host apps >>>>>>> Best regards, >>>>>>> >>>>>>> Tim >>>>>>> >>>>>>> Op di 8 apr 2025 om 10:14 schreef Martin Braun < >>>>>>> martin.braun@ettus.com>: >>>>>>> >>>>>>>> Tim, >>>>>>>> >>>>>>>> at first glance, you're doing everything right. Thanks for taking >>>>>>>> the time and reading the docs. We'll need to look into this. >>>>>>>> >>>>>>>> I saw you also opened >>>>>>>> https://github.com/EttusResearch/uhd/issues/842, that's very >>>>>>>> helpful. Sorry I can't give you the right answer immediately! >>>>>>>> >>>>>>>> --M >>>>>>>> >>>>>>>> On Thu, Apr 3, 2025 at 11:28 AM Tim Vancauwenbergh < >>>>>>>> tim.vancauwenbergh13@gmail.com> wrote: >>>>>>>> >>>>>>>>> Hello >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> I've recently run the uhd_power_cal.py script to calibrate the RX >>>>>>>>> paths of a B200mini using a calibrated signal generator. >>>>>>>>> >>>>>>>>> It generated two files, saved at >>>>>>>>> /home/username/.local/share/uhd/cal: >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> - b2xxmini_pwr_rx_rx2_33ECA1A#A.cal >>>>>>>>> >>>>>>>>> - b2xxmini_pwr_rx_tx+rx_33ECA1A#A.cal >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> Using python, I have the following code: >>>>>>>>> >>>>>>>>> print(f"RX info: {usrp.get_usrp_rx_info()}") >>>>>>>>> >>>>>>>>> This returns the following: >>>>>>>>> >>>>>>>>> RX info: {'mboard_id': 'B200mini', 'mboard_name': 'B200mini', 'mboard_serial': '33ECA1A', 'module_serial': '33ECA1A', 'rx_antenna': 'TX/RX', 'rx_id': 'Unknown (0xffff)', 'rx_ref_power_key': 'b2xxmini_pwr_rx_tx+rx', 'rx_ref_power_serial': '33ECA1A#A', 'rx_serial': '', 'rx_subdev_name': 'FE-RX1', 'rx_subdev_spec': 'A:A'} >>>>>>>>> >>>>>>>>> Running the following functions return false however. >>>>>>>>> >>>>>>>>> usrp.has_rx_power_reference() >>>>>>>>> uhd.usrp.cal.database.has_cal_data('b2xxmini_pwr_rx_tx+rx', '33ECA1A#A'): >>>>>>>>> >>>>>>>>> Why? *How can I use the calibration file in python to obtain >>>>>>>>> estimated received power level at the RX side in dBm?* This is >>>>>>>>> not clear in the documentation. I would like to do this for the TX side as >>>>>>>>> well. >>>>>>>>> >>>>>>>>> Thanks! >>>>>>>>> >>>>>>>>> References: >>>>>>>>> >>>>>>>>> https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34... >>>>>>>>> <https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34c> >>>>>>>>> >>>>>>>>> https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afb... >>>>>>>>> <https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afbfb7d9> >>>>>>>>> https://files.ettus.com/manual/page_power.html >>>>>>>>> _______________________________________________ >>>>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>>>>>> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >>>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>>>>> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >>>>>>>> >>>>>>> _______________________________________________ >>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >>>> >>> _______________________________________________ >> USRP-users mailing list -- usrp-users@lists.ettus.com >> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >> >
TV
Tim Vancauwenbergh
Tue, Apr 15, 2025 12:09 PM

Hi Martin,

I do other software development on that system too, and indeed I installed
VS code from the snap store. It could be that a different installation
defined the XDG_DATA_HOME between running the calibration and trying to use
the files.
Anyhow, the file is being used so I consider this solved. Thank you for the
support!

Tim

Op ma 14 apr 2025 om 14:38 schreef Martin Braun martin.braun@ettus.com:

Hi Tim and others affected by this,

I think that narrows down. And I'm afraid UHD is not at fault here, or
rather, it has no way of knowing any better, at least I'm pretty confident
that is the case.

UHD is designed to follow the freedeskop specifications:
https://specifications.freedesktop.org/basedir-spec/latest/

...that means if you specify XDG_DATA_HOME, then UHD will use that value.
Not all data that UHD stores or loads is subject to this path, but the
calibration data are. So UHD is looking for the data in the "right spot",
and if you need a different path, you have to specify UHD_CAL_DATA_PATH
(see earlier message).

There's still two mysteries here:

  1. Why did usrp_calibrator store the data in /.local?

My hypothesis is that it was run in a context where XDG_DATA_HOME was not
set. The code to store and retrieve cal data is the same between
usrp_calibrator and normal UHD operations. That's how we make sure the
paths aren't the same.

  1. Why is XDG_DATA_HOME set in your case?

Maybe VS Code is installed from snap, and populates that variable? This is
ultimately a question for you, I'm afraid.

--M

On Mon, Apr 14, 2025 at 12:58 PM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hi Martin,

running echo $XDG_DATA_HOME in the virtual environment gives:
/home/username/snap/code/188/.local/share
I am using Visual Studio Code, if it might help.

Tim

Op ma 14 apr 2025 om 11:51 schreef Martin Braun martin.braun@ettus.com:

Ah, those are more recent than UHD 4.6.

Is the environment variable XDG_DATA_HOME set on your system? What does
"echo $XDG_DATA_HOME" print for you?

BTW, if the only problem is that the cal data path is misattributed,
then you can set the environment variable
UHD_CAL_DATA_PATH=~/.local/uhd/shrae/uhd/cal. That should do the trick.
However, I would still like to figure out what caused this.

--M

On Mon, Apr 14, 2025 at 11:39 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello Martin,

only installed via apt, I did not specify snap.
uhd.get_lib_path() returns: /lib/x86_64-linux-gnu -> libuhd.so found
here
uhd.get_pkg_path() returns: /lib
I am unable to use uhd.get_pkg_data_path() and uhd.get_module_paths()
-> uhd has no attribute

Tim

Op do 10 apr 2025 om 17:14 schreef Martin Braun <martin.braun@ettus.com

:

That was very helpful. So there's a discrepancy between what the
cal-tool thinks the path is (~/.local/...) and what UHD thinks it is
(~/snap/code/188/.local).

I'm also a bit surprised about that UHD path. Did you install UHD via
snap? (If yes, I didn't even know that was possible!). I know you say you
installed via apt, but I'm just baffled why UHD thinks this is the right
path.

There are other path APIs, here is what they look like on a system
where I install UHD, manually, into a random location:

uhd.get_lib_path()

'/home/mbr0wn/prefix/master/lib'

uhd.get_pkg_data_path()

'/home/mbr0wn/prefix/master/share/uhd'

uhd.get_cal_data_path()

'/home/mbr0wn/.local/share/uhd/cal'

The first (get_lib_path()) is the path where the libuhd.so file is
located. Is that the case for you?

You can see even there, the cal files are, by default, searched for in
~/.local/share/uhd/cal.

--M

On Thu, Apr 10, 2025 at 10:13 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello Martin,

it prints the following:
home/username/snap/code/188/.local/share/uhd/cal
That folder does not exist, the deepest path I can go is
home/username/snap/code/188/.local/share/
I manually created the folders uhd/cal and pasted the calibration
files there. Now the function usrp.has_rx_power_reference() returns True.
I'll investigate further.

Tim

Op wo 9 apr 2025 om 09:02 schreef Martin Braun <
martin.braun@ettus.com>:

Tim,

sorry for suggesting this so late: What does this Python script
print:

import uhd
print(uhd.get_cal_data_path())

?

On Tue, Apr 8, 2025 at 10:53 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello Martin,

thanks for your reply. It would be helpful to know where the driver
looks for the file, but until now I did not find any variable or function
to obtain this location.

FYI, I am using a virtual environment on Ubuntu 24.0.2 LTS with
Python 3.12.3.
The following packages related to uhd are installed via apt:

StatusPackage NameVersionArchitectureDescription
ii libgnuradio-uhd3.10.9t64:amd64 3.10.9.2-1.1ubuntu2 amd64 gnuradio
universal hardware driver functions
ii libuhd4.6.0t64:amd64 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal
hardware driver for Ettus Research products - library
ii python3-uhd 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal
hardware driver for Ettus Research products - Python3
ii soapysdr0.8-module-uhd:amd64 0.4.1-4build4 amd64 UHD device
support for SoapySDR
ii uhd-doc 4.6.0.0+ds1-5.1ubuntu0.24.04.1 all universal hardware
driver for Ettus Research products - doc
ii uhd-host 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal
hardware driver for Ettus Research products - host apps
Best regards,

Tim

Op di 8 apr 2025 om 10:14 schreef Martin Braun <
martin.braun@ettus.com>:

Tim,

at first glance, you're doing everything right. Thanks for taking
the time and reading the docs. We'll need to look into this.

I saw you also opened
https://github.com/EttusResearch/uhd/issues/842, that's very
helpful. Sorry I can't give you the right answer immediately!

--M

On Thu, Apr 3, 2025 at 11:28 AM Tim Vancauwenbergh <
tim.vancauwenbergh13@gmail.com> wrote:

Hello

I've recently run the uhd_power_cal.py script to calibrate the RX
paths of a B200mini using a calibrated signal generator.

It generated two files, saved at
/home/username/.local/share/uhd/cal:

  • b2xxmini_pwr_rx_rx2_33ECA1A#A.cal

  • b2xxmini_pwr_rx_tx+rx_33ECA1A#A.cal

Using python, I have the following code:

print(f"RX info: {usrp.get_usrp_rx_info()}")

This returns the following:

RX info: {'mboard_id': 'B200mini', 'mboard_name': 'B200mini', 'mboard_serial': '33ECA1A', 'module_serial': '33ECA1A', 'rx_antenna': 'TX/RX', 'rx_id': 'Unknown (0xffff)', 'rx_ref_power_key': 'b2xxmini_pwr_rx_tx+rx', 'rx_ref_power_serial': '33ECA1A#A', 'rx_serial': '', 'rx_subdev_name': 'FE-RX1', 'rx_subdev_spec': 'A:A'}

Running the following functions return false however.

usrp.has_rx_power_reference()
uhd.usrp.cal.database.has_cal_data('b2xxmini_pwr_rx_tx+rx', '33ECA1A#A'):

Why? How can I use the calibration file in python to obtain
estimated received power level at the RX side in dBm?
This is
not clear in the documentation. I would like to do this for the TX side as
well.

Thanks!

References:

https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34...
https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34c

https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afb...
https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afbfb7d9
https://files.ettus.com/manual/page_power.html


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com


USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-leave@lists.ettus.com

Hi Martin, I do other software development on that system too, and indeed I installed VS code from the snap store. It could be that a different installation defined the XDG_DATA_HOME between running the calibration and trying to use the files. Anyhow, the file is being used so I consider this solved. Thank you for the support! Tim Op ma 14 apr 2025 om 14:38 schreef Martin Braun <martin.braun@ettus.com>: > Hi Tim and others affected by this, > > I think that narrows down. And I'm afraid UHD is not at fault here, or > rather, it has no way of knowing any better, at least I'm pretty confident > that is the case. > > UHD is designed to follow the freedeskop specifications: > https://specifications.freedesktop.org/basedir-spec/latest/ > > ...that means if you specify XDG_DATA_HOME, then UHD will use that value. > Not all data that UHD stores or loads is subject to this path, but the > calibration data are. So UHD is looking for the data in the "right spot", > and if you need a different path, you have to specify UHD_CAL_DATA_PATH > (see earlier message). > > There's still two mysteries here: > > 1. Why did usrp_calibrator store the data in `/.local`? > > My hypothesis is that it was run in a context where XDG_DATA_HOME was not > set. The code to store and retrieve cal data is the same between > usrp_calibrator and normal UHD operations. That's how we make sure the > paths aren't the same. > > 2. Why is XDG_DATA_HOME set in your case? > > Maybe VS Code is installed from snap, and populates that variable? This is > ultimately a question for you, I'm afraid. > > --M > > On Mon, Apr 14, 2025 at 12:58 PM Tim Vancauwenbergh < > tim.vancauwenbergh13@gmail.com> wrote: > >> Hi Martin, >> >> running echo $XDG_DATA_HOME in the virtual environment gives: >> /home/username/snap/code/188/.local/share >> I am using Visual Studio Code, if it might help. >> >> Tim >> >> Op ma 14 apr 2025 om 11:51 schreef Martin Braun <martin.braun@ettus.com>: >> >>> Ah, those are more recent than UHD 4.6. >>> >>> Is the environment variable XDG_DATA_HOME set on your system? What does >>> "echo $XDG_DATA_HOME" print for you? >>> >>> BTW, if the only problem is that the cal data path is misattributed, >>> then you can set the environment variable >>> UHD_CAL_DATA_PATH=~/.local/uhd/shrae/uhd/cal. That should do the trick. >>> However, I would still like to figure out what caused this. >>> >>> --M >>> >>> On Mon, Apr 14, 2025 at 11:39 AM Tim Vancauwenbergh < >>> tim.vancauwenbergh13@gmail.com> wrote: >>> >>>> Hello Martin, >>>> >>>> only installed via apt, I did not specify snap. >>>> uhd.get_lib_path() returns: /lib/x86_64-linux-gnu -> libuhd.so found >>>> here >>>> uhd.get_pkg_path() returns: /lib >>>> I am unable to use uhd.get_pkg_data_path() and uhd.get_module_paths() >>>> -> uhd has no attribute >>>> >>>> Tim >>>> >>>> Op do 10 apr 2025 om 17:14 schreef Martin Braun <martin.braun@ettus.com >>>> >: >>>> >>>>> That was very helpful. So there's a discrepancy between what the >>>>> cal-tool thinks the path is (~/.local/...) and what UHD thinks it is >>>>> (~/snap/code/188/.local). >>>>> >>>>> I'm also a bit surprised about that UHD path. Did you install UHD via >>>>> snap? (If yes, I didn't even know that was possible!). I know you say you >>>>> installed via apt, but I'm just baffled why UHD thinks this is the right >>>>> path. >>>>> >>>>> There are other path APIs, here is what they look like on a system >>>>> where I install UHD, manually, into a random location: >>>>> >>>>> >>> uhd.get_lib_path() >>>>> '/home/mbr0wn/prefix/master/lib' >>>>> >>> uhd.get_pkg_data_path() >>>>> '/home/mbr0wn/prefix/master/share/uhd' >>>>> >>> uhd.get_cal_data_path() >>>>> '/home/mbr0wn/.local/share/uhd/cal' >>>>> >>>>> >>>>> The first (get_lib_path()) is the path where the libuhd.so file is >>>>> located. Is that the case for you? >>>>> >>>>> You can see even there, the cal files are, by default, searched for in >>>>> ~/.local/share/uhd/cal. >>>>> >>>>> --M >>>>> >>>>> On Thu, Apr 10, 2025 at 10:13 AM Tim Vancauwenbergh < >>>>> tim.vancauwenbergh13@gmail.com> wrote: >>>>> >>>>>> Hello Martin, >>>>>> >>>>>> it prints the following: >>>>>> home/username/snap/code/188/.local/share/uhd/cal >>>>>> That folder does not exist, the deepest path I can go is >>>>>> home/username/snap/code/188/.local/share/ >>>>>> I manually created the folders uhd/cal and pasted the calibration >>>>>> files there. Now the function usrp.has_rx_power_reference() returns True. >>>>>> I'll investigate further. >>>>>> >>>>>> Tim >>>>>> >>>>>> Op wo 9 apr 2025 om 09:02 schreef Martin Braun < >>>>>> martin.braun@ettus.com>: >>>>>> >>>>>>> Tim, >>>>>>> >>>>>>> sorry for suggesting this so late: What does this Python script >>>>>>> print: >>>>>>> >>>>>>> import uhd >>>>>>> print(uhd.get_cal_data_path()) >>>>>>> >>>>>>> >>>>>>> ? >>>>>>> >>>>>>> On Tue, Apr 8, 2025 at 10:53 AM Tim Vancauwenbergh < >>>>>>> tim.vancauwenbergh13@gmail.com> wrote: >>>>>>> >>>>>>>> Hello Martin, >>>>>>>> >>>>>>>> thanks for your reply. It would be helpful to know where the driver >>>>>>>> looks for the file, but until now I did not find any variable or function >>>>>>>> to obtain this location. >>>>>>>> >>>>>>>> FYI, I am using a virtual environment on Ubuntu 24.0.2 LTS with >>>>>>>> Python 3.12.3. >>>>>>>> The following packages related to uhd are installed via apt: >>>>>>>> >>>>>>>> *Status**Package Name**Version**Architecture**Description* >>>>>>>> ii libgnuradio-uhd3.10.9t64:amd64 3.10.9.2-1.1ubuntu2 amd64 gnuradio >>>>>>>> universal hardware driver functions >>>>>>>> ii libuhd4.6.0t64:amd64 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal >>>>>>>> hardware driver for Ettus Research products - library >>>>>>>> ii python3-uhd 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal >>>>>>>> hardware driver for Ettus Research products - Python3 >>>>>>>> ii soapysdr0.8-module-uhd:amd64 0.4.1-4build4 amd64 UHD device >>>>>>>> support for SoapySDR >>>>>>>> ii uhd-doc 4.6.0.0+ds1-5.1ubuntu0.24.04.1 all universal hardware >>>>>>>> driver for Ettus Research products - doc >>>>>>>> ii uhd-host 4.6.0.0+ds1-5.1ubuntu0.24.04.1 amd64 universal >>>>>>>> hardware driver for Ettus Research products - host apps >>>>>>>> Best regards, >>>>>>>> >>>>>>>> Tim >>>>>>>> >>>>>>>> Op di 8 apr 2025 om 10:14 schreef Martin Braun < >>>>>>>> martin.braun@ettus.com>: >>>>>>>> >>>>>>>>> Tim, >>>>>>>>> >>>>>>>>> at first glance, you're doing everything right. Thanks for taking >>>>>>>>> the time and reading the docs. We'll need to look into this. >>>>>>>>> >>>>>>>>> I saw you also opened >>>>>>>>> https://github.com/EttusResearch/uhd/issues/842, that's very >>>>>>>>> helpful. Sorry I can't give you the right answer immediately! >>>>>>>>> >>>>>>>>> --M >>>>>>>>> >>>>>>>>> On Thu, Apr 3, 2025 at 11:28 AM Tim Vancauwenbergh < >>>>>>>>> tim.vancauwenbergh13@gmail.com> wrote: >>>>>>>>> >>>>>>>>>> Hello >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> I've recently run the uhd_power_cal.py script to calibrate the RX >>>>>>>>>> paths of a B200mini using a calibrated signal generator. >>>>>>>>>> >>>>>>>>>> It generated two files, saved at >>>>>>>>>> /home/username/.local/share/uhd/cal: >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> - b2xxmini_pwr_rx_rx2_33ECA1A#A.cal >>>>>>>>>> >>>>>>>>>> - b2xxmini_pwr_rx_tx+rx_33ECA1A#A.cal >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Using python, I have the following code: >>>>>>>>>> >>>>>>>>>> print(f"RX info: {usrp.get_usrp_rx_info()}") >>>>>>>>>> >>>>>>>>>> This returns the following: >>>>>>>>>> >>>>>>>>>> RX info: {'mboard_id': 'B200mini', 'mboard_name': 'B200mini', 'mboard_serial': '33ECA1A', 'module_serial': '33ECA1A', 'rx_antenna': 'TX/RX', 'rx_id': 'Unknown (0xffff)', 'rx_ref_power_key': 'b2xxmini_pwr_rx_tx+rx', 'rx_ref_power_serial': '33ECA1A#A', 'rx_serial': '', 'rx_subdev_name': 'FE-RX1', 'rx_subdev_spec': 'A:A'} >>>>>>>>>> >>>>>>>>>> Running the following functions return false however. >>>>>>>>>> >>>>>>>>>> usrp.has_rx_power_reference() >>>>>>>>>> uhd.usrp.cal.database.has_cal_data('b2xxmini_pwr_rx_tx+rx', '33ECA1A#A'): >>>>>>>>>> >>>>>>>>>> Why? *How can I use the calibration file in python to obtain >>>>>>>>>> estimated received power level at the RX side in dBm?* This is >>>>>>>>>> not clear in the documentation. I would like to do this for the TX side as >>>>>>>>>> well. >>>>>>>>>> >>>>>>>>>> Thanks! >>>>>>>>>> >>>>>>>>>> References: >>>>>>>>>> >>>>>>>>>> https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34... >>>>>>>>>> <https://files.ettus.com/manual/classuhd_1_1usrp_1_1multi__usrp.html#a1dadf323c5f00ac4f93b231adc13e34c> >>>>>>>>>> >>>>>>>>>> https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afb... >>>>>>>>>> <https://files.ettus.com/manual/classuhd_1_1usrp_1_1cal_1_1database.html#a5605b43f778efc10f29cb616afbfb7d9> >>>>>>>>>> https://files.ettus.com/manual/page_power.html >>>>>>>>>> _______________________________________________ >>>>>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>>>>>>> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >>>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>>>>>> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >>>>>>>>> >>>>>>>> _______________________________________________ >>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >>>>> >>>> _______________________________________________ >>> USRP-users mailing list -- usrp-users@lists.ettus.com >>> To unsubscribe send an email to usrp-users-leave@lists.ettus.com >>> >> _______________________________________________ > USRP-users mailing list -- usrp-users@lists.ettus.com > To unsubscribe send an email to usrp-users-leave@lists.ettus.com >