diff options
| -rw-r--r-- | host/lib/usrp/common/apply_corrections.cpp | 42 | ||||
| -rw-r--r-- | host/utils/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | host/utils/usrp_cal_rx_iq_balance.cpp (renamed from host/utils/usrp_gen_rx_iq_cal_table.cpp) | 2 | ||||
| -rw-r--r-- | host/utils/usrp_cal_tx_dc_offset.cpp (renamed from host/utils/usrp_gen_tx_dc_cal_table.cpp) | 2 | ||||
| -rw-r--r-- | host/utils/usrp_cal_tx_iq_balance.cpp (renamed from host/utils/usrp_gen_tx_iq_cal_table.cpp) | 2 | ||||
| -rw-r--r-- | host/utils/usrp_cal_utils.hpp | 2 | 
6 files changed, 46 insertions, 10 deletions
| diff --git a/host/lib/usrp/common/apply_corrections.cpp b/host/lib/usrp/common/apply_corrections.cpp index 720c51633..e3ec9baab 100644 --- a/host/lib/usrp/common/apply_corrections.cpp +++ b/host/lib/usrp/common/apply_corrections.cpp @@ -54,7 +54,7 @@ static bool fe_cal_comp(fe_cal_t a, fe_cal_t b){  static uhd::dict<std::string, std::vector<fe_cal_t> > fe_cal_cache; -static std::complex<double> get_fe_iq_correction( +static std::complex<double> get_fe_dc_correction(      const std::string &key, const double lo_freq  ){      const std::vector<fe_cal_t> &datas = fe_cal_cache[key]; @@ -80,6 +80,35 @@ static std::complex<double> get_fe_iq_correction(      );  } +static std::complex<double> get_fe_iq_correction( +    const std::string &key, const double lo_freq +){ +    const std::vector<fe_cal_t> &datas = fe_cal_cache[key]; + +    //search for lo freq +    size_t lo_index = 0; +    size_t hi_index = datas.size()-1; +    for (size_t i = 0; i < datas.size(); i++){ +        if (datas[i].lo_freq > lo_freq){ +            hi_index = i; +            break; +        } +        lo_index = i; +    } + +    if (lo_index == 0) return std::complex<double>(datas[lo_index].iq_corr_real, datas[lo_index].iq_corr_imag); +    if (hi_index == lo_index) return std::complex<double>(datas[hi_index].iq_corr_real, datas[hi_index].iq_corr_imag); + +    const std::complex<double> lo_val(datas[lo_index].iq_corr_real, datas[lo_index].iq_corr_imag); +    const std::complex<double> hi_val(datas[hi_index].iq_corr_real, datas[hi_index].iq_corr_imag); + +    //interpolation time +    return std::polar<double>( +        linear_interp(lo_freq, datas[lo_index].lo_freq, std::abs(lo_val), datas[hi_index].lo_freq, std::abs(hi_val)), +        linear_interp(lo_freq, datas[lo_index].lo_freq, std::arg(lo_val), datas[hi_index].lo_freq, std::arg(hi_val)) +    ); +} +  static void apply_fe_corrections(      uhd::property_tree::sptr sub_tree,      const uhd::fs_path &db_path, @@ -124,8 +153,15 @@ static void apply_fe_corrections(      } -    sub_tree->access<std::complex<double> >(fe_path) -        .set(get_fe_iq_correction(cal_data_path.string(), lo_freq)); +    if (file_prefix.find("dc") != std::string::npos){ +        sub_tree->access<std::complex<double> >(fe_path) +            .set(get_fe_dc_correction(cal_data_path.string(), lo_freq)); +    } +    else if (file_prefix.find("iq") != std::string::npos){ +        sub_tree->access<std::complex<double> >(fe_path) +            .set(get_fe_iq_correction(cal_data_path.string(), lo_freq)); +    } +    else throw uhd::runtime_error("could not determine interpolation function");  }  /*********************************************************************** diff --git a/host/utils/CMakeLists.txt b/host/utils/CMakeLists.txt index 6c17be22c..92807f882 100644 --- a/host/utils/CMakeLists.txt +++ b/host/utils/CMakeLists.txt @@ -37,9 +37,9 @@ ENDFOREACH(util_source)  SET(util_share_sources      usrp_burn_db_eeprom.cpp      usrp_burn_mb_eeprom.cpp -    usrp_gen_rx_iq_cal_table.cpp -    usrp_gen_tx_iq_cal_table.cpp -    usrp_gen_tx_dc_cal_table.cpp +    usrp_cal_rx_iq_balance.cpp +    usrp_cal_tx_dc_offset.cpp +    usrp_cal_tx_iq_balance.cpp  )  IF(ENABLE_USB) diff --git a/host/utils/usrp_gen_rx_iq_cal_table.cpp b/host/utils/usrp_cal_rx_iq_balance.cpp index 71c447e65..7b7fdaec9 100644 --- a/host/utils/usrp_gen_rx_iq_cal_table.cpp +++ b/host/utils/usrp_cal_rx_iq_balance.cpp @@ -138,7 +138,7 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){      //print the help message      if (vm.count("help")){ -        std::cout << boost::format("USRP Generate RX Frontend Calibration Table %s") % desc << std::endl; +        std::cout << boost::format("USRP Generate RX IQ Balance Calibration Table %s") % desc << std::endl;          std::cout <<              "This application measures leakage between RX and TX on an XCVR daughterboard to self-calibrate.\n"              << std::endl; diff --git a/host/utils/usrp_gen_tx_dc_cal_table.cpp b/host/utils/usrp_cal_tx_dc_offset.cpp index 570203496..2c75242c7 100644 --- a/host/utils/usrp_gen_tx_dc_cal_table.cpp +++ b/host/utils/usrp_cal_tx_dc_offset.cpp @@ -140,7 +140,7 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){      //print the help message      if (vm.count("help")){ -        std::cout << boost::format("USRP Generate TX Frontend Calibration Table %s") % desc << std::endl; +        std::cout << boost::format("USRP Generate TX DC Offset Calibration Table %s") % desc << std::endl;          std::cout <<              "This application measures leakage between RX and TX on an XCVR daughterboard to self-calibrate.\n"              << std::endl; diff --git a/host/utils/usrp_gen_tx_iq_cal_table.cpp b/host/utils/usrp_cal_tx_iq_balance.cpp index a2b98d8e6..c7cda49c7 100644 --- a/host/utils/usrp_gen_tx_iq_cal_table.cpp +++ b/host/utils/usrp_cal_tx_iq_balance.cpp @@ -140,7 +140,7 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){      //print the help message      if (vm.count("help")){ -        std::cout << boost::format("USRP Generate TX Frontend Calibration Table %s") % desc << std::endl; +        std::cout << boost::format("USRP Generate TX IQ Balance Calibration Table %s") % desc << std::endl;          std::cout <<              "This application measures leakage between RX and TX on an XCVR daughterboard to self-calibrate.\n"              << std::endl; diff --git a/host/utils/usrp_cal_utils.hpp b/host/utils/usrp_cal_utils.hpp index c9695d305..c08d869ed 100644 --- a/host/utils/usrp_cal_utils.hpp +++ b/host/utils/usrp_cal_utils.hpp @@ -39,7 +39,7 @@ static const size_t wave_table_len = 8192;  static const size_t num_search_steps = 5;  static const size_t num_search_iters = 7;  static const size_t skip_initial_samps = 20; -static const double default_freq_step = 13.7e3; +static const double default_freq_step = 13.7e6;  static const size_t default_num_samps = 10000;  /*********************************************************************** | 
