Reference Magnitude Backend
A year ago we introduced the reference magnitude parameter into Quantify Scheduler, to represent the absolute power level of signals reaching the quantum device. However, we have yet to implement the backend to compile this power parameter to hardware instructions. This functionality must be implemented for the Qblox and Zhinst backends.
The definition reference magnitude and its intended purpose are discussed in detail in the tutorial on Operations and Qubits in the docs https://quantify-os.org/docs/quantify-scheduler/dev/tutorials/Operations%20and%20Qubits.html#specifying-pulse-magnitudes. In this tutorial, the reference magnitude is defined as follows:
In the definition of any pulse operation in quantify-scheduler, there will typically be two parameters related to the magnitude of the pulse: the amplitude and the reference_magnitude. The amplitude is a unitless parameter which expresses the amplitude of the signal produced by the DAC of the signal generator, relative to the maximum output level of the DAC. The amplitude can vary from -1 to 1, where 1 is the maximum output level. Since amplitude is a relative scale, it does not express the absolute power level of the signal that reaches the device. This will be affected by a number of different variables, including any attenuation or gain that is applied to the signal after it produced by the DAC. In order to specify the magnitude of the signal in absolute terms, we have the reference_magnitude parameter. This provides a reference scale for the absolute magnitude of the signal when it reaches the device port in question. The reference magnitude can be specified in a number of different units: Volts, current in Amperes or power in dBm or W, depending on the physical implementation of the control pulse. The scaling is defined such that the power/amplitude of a pulse with amplitude 1 will have a value equal to the reference_magnitude when it reaches the port.
We need to implement a backend which compiles the reference magnitude parameter to variable attenuations and/or amplifier gains on the hardware. Because the reference magnitude is defined at the level of the qubit, there will need to be a way for as user to specify the fixed attenuations of their I/O chains (probably in the hardware config) and for this to be taken account of during compilation. It is also possible that a user may have their own external variable attenuators or amplifiers in the signal chain in addition to the Qblox/Zhinst variable attenuation, and we should also allow for this to potentially be configured.