#include <uhd/cal/pwr_cal.hpp>
Public Types | |
using | sptr = std::shared_ptr< pwr_cal > |
Public Member Functions | |
virtual void | add_power_table (const std::map< double, double > &gain_power_map, const double min_power, const double max_power, const double freq, const boost::optional< int > temperature=boost::none)=0 |
virtual void | clear ()=0 |
virtual void | set_temperature (const int temperature)=0 |
virtual int | get_temperature () const =0 |
Return the current default temperature. More... | |
virtual void | set_ref_gain (const double gain)=0 |
virtual double | get_ref_gain () const =0 |
virtual uhd::meta_range_t | get_power_limits (const double freq, const boost::optional< int > temperature=boost::none) const =0 |
virtual double | get_power (const double gain, const double freq, const boost::optional< int > temperature=boost::none) const =0 |
virtual double | get_gain (const double power_dbm, const double freq, const boost::optional< int > temperature=boost::none) const =0 |
Public Member Functions inherited from uhd::usrp::cal::container | |
virtual | ~container ()=default |
virtual std::string | get_name () const =0 |
Return the name of this calibration table. More... | |
virtual std::string | get_serial () const =0 |
Return the device serial of this calibration table. More... | |
virtual uint64_t | get_timestamp () const =0 |
Timestamp of acquisition time. More... | |
virtual std::vector< uint8_t > | serialize ()=0 |
Return a serialized version of this container. More... | |
virtual void | deserialize (const std::vector< uint8_t > &data)=0 |
Populate this class from the serialized data. More... | |
Static Public Member Functions | |
static sptr | make (const std::string &name, const std::string &serial, const uint64_t timestamp) |
Factory for new cal data sets. More... | |
static sptr | make () |
Default factory. More... | |
Static Public Member Functions inherited from uhd::usrp::cal::container | |
template<typename container_type > | |
static std::shared_ptr< container_type > | make (const std::vector< uint8_t > &data) |
Generic factory for cal data from serialized data. More... | |
Class that stores power levels (in dBm) at various gains, frequencies, and temperatures.
This container class is suitable for all cases where devices want to store a gain-to-power mapping from a single, overall gain value.
The underlying data structure stores the power level for every gain/frequency point that is part of this data set. It can also do a reverse look-up of gain values for a given power value.
The interpolation algorithms assume a monotonic gain/power profile, i.e., f(gain) = power is monotonically increasing. If the power is not monotonically increasing, the interpolation algorithms still work, but get_gain() might produce a greater than necessary interpolation error. For that case, this class provides get_gain_coerced(), which helps with both coercion of the interpolated gain into a gain value that can be used at the call site, as well as minimizing the effect on the application using this container.
All interpolation algorithms first interpolate temperature by finding the nearest available temperature data. For example, if the data set includes calibration data for 40C and 50C, and the actual temperature is measured at 48C, then the data set for 50C is used, and the data set for 40C is not considered at all. Within a data set, frequency and gain are interpolated in two dimensions (the same is true for frequency and power for get_gain() and get_gain_coerced()) using a bilinear interpolation.
using uhd::usrp::cal::pwr_cal::sptr = std::shared_ptr<pwr_cal> |
|
pure virtual |
Add or update a power level data point
Note: Power measurements can only be written atomically. It is not possible to add individual gain/power points using this method.
gain_power_map | A mapping gain -> power (dB -> dBm) for all measured gain points for this frequency. |
min_power | The minimum available power for this frequency. |
max_power | The maximum available power for this frequency. |
freq | The frequency at which this power level was measured |
temperature | The temperature at which this power level was measured, in Celsius. This parameter is optional, the return value for get_temperature() is used if no temperature is provided here. |
|
pure virtual |
Clear all stored values
Note: All of the getters will throw a uhd::assertion_error if called after clearing the data.
|
pure virtual |
Look up a gain value from a power value.
This is the reverse function to get_power(). Like get_power(), it will interpolate in two dimensions (linearly) if the requested power value is not part of the measurement data.
Note: power_dbm
is coerced into the available power range using get_power_limits().
power_dbm | The power (in dBm) at which we are getting the gain value for |
freq | The frequency at which we are finding the gain |
temperature | The temperature at which we are finding the gain. If none is given, uses the current default temperature (see set_temperature()). |
|
pure virtual |
Returns the power at a gain value.
This will interpolate from the given data set to obtain a power value if gain and frequency are not exactly within the given data set.
gain | The gain at which we are checking the power |
freq | The frequency at which we are checking the power |
temperature | The temperature at which we are checking the power. If none is given, uses the current default temperature (see set_temperature()). |
|
pure virtual |
Return the min and max power available for this frequency
|
pure virtual |
Return the current reference gain point.
Currently unused.
|
pure virtual |
Return the current default temperature.
|
static |
Factory for new cal data sets.
|
static |
Default factory.
|
pure virtual |
Set the reference gain point, i.e., the gain value where by definition the difference between linearized power and measured power is zero.
Currently unused.
|
pure virtual |
Set the current default temperature
Some of the API calls have a optional temperature argument. However, in practice, it is often useful to set an ambient temperature once, or only when it has changed, and then use a default temperature instead of providing the temperature on every call. This sets the default temperature.