Skip to content

AWG Output

AWG output channel configuration

Function generator output channel control and configuration.

Represents a single AWG output channel with waveform, frequency, amplitude, and offset control.

AWGOutput

AWGOutput(awg: FunctionGenerator, spec: ChannelSpec)

Represents a single function generator output channel.

Provides methods to configure output settings including waveform type, frequency, amplitude, offset, phase, and output enable/disable.

Initialize function generator output channel.

Parameters:

Name Type Description Default
awg FunctionGenerator

Parent FunctionGenerator instance

required
spec ChannelSpec

ChannelSpec with frequency/amplitude limits for this channel

required
Source code in scpi_control/awg_output.py
def __init__(self, awg: "FunctionGenerator", spec: "ChannelSpec"):
    """Initialize function generator output channel.

    Args:
        awg: Parent FunctionGenerator instance
        spec: ChannelSpec with frequency/amplitude limits for this channel
    """
    self._awg = awg
    self._spec = spec
    self._channel_num = spec.channel_num

    if not 1 <= self._channel_num <= 4:
        raise exceptions.InvalidParameterError(f"Invalid channel number: {self._channel_num}. Must be 1-4.")

function property writable

function: str

Get current waveform function.

Returns:

Type Description
str

Waveform type: 'SINE', 'SQUARE', 'RAMP', 'PULSE', 'NOISE', 'ARB', 'DC'

frequency property writable

frequency: float

Get frequency in Hz.

Returns:

Type Description
float

Frequency in Hz

amplitude property writable

amplitude: float

Get amplitude in Vpp (peak-to-peak volts).

Returns:

Type Description
float

Amplitude in Vpp

offset property writable

offset: float

Get DC offset in volts.

Returns:

Type Description
float

DC offset in volts

phase property writable

phase: float

Get phase in degrees.

Returns:

Type Description
float

Phase in degrees (0-360)

enabled property writable

enabled: bool

Get output enable state.

Returns:

Type Description
bool

True if output is enabled, False otherwise

pulse_duty_cycle property writable

pulse_duty_cycle: float

Get pulse duty cycle as percentage (0-100).

Returns:

Type Description
float

Duty cycle as percentage

Raises:

Type Description
NotImplementedError

If current waveform is not PULSE

ramp_symmetry property writable

ramp_symmetry: float

Get ramp symmetry as percentage (0-100).

Returns:

Type Description
float

Symmetry as percentage (0=sawtooth down, 50=triangle, 100=sawtooth up)

Raises:

Type Description
NotImplementedError

If current waveform is not RAMP

set_function

set_function(waveform: WaveformType) -> None

Set waveform function (alias for function setter).

Parameters:

Name Type Description Default
waveform WaveformType

Waveform type

required
Source code in scpi_control/awg_output.py
def set_function(self, waveform: WaveformType) -> None:
    """Set waveform function (alias for function setter).

    Args:
        waveform: Waveform type
    """
    self.function = waveform

set_frequency

set_frequency(freq_hz: float) -> None

Set frequency (alias for frequency setter).

Parameters:

Name Type Description Default
freq_hz float

Frequency in Hz

required
Source code in scpi_control/awg_output.py
def set_frequency(self, freq_hz: float) -> None:
    """Set frequency (alias for frequency setter).

    Args:
        freq_hz: Frequency in Hz
    """
    self.frequency = freq_hz

set_amplitude

set_amplitude(vpp: float) -> None

Set amplitude (alias for amplitude setter).

Parameters:

Name Type Description Default
vpp float

Amplitude in Vpp

required
Source code in scpi_control/awg_output.py
def set_amplitude(self, vpp: float) -> None:
    """Set amplitude (alias for amplitude setter).

    Args:
        vpp: Amplitude in Vpp
    """
    self.amplitude = vpp

set_offset

set_offset(volts: float) -> None

Set DC offset (alias for offset setter).

Parameters:

Name Type Description Default
volts float

DC offset in volts

required
Source code in scpi_control/awg_output.py
def set_offset(self, volts: float) -> None:
    """Set DC offset (alias for offset setter).

    Args:
        volts: DC offset in volts
    """
    self.offset = volts

set_phase

set_phase(degrees: float) -> None

Set phase (alias for phase setter).

Parameters:

Name Type Description Default
degrees float

Phase in degrees

required
Source code in scpi_control/awg_output.py
def set_phase(self, degrees: float) -> None:
    """Set phase (alias for phase setter).

    Args:
        degrees: Phase in degrees
    """
    self.phase = degrees

enable

enable() -> None

Enable output (turn on).

Source code in scpi_control/awg_output.py
def enable(self) -> None:
    """Enable output (turn on)."""
    self.enabled = True

disable

disable() -> None

Disable output (turn off).

Source code in scpi_control/awg_output.py
def disable(self) -> None:
    """Disable output (turn off)."""
    self.enabled = False

configure_sine

configure_sine(frequency: float, amplitude: float, offset: float = 0.0)

Configure sine wave with specified parameters.

Parameters:

Name Type Description Default
frequency float

Frequency in Hz

required
amplitude float

Amplitude in Vpp

required
offset float

DC offset in volts (default: 0.0)

0.0
Source code in scpi_control/awg_output.py
def configure_sine(self, frequency: float, amplitude: float, offset: float = 0.0):
    """Configure sine wave with specified parameters.

    Args:
        frequency: Frequency in Hz
        amplitude: Amplitude in Vpp
        offset: DC offset in volts (default: 0.0)
    """
    self.function = "SINE"
    self.frequency = frequency
    self.amplitude = amplitude
    self.offset = offset
    logger.info(f"Channel {self._channel_num} configured: " f"SINE {frequency}Hz, {amplitude}Vpp, {offset}V offset")

configure_square

configure_square(frequency: float, amplitude: float, offset: float = 0.0)

Configure square wave with specified parameters.

Parameters:

Name Type Description Default
frequency float

Frequency in Hz

required
amplitude float

Amplitude in Vpp

required
offset float

DC offset in volts (default: 0.0)

0.0
Source code in scpi_control/awg_output.py
def configure_square(self, frequency: float, amplitude: float, offset: float = 0.0):
    """Configure square wave with specified parameters.

    Args:
        frequency: Frequency in Hz
        amplitude: Amplitude in Vpp
        offset: DC offset in volts (default: 0.0)
    """
    self.function = "SQUARE"
    self.frequency = frequency
    self.amplitude = amplitude
    self.offset = offset
    logger.info(f"Channel {self._channel_num} configured: " f"SQUARE {frequency}Hz, {amplitude}Vpp, {offset}V offset")

configure_pulse

configure_pulse(frequency: float, amplitude: float, duty_cycle: float, offset: float = 0.0)

Configure pulse wave with specified parameters.

Parameters:

Name Type Description Default
frequency float

Frequency in Hz

required
amplitude float

Amplitude in Vpp

required
duty_cycle float

Duty cycle as percentage (0-100)

required
offset float

DC offset in volts (default: 0.0)

0.0
Source code in scpi_control/awg_output.py
def configure_pulse(
    self,
    frequency: float,
    amplitude: float,
    duty_cycle: float,
    offset: float = 0.0,
):
    """Configure pulse wave with specified parameters.

    Args:
        frequency: Frequency in Hz
        amplitude: Amplitude in Vpp
        duty_cycle: Duty cycle as percentage (0-100)
        offset: DC offset in volts (default: 0.0)
    """
    self.function = "PULSE"
    self.frequency = frequency
    self.amplitude = amplitude
    self.offset = offset
    self.pulse_duty_cycle = duty_cycle
    logger.info(f"Channel {self._channel_num} configured: " f"PULSE {frequency}Hz, {amplitude}Vpp, {duty_cycle}% duty, {offset}V offset")

configure_ramp

configure_ramp(frequency: float, amplitude: float, symmetry: float = 50.0, offset: float = 0.0)

Configure ramp wave with specified parameters.

Parameters:

Name Type Description Default
frequency float

Frequency in Hz

required
amplitude float

Amplitude in Vpp

required
symmetry float

Symmetry percentage (0=sawtooth down, 50=triangle, 100=sawtooth up)

50.0
offset float

DC offset in volts (default: 0.0)

0.0
Source code in scpi_control/awg_output.py
def configure_ramp(
    self,
    frequency: float,
    amplitude: float,
    symmetry: float = 50.0,
    offset: float = 0.0,
):
    """Configure ramp wave with specified parameters.

    Args:
        frequency: Frequency in Hz
        amplitude: Amplitude in Vpp
        symmetry: Symmetry percentage (0=sawtooth down, 50=triangle, 100=sawtooth up)
        offset: DC offset in volts (default: 0.0)
    """
    self.function = "RAMP"
    self.frequency = frequency
    self.amplitude = amplitude
    self.offset = offset
    self.ramp_symmetry = symmetry
    logger.info(f"Channel {self._channel_num} configured: " f"RAMP {frequency}Hz, {amplitude}Vpp, {symmetry}% symmetry, {offset}V offset")

get_configuration

get_configuration() -> Dict[str, any]

Get all channel configuration parameters.

Returns:

Type Description
Dict[str, any]

Dictionary with all channel settings

Source code in scpi_control/awg_output.py
def get_configuration(self) -> Dict[str, any]:
    """Get all channel configuration parameters.

    Returns:
        Dictionary with all channel settings
    """
    config = {
        "channel": self._channel_num,
        "enabled": self.enabled,
        "function": self.function,
        "frequency": self.frequency,
        "amplitude": self.amplitude,
        "offset": self.offset,
        "phase": self.phase,
        "max_frequency": self._spec.max_frequency,
        "max_amplitude": self._spec.max_amplitude,
    }

    # Add waveform-specific parameters if applicable
    try:
        if self.function == "PULSE":
            config["duty_cycle"] = self.pulse_duty_cycle
        elif self.function == "RAMP":
            config["symmetry"] = self.ramp_symmetry
    except Exception as e:
        logger.warning(f"Failed to get waveform-specific parameters: {e}")

    return config