# Arbitrary Waveform Generator (AWG)

Arbitrary waveform generators.

## Instrument and Abstract Driver

| [`InstroAWG`](https://dev.nominal.io/instro/ref/instruments/instro.awg.InstroAWG.md#instro.awg.InstroAWG "instro.awg.InstroAWG") | AWG instrument. |
| --- | --- |
| [`AWGDriverBase`](https://dev.nominal.io/instro/ref/instruments/instro.awg.AWGDriverBase.md#instro.awg.AWGDriverBase "instro.awg.AWGDriverBase") | Vendor AWG driver contract. |

## Vendor Drivers

| Vendor | Model | Description |
| --- | --- | --- |
| Keysight | [`33521B`](https://dev.nominal.io/instro/ref/instruments/instro.awg.drivers.keysight_33521b.Keysight33521B.md#instro.awg.drivers.keysight_33521b.Keysight33521B "instro.awg.drivers.keysight_33521b.Keysight33521B") | SCPI driver for the Keysight 33521B arbitrary waveform generator. |
| Rigol | [`DG1022Z`](https://dev.nominal.io/instro/ref/instruments/instro.awg.drivers.rigol_dg1022z.RigolDG1022Z.md#instro.awg.drivers.rigol_dg1022z.RigolDG1022Z "instro.awg.drivers.rigol_dg1022z.RigolDG1022Z") | SCPI driver for the Rigol DG1022Z two-channel arbitrary waveform generator. |

## Types & Configuration

| [`Sine`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.Sine.md#instro.awg.types.Sine "instro.awg.types.Sine") | Sine waveform definition. |
| --- | --- |
| [`Square`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.Square.md#instro.awg.types.Square "instro.awg.types.Square") | Continuous rectangular wave; high for duty_cycle_pct percent of each period. |
| [`Sawtooth`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.Sawtooth.md#instro.awg.types.Sawtooth "instro.awg.types.Sawtooth") | Sawtooth waveform definition. |
| [`Triangle`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.Triangle.md#instro.awg.types.Triangle "instro.awg.types.Triangle") | Triangle waveform definition. |
| [`Pulse`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.Pulse.md#instro.awg.types.Pulse "instro.awg.types.Pulse") | Continuous rectangular wave (not single-shot); each period goes high for width_s seconds after delay_s. |
| [`Arbitrary`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.Arbitrary.md#instro.awg.types.Arbitrary "instro.awg.types.Arbitrary") | Arbitrary waveform definition; samples are normalized to [-1, 1] and scaled by amplitude/offset. |
| [`StaticValue`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.StaticValue.md#instro.awg.types.StaticValue "instro.awg.types.StaticValue") | Static valued waveform definition. |
| [`AmplitudeMeasurementUnit`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.AmplitudeMeasurementUnit.md#instro.awg.types.AmplitudeMeasurementUnit "instro.awg.types.AmplitudeMeasurementUnit") |  |
| [`ModulationType`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.ModulationType.md#instro.awg.types.ModulationType "instro.awg.types.ModulationType") |  |
| [`BurstType`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.BurstType.md#instro.awg.types.BurstType "instro.awg.types.BurstType") |  |
| [`BurstTriggerSource`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.BurstTriggerSource.md#instro.awg.types.BurstTriggerSource "instro.awg.types.BurstTriggerSource") |  |
| [`GatePolarity`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.GatePolarity.md#instro.awg.types.GatePolarity "instro.awg.types.GatePolarity") |  |
| [`SweepType`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.SweepType.md#instro.awg.types.SweepType "instro.awg.types.SweepType") |  |
| [`SweepTriggerSource`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.SweepTriggerSource.md#instro.awg.types.SweepTriggerSource "instro.awg.types.SweepTriggerSource") |  |
| [`convert_amplitude`](https://dev.nominal.io/instro/ref/instruments/instro.awg.types.convert_amplitude.md#instro.awg.types.convert_amplitude "instro.awg.types.convert_amplitude") | Convert an amplitude value between measurement units for a waveform shape. |

### Configuration

| [`AWGConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.AWGConfig.md#instro.awg.config.AWGConfig "instro.awg.config.AWGConfig") | Validated config for constructing an InstroAWG from JSON. |
| --- | --- |
| [`ChannelConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.ChannelConfig.md#instro.awg.config.ChannelConfig "instro.awg.config.ChannelConfig") | Initial per-channel state applied on `open()`; the channel stays silent until its output is explicitly enabled. |
| [`VisaDriverConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.VisaDriverConfig.md#instro.awg.config.VisaDriverConfig "instro.awg.config.VisaDriverConfig") | Driver config for a VISA-connected AWG. |
| [`SineConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.SineConfig.md#instro.awg.config.SineConfig "instro.awg.config.SineConfig") | Sine waveform config. |
| [`SquareConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.SquareConfig.md#instro.awg.config.SquareConfig "instro.awg.config.SquareConfig") | Square waveform config. |
| [`SawtoothConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.SawtoothConfig.md#instro.awg.config.SawtoothConfig "instro.awg.config.SawtoothConfig") | Sawtooth waveform config. |
| [`TriangleConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.TriangleConfig.md#instro.awg.config.TriangleConfig "instro.awg.config.TriangleConfig") | Triangle waveform config. |
| [`PulseConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.PulseConfig.md#instro.awg.config.PulseConfig "instro.awg.config.PulseConfig") | Pulse waveform config. |
| [`ArbitraryConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.ArbitraryConfig.md#instro.awg.config.ArbitraryConfig "instro.awg.config.ArbitraryConfig") | Arbitrary waveform config; samples are either given inline or read from a CSV file path. |
| [`StaticValueConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.StaticValueConfig.md#instro.awg.config.StaticValueConfig "instro.awg.config.StaticValueConfig") | Static (DC) value config. |
| [`AmplitudeConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.AmplitudeConfig.md#instro.awg.config.AmplitudeConfig "instro.awg.config.AmplitudeConfig") | Output amplitude config; maps to `InstroAWG.set_amplitude`. |
| [`ModulationConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.ModulationConfig.md#instro.awg.config.ModulationConfig "instro.awg.config.ModulationConfig") | Carrier modulation config; maps to `InstroAWG.set_modulation`/`modulation_enable`. |
| [`ModulationTypeConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.ModulationTypeConfig.md#instro.awg.config.ModulationTypeConfig "instro.awg.config.ModulationTypeConfig") | Modulation type and its magnitude; magnitude's meaning varies by `name` (see `InstroAWG.set_modulation`). |
| [`BurstConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.BurstConfig.md#instro.awg.config.BurstConfig "instro.awg.config.BurstConfig") | Burst config; maps to InstroAWG's `set_burst*`/`burst_enable` setters. |
| [`SweepConfig`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.SweepConfig.md#instro.awg.config.SweepConfig "instro.awg.config.SweepConfig") | Sweep config; maps to InstroAWG's `set_sweep*`/`sweep_enable` setters. |
| [`build_waveform`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.build_waveform.md#instro.awg.config.build_waveform "instro.awg.config.build_waveform") | Construct the runtime Waveform definition described by a waveform config block. |
| [`resolve_awg_from_config`](https://dev.nominal.io/instro/ref/instruments/instro.awg.config.resolve_awg_from_config.md#instro.awg.config.resolve_awg_from_config "instro.awg.config.resolve_awg_from_config") | Resolve a validated AWGConfig into the `(name, driver, num_channels, config_publishers, poll_interval)` InstroAWG needs. |

### Shared configuration

| Class | Description |
| --- | --- |
| [`DeviceInfo`](https://dev.nominal.io/instro/ref/library/instro.lib.types.DeviceInfo.md#instro.lib.types.DeviceInfo "instro.lib.types.DeviceInfo") | Device metadata. |
| [`TimingConfig`](https://dev.nominal.io/instro/ref/library/instro.lib.config.TimingConfig.md#instro.lib.config.TimingConfig "instro.lib.config.TimingConfig") | Timing configuration for instrument background polling. |
| [`NominalCorePublisherConfig`](https://dev.nominal.io/instro/ref/library/instro.lib.config.NominalCorePublisherConfig.md#instro.lib.config.NominalCorePublisherConfig "instro.lib.config.NominalCorePublisherConfig") | Publisher config for streaming to a Nominal Core dataset. |
| [`FilePublisherConfig`](https://dev.nominal.io/instro/ref/library/instro.lib.config.FilePublisherConfig.md#instro.lib.config.FilePublisherConfig "instro.lib.config.FilePublisherConfig") | Publisher config for writing measurements to a local file. |

---

Errors raised by these methods are documented in [Exceptions](https://dev.nominal.io/instro/ref/library/exceptions.md).
