Source code for nirfmxspecan.chp_results

"""Provides methods to fetch and read the Chp measurement results."""

import functools

import nirfmxspecan.attributes as attributes
import nirfmxspecan.errors as errors
import nirfmxspecan.internal._helper as _helper


def _raise_if_disposed(f):
    """From https://stackoverflow.com/questions/5929107/decorators-with-parameters."""

    @functools.wraps(f)
    def aux(*xs, **kws):
        meas_obj = xs[0]  # parameter 0 is 'self' which is the measurement object
        if meas_obj._signal_obj.is_disposed:
            raise Exception("Cannot access a disposed SpecAn signal configuration")
        return f(*xs, **kws)

    return aux


[docs] class ChpResults(object): """Provides methods to fetch and read the Chp measurement results.""" def __init__(self, signal_obj): """Provides methods to fetch and read the Chp measurement results.""" self._signal_obj = signal_obj self._session_function_lock = signal_obj._session_function_lock self._interpreter = signal_obj._interpreter
[docs] @_raise_if_disposed def get_total_carrier_power(self, selector_string): r"""Gets the total integrated carrier power of all carriers, in dBm. You do not need to use a selector string to read this result for default signal and result instance. Refer to the `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ topic for information about the string syntax for named signals and results. Args: selector_string (string): Pass an empty string. Returns: Tuple (attr_val, error_code): attr_val (float): Returns the total integrated carrier power of all carriers, in dBm. error_code (int): Returns the status code of this method. The status code either indicates success or describes a warning condition. """ try: self._session_function_lock.enter_read_lock() updated_selector_string = _helper.validate_and_update_selector_string( selector_string, self._signal_obj ) attr_val, error_code = self._interpreter.get_attribute_f64( updated_selector_string, attributes.AttributeID.CHP_RESULTS_TOTAL_CARRIER_POWER.value, ) finally: self._session_function_lock.exit_read_lock() return attr_val, error_code
[docs] @_raise_if_disposed def get_frequency_resolution(self, selector_string): r"""Gets the frequency bin spacing of the spectrum acquired by the measurement. This value is expressed in Hz. You do not need to use a selector string to read this result for default signal and result instance. Refer to the `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ topic for information about the string syntax for named signals and results. Args: selector_string (string): Pass an empty string. Returns: Tuple (attr_val, error_code): attr_val (float): Returns the frequency bin spacing of the spectrum acquired by the measurement. This value is expressed in Hz. error_code (int): Returns the status code of this method. The status code either indicates success or describes a warning condition. """ try: self._session_function_lock.enter_read_lock() updated_selector_string = _helper.validate_and_update_selector_string( selector_string, self._signal_obj ) attr_val, error_code = self._interpreter.get_attribute_f64( updated_selector_string, attributes.AttributeID.CHP_RESULTS_FREQUENCY_RESOLUTION.value, ) finally: self._session_function_lock.exit_read_lock() return attr_val, error_code
[docs] @_raise_if_disposed def get_carrier_frequency(self, selector_string): r"""Gets the center frequency of the carrier relative to the :py:attr:`~nirfmxspecan.attributes.AttributeID.CENTER_FREQUENCY` attribute. This value is expressed in Hz. Use "carrier<*n*>" as the `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to read this result. Args: selector_string (string): Pass an empty string. Returns: Tuple (attr_val, error_code): attr_val (float): Returns the center frequency of the carrier relative to the :py:attr:`~nirfmxspecan.attributes.AttributeID.CENTER_FREQUENCY` attribute. This value is expressed in Hz. error_code (int): Returns the status code of this method. The status code either indicates success or describes a warning condition. """ try: self._session_function_lock.enter_read_lock() updated_selector_string = _helper.validate_and_update_selector_string( selector_string, self._signal_obj ) attr_val, error_code = self._interpreter.get_attribute_f64( updated_selector_string, attributes.AttributeID.CHP_RESULTS_CARRIER_FREQUENCY.value ) finally: self._session_function_lock.exit_read_lock() return attr_val, error_code
[docs] @_raise_if_disposed def get_carrier_integration_bandwidth(self, selector_string): r"""Gets the frequency range over which the measurement integrates the carrier power. This value is expressed in Hz. Use "carrier<*n*>" as the `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to read this result. Args: selector_string (string): Pass an empty string. Returns: Tuple (attr_val, error_code): attr_val (float): Returns the frequency range over which the measurement integrates the carrier power. This value is expressed in Hz. error_code (int): Returns the status code of this method. The status code either indicates success or describes a warning condition. """ try: self._session_function_lock.enter_read_lock() updated_selector_string = _helper.validate_and_update_selector_string( selector_string, self._signal_obj ) attr_val, error_code = self._interpreter.get_attribute_f64( updated_selector_string, attributes.AttributeID.CHP_RESULTS_CARRIER_INTEGRATION_BANDWIDTH.value, ) finally: self._session_function_lock.exit_read_lock() return attr_val, error_code
[docs] @_raise_if_disposed def get_carrier_absolute_power(self, selector_string): r"""Gets the carrier power measured in the integration bandwidth that you specify in the :py:attr:`~nirfmxspecan.attributes.AttributeID.CARRIER_INTEGRATION_BANDWIDTH` attribute. This value is expressed in dBm. Use "carrier<*n*>" as the `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to read this result. Args: selector_string (string): Pass an empty string. Returns: Tuple (attr_val, error_code): attr_val (float): Returns the carrier power measured in the integration bandwidth that you specify in the :py:attr:`~nirfmxspecan.attributes.AttributeID.CARRIER_INTEGRATION_BANDWIDTH` attribute. This value is expressed in dBm. error_code (int): Returns the status code of this method. The status code either indicates success or describes a warning condition. """ try: self._session_function_lock.enter_read_lock() updated_selector_string = _helper.validate_and_update_selector_string( selector_string, self._signal_obj ) attr_val, error_code = self._interpreter.get_attribute_f64( updated_selector_string, attributes.AttributeID.CHP_RESULTS_CARRIER_ABSOLUTE_POWER.value, ) finally: self._session_function_lock.exit_read_lock() return attr_val, error_code
[docs] @_raise_if_disposed def get_carrier_psd(self, selector_string): r"""Gets the power spectral density of the channel. This value is expressed in dBm/Hz. Use "carrier<*n*>" as the `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to read this result. Args: selector_string (string): Pass an empty string. Returns: Tuple (attr_val, error_code): attr_val (float): Returns the power spectral density of the channel. This value is expressed in dBm/Hz. error_code (int): Returns the status code of this method. The status code either indicates success or describes a warning condition. """ try: self._session_function_lock.enter_read_lock() updated_selector_string = _helper.validate_and_update_selector_string( selector_string, self._signal_obj ) attr_val, error_code = self._interpreter.get_attribute_f64( updated_selector_string, attributes.AttributeID.CHP_RESULTS_CARRIER_PSD.value ) finally: self._session_function_lock.exit_read_lock() return attr_val, error_code
[docs] @_raise_if_disposed def get_carrier_relative_power(self, selector_string): r"""Gets the carrier power measured relative to the total carrier power of all carriers. This value is expressed in dB. Use "carrier<*n*>" as the `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ to read this result. Args: selector_string (string): Pass an empty string. Returns: Tuple (attr_val, error_code): attr_val (float): Returns the carrier power measured relative to the total carrier power of all carriers. This value is expressed in dB. error_code (int): Returns the status code of this method. The status code either indicates success or describes a warning condition. """ try: self._session_function_lock.enter_read_lock() updated_selector_string = _helper.validate_and_update_selector_string( selector_string, self._signal_obj ) attr_val, error_code = self._interpreter.get_attribute_f64( updated_selector_string, attributes.AttributeID.CHP_RESULTS_CARRIER_RELATIVE_POWER.value, ) finally: self._session_function_lock.exit_read_lock() return attr_val, error_code
[docs] @_raise_if_disposed def fetch_spectrum(self, selector_string, timeout, spectrum): r"""Fetches the spectrum used for channel power (CHP) measurement. Args: selector_string (string): This parameter specifies a `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of result name. Example: "" "result::r1" You can use the :py:meth:`build_result_string` method to build the selector string. timeout (float): This parameter specifies the timeout, in seconds, for fetching the specified measurement. Set this value to an appropriate time, longer than expected for fetching the measurement. A value of -1 specifies that the method waits until the measurement is complete. The default value is 10. spectrum (numpy.float32): This parameter returns the array of averaged powers measured at each frequency bin. This value is expressed in dBm. Returns: Tuple (x0, dx, error_code): x0 (float): This parameter returns the start frequency. This value is expressed in Hz. dx (float): This parameter returns the frequency bin spacing. This value is expressed in Hz. error_code (int): Returns the status code of this method. The status code either indicates success or describes a warning condition. """ try: self._session_function_lock.enter_read_lock() _helper.validate_not_none(selector_string, "selector_string") updated_selector_string = _helper.validate_and_update_selector_string( selector_string, self._signal_obj ) x0, dx, error_code = self._interpreter.chp_fetch_spectrum( updated_selector_string, timeout, spectrum ) finally: self._session_function_lock.exit_read_lock() return x0, dx, error_code
[docs] @_raise_if_disposed def fetch_total_carrier_power(self, selector_string, timeout): r"""Returns the total integrated carrier power. Args: selector_string (string): This parameter specifies a `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of result name. Example: "" "result::r1" You can use the :py:meth:`build_result_string` method to build the selector string. timeout (float): This parameter specifies the timeout, in seconds, for fetching the specified measurement. Set this value to an appropriate time, longer than expected for fetching the measurement. A value of -1 specifies that the method waits until the measurement is complete. The default value is 10. Returns: Tuple (total_carrier_power, error_code): total_carrier_power (float): This parameter returns the total integrated power of all carriers, in dBm. error_code (int): Returns the status code of this method. The status code either indicates success or describes a warning condition. """ try: self._session_function_lock.enter_read_lock() _helper.validate_not_none(selector_string, "selector_string") updated_selector_string = _helper.validate_and_update_selector_string( selector_string, self._signal_obj ) total_carrier_power, error_code = self._interpreter.chp_fetch_total_carrier_power( updated_selector_string, timeout ) finally: self._session_function_lock.exit_read_lock() return total_carrier_power, error_code
[docs] @_raise_if_disposed def read(self, selector_string, timeout): r"""Configures hardware for acquisition, performs measurement on acquired data, and returns the channel power (CHP) measurement results. Args: selector_string (string): Pass an empty string. The signal name that is passed when creating the signal configuration is used. timeout (float): This parameter specifies the timeout, in seconds, for fetching the specified measurement. Set this value to an appropriate time, longer than expected for fetching the measurement. The default value is 10. Returns: Tuple (absolute_power, psd, error_code): absolute_power (float): This parameter returns the averaged CHP, in dBm, measured in the specified integration bandwidth. psd (float): This parameter returns the power spectral density of the channel, in dBm/Hz. error_code (int): Returns the status code of this method. The status code either indicates success or describes a warning condition. """ try: self._session_function_lock.enter_read_lock() _helper.validate_not_none(selector_string, "selector_string") updated_selector_string = _helper.validate_and_update_selector_string( selector_string, self._signal_obj ) absolute_power, psd, error_code = self._interpreter.chp_read( updated_selector_string, timeout ) finally: self._session_function_lock.exit_read_lock() return absolute_power, psd, error_code
[docs] @_raise_if_disposed def fetch_carrier_measurement(self, selector_string, timeout): r"""Returns the averaged channel power measurements. Use "carrier<n>" as the selector string to read results from this method. Args: selector_string (string): This parameter specifies a `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of result name, and carrier number. Example: "carrier0" "result::r1/carrier0" You can use the :py:meth:`build_carrier_string` method to build the selector string. timeout (float): This parameter specifies the timeout, in seconds, for fetching the specified measurement. Set this value to an appropriate time, longer than expected for fetching the measurement. A value of -1 specifies that the method waits until the measurement is complete. The default value is 10. Returns: Tuple (absolute_power, psd, relative_power, error_code): absolute_power (float): This parameter returns the averaged channel power, in dBm, measured in the specified integration bandwidth. psd (float): This parameter returns the power spectral density of the channel, in dBm/Hz. relative_power (float): This parameter returns the carrier power, in dB, measured relative to the total carrier power. error_code (int): Returns the status code of this method. The status code either indicates success or describes a warning condition. """ try: self._session_function_lock.enter_read_lock() _helper.validate_not_none(selector_string, "selector_string") updated_selector_string = _helper.validate_and_update_selector_string( selector_string, self._signal_obj ) absolute_power, psd, relative_power, error_code = ( self._interpreter.chp_fetch_carrier_measurement(updated_selector_string, timeout) ) finally: self._session_function_lock.exit_read_lock() return absolute_power, psd, relative_power, error_code