QuEL-1 continuous-wave output
Quel1BackendController can start and stop a long-running continuous-wave
output on one QuEL-1 AWG channel. This is a controller-level capability for
hardware validation and CW experiments. It is not exposed through Measurement
or Experiment.
When to use it
Use this API when you need a steady output outside the finite
MeasurementSchedule execution path, for example to check a mixer, frequency
plan, analyzer trace, or intentional aliasing behavior.
The controller owns the running wavegen task, so stop the output through the same controller instance.
See also the guarded QuEL-1 continuous-wave notebook for a runnable hardware workflow.
Start an output
from qubex.backend.quel1 import Quel1BackendController
controller = Quel1BackendController()
controller.define_clockmaster(ipaddr="10.3.0.x")
controller.define_box(
box_name="S173R",
ipaddr_wss="10.1.0.x",
boxtype="quel1se-riken8",
)
controller.connect(box_names="S173R")
config = controller.start_continuous_wave(
box_name="S173R",
port=2,
channel=0,
awg_freq_hz=7_812_500.0 * 20,
amplitude=0.2,
)
awg_freq_hz is the AWG-baseband frequency. QuEL-1 CW output is generated by
repeating one 128 ns chunk, so the frequency must be an integer multiple of
1 / 128 ns = 7.8125 MHz and stay within the AWG baseband Nyquist range.
The returned Quel1ContinuousWaveConfig records the resolved waveform name,
actual AWG frequency, chunk cycles, LO/CNCO/FNCO values used for logging, the
resolved output frequency when it can be computed, repeat counts, and nominal
duration.
Keep current LO and NCO settings
By default, start_continuous_wave() does not call config_port() or update
FNCO. It uses the current hardware LO/CNCO/FNCO settings and logs the values it
can read from dump_port().
awg_freq_hz is still applied when configure_port=False; only the generated
AWG waveform changes.
This default avoids changing the port phase reference as a side effect of starting CW output.
Update output settings explicitly
Pass configure_port=True only when the CW start should also update output
settings. This can include LO/CNCO/FNCO, sideband, VATT, full-scale current, and
RF switch state.
config = controller.start_continuous_wave(
box_name="S173R",
port=2,
channel=0,
awg_freq_hz=0.0,
amplitude=0.1,
configure_port=True,
lo_freq_hz=10_500_000_000,
cnco_freq_hz=2_250_000_000,
fnco_freq_hz=750_000_000,
sideband="U",
vatt=2048,
fullscale_current=39000,
rfswitch="pass",
)
If any output setting argument is provided without configure_port=True,
Qubex raises ValueError before touching hardware.
Stop outputs
Stop one remembered output by the same physical key:
stopped = controller.stop_continuous_wave(
box_name="S173R",
port=2,
channel=0,
)
stop_continuous_wave() returns True when it found and cleared a remembered
task, and False when that controller has no active task for the key.
Stop every remembered CW task:
controller.stop_all_continuous_waves()
disconnect() also calls stop_all_continuous_waves() on a best-effort basis
before releasing backend resources.
Calling connect() with a different box set rebuilds the QuEL-1 runtime state.
In that case, the controller stops remembered CW outputs before reconnecting.
Logging and alias warnings
On start, Qubex logs the LO/CNCO/FNCO/AWG frequencies, FNCO + AWG, and the
computed RF output frequency in GHz when LO/CNCO/FNCO/sideband values are
available at INFO level.
If abs(FNCO + AWG) exceeds 800 MHz, Qubex logs a warning because the output
may contain aliasing. This condition is not an error; intentional aliasing tests
can continue after the warning.