Iq balance calibration

Hello,

I am trying to adapt the existing cal_tx/rx_iq_balance utility to a
development daughterboard.

Initially, I am trying to just get the existing code running and then I
intend to modify it if it is not compatible out-of-the-box with my
dboard.

At the moment, I am working through a series of obstacles that throw
errors
of the “this device is not supported” nature.

I have found the code that has a hardcoded check list for known boards
and
am adding mine to the list.

There is one part in usrp_cal_utils.hpp that requires modification but
I am
unsure about it.

There is a section that checks motherboard names, USRP2, B100, E100, and
E110.
I can deal with the daughterboard issues, but do not know why the USRP1
does
not show up in the list of checks.

Also, if I was to simply add the USRP1 to the code, I’m not so sure what
the
tx/rx_rates are referring to in the other boards, and what would be a
suitable value for the USRP1.

This is the code section I am referring to:

static inline void set_optimum_defaults(uhd::usrp::multi_usrp::sptr
usrp){
uhd::property_tree::sptr tree = usrp->get_device()->get_tree();

const uhd::fs_path mb_path = "/mboards/0";
const std::string mb_name = tree->access<std::string>(mb_path /

“name”).get();
if (mb_name.find(“USRP2”) != std::string::npos or
mb_name.find(“N200”)
!= std::string::npos or mb_name.find(“N210”) != std::string::npos){
usrp->set_tx_rate(12.5e6);
usrp->set_rx_rate(12.5e6);
}
else if (mb_name.find(“B100”) != std::string::npos){
usrp->set_tx_rate(4e6);
usrp->set_rx_rate(4e6);
}
else if (mb_name.find(“E100”) != std::string::npos or
mb_name.find(“E110”) != std::string::npos){
usrp->set_tx_rate(4e6);
usrp->set_rx_rate(8e6);
}
else{
throw std::runtime_error(“self-calibration is not supported for
this
hardware”);
^^^ THIS IS THE CASE RUN WITH USRP1 ^^^
}

So in summary, my questions are:

  1. Can I simply expand the code to include the USRP1 like so:

else if (mb_name.find(“USRP1”) != std::string::npos){
usrp->set_tx_rate(xxx);
usrp->set_rx_rate(xxx);

Or is the USRP1 physically incompatible?

  1. If it is compatible, what would be appropriate for values xxx, or at
    least what values in the radio system is this code setting?

Thanks in advance

Alex


View this message in context:
http://gnuradio.4.n7.nabble.com/iq-balance-calibration-tp44039.html
Sent from the GnuRadio mailing list archive at Nabble.com.

I should point out that i have made the changes:

adding:

else if (mb_name.find(“USRP1”) != std::string::npos){
usrp->set_tx_rate(4e6);
usrp->set_rx_rate(4e6);
}

My questions still stand as i am not entirely sure of what concerns may
exist in terms of compatibility, it strikes me as a bit strange that
USRP1
does not exist in the list by default…

The tx_rate I am assuming to be the UHD ↔ USRP1 sample rate.


View this message in context:
http://gnuradio.4.n7.nabble.com/iq-balance-calibration-tp44039p44040.html
Sent from the GnuRadio mailing list archive at Nabble.com.

On 10/09/2013 07:15 AM, Alexander B wrote:

 const uhd::fs_path mb_path = "/mboards/0";
 }

Or is the USRP1 physically incompatible?
The USRP1 doesn’t have the necessary support in the FPGA for this, which
is why it isn’t supported in these utilities.

Ahh… ok

Thank you Marcus. i’ll wait for my USRP2 we ordered then and try again.

Alex


View this message in context:
http://gnuradio.4.n7.nabble.com/iq-balance-calibration-tp44039p44043.html
Sent from the GnuRadio mailing list archive at Nabble.com.