EXTRACT_SPECTRUM_RSA500
Download Flojoy Studio to try this app
  
 Extracts and returns the spectrum trace from an Tektronix RSA. This block should also work with compatible Tektronix RSAXXX instruments.
Tested with RSA507a.  Params:    dll_file : File, default=C:/Tektronix/RSA_API/lib/x64/RSA_API.dll  Where the RSA_API.dll file is located.   center_freq : float, default=100e6  The center frequency, in Hz.   ref_level : float, default=-30  The reference level (the maximum y axis value), in dBm.   span : float, default=1e6  The width of the x axis, in Hz.   bandwidth : float, default=10e3  Resolution bandwidth, in Hz.     Returns:    out : OrderedPair  RF spectrum trace    
Python Code
from flojoy import flojoy, DataContainer, OrderedPair, File
from typing import Optional
from flojoy.instruments.tektronix.RSA_API import *  # noqa: F403
from ctypes import cdll, c_int, c_bool, c_double, c_float, byref, create_string_buffer
import numpy as np
@flojoy()
def EXTRACT_SPECTRUM_RSA500(
    dll_file: File,
    input: Optional[DataContainer] = None,
    center_freq: float = 100e6,
    ref_level: float = -30,
    span: float = 1e6,
    bandwidth: float = 10e3,
) -> OrderedPair:
    """Extracts and returns the spectrum trace from an Tektronix RSA.
    This block should also work with compatible Tektronix RSAXXX instruments.
    Tested with RSA507a.
    Parameters
    ----------
    dll_file : File, default=C:/Tektronix/RSA_API/lib/x64/RSA_API.dll
        Where the RSA_API.dll file is located.
    center_freq : float, default=100e6
        The center frequency, in Hz.
    ref_level : float, default=-30
        The reference level (the maximum y axis value), in dBm.
    span : float, default=1e6
        The width of the x axis, in Hz.
    bandwidth : float, default=10e3
        Resolution bandwidth, in Hz.
    Returns
    -------
    OrderedPair
        RF spectrum trace
    """
    # Connect to RSA
    rsa = cdll.LoadLibrary(dll_file.unwrap())
    numFound = c_int(0)
    intArray = c_int * DEVSRCH_MAX_NUM_DEVICES  # noqa: F405
    deviceIDs = intArray()
    deviceSerial = create_string_buffer(DEVSRCH_SERIAL_MAX_STRLEN)  # noqa: F405
    deviceType = create_string_buffer(DEVSRCH_TYPE_MAX_STRLEN)  # noqa: F405
    apiVersion = create_string_buffer(DEVINFO_MAX_STRLEN)  # noqa: F405
    rsa.DEVICE_GetAPIVersion(apiVersion)
    err_check(rsa.DEVICE_Search(byref(numFound), deviceIDs, deviceSerial, deviceType))
    # note: the API can only currently access one at a time
    # Connects to first available
    err_check(rsa.DEVICE_Connect(deviceIDs[0]))
    rsa.CONFIG_Preset()
    # Configure spectrum
    cf = center_freq
    refLevel = ref_level
    rbw = bandwidth
    rsa.SPECTRUM_SetEnable(c_bool(True))
    rsa.CONFIG_SetCenterFreq(c_double(cf))
    rsa.CONFIG_SetReferenceLevel(c_double(refLevel))
    rsa.SPECTRUM_SetDefault()
    specSet = Spectrum_Settings()  # noqa: F405
    rsa.SPECTRUM_GetSettings(byref(specSet))  # noqa: F405
    specSet.window = SpectrumWindows.SpectrumWindow_Kaiser  # noqa: F405
    specSet.verticalUnit = SpectrumVerticalUnits.SpectrumVerticalUnit_dBm  # noqa: F405
    specSet.span = span
    specSet.rbw = rbw
    rsa.SPECTRUM_SetSettings(specSet)
    rsa.SPECTRUM_GetSettings(byref(specSet))
    ready = c_bool(False)
    traceArray = c_float * specSet.traceLength
    traceData = traceArray()
    outTracePoints = c_int(0)
    traceSelector = SpectrumTraces.SpectrumTrace1  # noqa: F405
    # Retrieve spectrum
    rsa.DEVICE_Run()
    rsa.SPECTRUM_AcquireTrace()
    while not ready.value:
        rsa.SPECTRUM_WaitForDataReady(c_int(100), byref(ready))
    rsa.SPECTRUM_GetTrace(
        traceSelector, specSet.traceLength, byref(traceData), byref(outTracePoints)
    )
    rsa.DEVICE_Stop()
    trace = np.array(traceData)
    freq = np.arange(
        specSet.actualStartFreq,
        specSet.actualStartFreq + specSet.actualFreqStepSize * specSet.traceLength,
        specSet.actualFreqStepSize,
    )
    rsa.DEVICE_Disconnect()
    return OrderedPair(x=freq, y=trace)
def err_check(rs):
    if ReturnStatus(rs) != ReturnStatus.noError:  # noqa: F405
        raise RSAError(ReturnStatus(rs).name)  # noqa: F405
Example App
Having problems with this example app? Join our Discord community and we will help you out!
In this example, Flojoy was used to extract an RF spectrum from a Tektronix RSA500.
First the necessary blocks were added:
- EXTRACT_SPECTRUM_RSA500
- LINE
The default parameters are set to the FM radio frequencies (100 MHz). Set center_freq to your favourite station and see the resulting spectrum.