Subsampling Techniques for Achieving Waveform Precision in Picoseconds

January 16, 2026 by Andrea Corna

An arbitrary waveform generator (AWG) can generate pulses with a timing resolution much finer than its sampling period. Users are often unaware of this capability, yet it enables highly precise timing control in many applications:

  • Pulse delay control in dynamical decoupling for NV centers
  • Width control for superconducting qubit flux pulses
  • Deskew of dual-channel gate voltage pulses for spin qubits
  • IQ mixer calibration

In this blog post, we will demonstrate how to realize timing precision at a fraction of a sampling period, down to 5 ps, with the Zurich Instruments HDAWG. The method is also applicable to the SHFSG and SHFQC.

Achieving Subsample Precision

When using an AWG, we must work within certain constraints, such as the sample rate of the device, the waveform granularity, and the minimum length of waveforms. We are flexible, however, in defining the shape of the waveform we wish to use. Let’s take a Gaussian pulse as an example.
In LabOne Q, we can define a Gaussian with a shift of the peak position as follows:

@pulse_library.register_pulse_functional
def gaussian_subsample_shift(x, sigma=1 / 3, position=0.4, **_):
   return np.exp(
       -((x - position) ** 2) / (2 * sigma**2)
   )
A Gaussian sampled at two different central positions

Figure 1: A Gaussian sampled at two different central positions. The points show the amplitude values of the waveform samples, which can be specified at any value within the limits of the AWG vertical resolution.

We can recognize the Gaussian profile and how it is shifting with different center positions, but the discrete sampling seems to distort our waveform. In reality, these discrete jumps will be filtered out by the antialiasing low-pass filter incorporated into the instrument. If we take that into account, the result is a smooth shift as we programmed:

The same Gaussians after the low pass filter

Figure 2: The same Gaussians after the low pass filter.

This works well for a pulse that can be described with an analytical function, like the Gaussian, but what if that is not the case? The function might be the output of some optimization algorithm that we don’t control, or it might not be practical to re-evaluate all the waveforms used in a sequence. 

As a first step, we can try to use linear interpolation. If x[i] is an input sample, we can shift it by a fraction of a sample δ with

\[y[i]=x[i]+(x[i+1]-x[i])\cdot\delta=x[i]\cdot(1-\delta)+x[i+1]\cdot\delta\]

This can be seen as a Finite Impulse Response (FIR) filter with two taps:

\[[1-\delta,\ \delta]\]

The problem is that it behaves like a lowpass filter with a cutoff frequency that depends on the shift value δ. This is visible in the following figure showing the frequency response of this filter for various shift values. We must expect that this filter distorts our signals instead of just shifting them in time, in particular wideband signals such as pulses with sharp edges.

Frequency response of linear interpolation for different values of fractional shift

Figure 3: Frequency response of linear interpolation for different values of fractional shift.

So, instead of suffering from an uncontrollable low-pass filter, why not design one for our purposes? Let’s start from a lowpass \(\mathrm{sinc}\) filter. The \(\mathrm{sinc}\) function is the ideal low pass filter, since it’s the Fourier transform of a rectangular function that passes all the signals with frequencies lower than a cutoff frequency and infinitely suppresses everything above. In the real world, since we can’t convolve our signals for an infinite period, the suppression will be gradual with the frequency increase (in other words, the filter has a certain roll-off). We can write a discrete time \(\mathrm{sinc}\) FIR filter as follows:

\[y\left[i\right]=\sum_{j=0}^{N}\mathrm{sinc}\left(\frac{2 f_c}{SR}\cdot j \right) \cdot x[j]\]

where \(f_c\) is the filter cutoff frequency and \(SR\) is the sampling rate. Now, we can add a group delay \(\tau_g=\delta+(N-1)/2\), which does not necessarily have to be an integer:

\[y\left[i\right]=\sum_{j=0}^{N}\mathrm{sinc}\left(\frac{2 f_c}{SR}\cdot \left( j - \tau_g \right) \right) \cdot x[j]\]
A fractional shift sinc filter

Figure 4: A fractional shift sinc filter, with N=8 and a group delay of 3.75 (the vertical green line). The dashed line connecting the discrete filter points represents the continuous time sinc filter and is plotted for better visualization.

The frequency response, as expected, is much flatter for a very large portion of the frequency range:

Frequency response of sinc filter for different values of fractional shift

Figure 5: Frequency response of sinc filter for different values of fractional shift.

For wide-band signals, for example pulses with sharp edges, we could then set the cutoff frequency right above the maximum frequency we want to generate. That has also the advantage of suppressing images in higher Nyquist zones that we might introduce in our pulse definition.
And how good is such shift? In the next figure we can see the scope capture of a rising edge of a pulse generated by the HDAWG, shifted by fractions of a sample. We can see that even this fast transition can be effectively shifted without distortions to the pulse shape.

The rising edge of a pulse, shifted by fractions of a sample

Figure 6: The rising edge of a pulse, shifted by fractions of a sample.

If we analyze the delay we get (based on the position of the edge) versus the delay we set in the filter, we can see that it’s highly linear, and we can capture a delay step down to 5 ps!

Measured shift of an edge versus the delay set through the sinc filter

Figure 7: Measured shift of an edge versus the delay set through the sinc filter.

The HDAWG offers a FIR filter as part of the Real-Time Precompensation option which makes it very easy to implement the fine delay as described above. Instead of modifying each waveform, it can apply the fine shift right after the waveform player. In this way, it can fully replace the discontinued SKW Output Skew Control Option.

Get the Code

All of this functionality is accessible using our LabOne Q software framework or via the zhinst-toolkit library.

Conclusions

The sampling rate of an Arbitrary Waveform Generator is not the limiting factor of your experiment, and here I hope to have shown you how to go beyond it! Are you interested in how the Zurich Instruments QCCS and LabOne Q can enable your experimental success? I’d love to hear about your next challenge in the quantum realm. Write to me at andrea.corna@zhinst.com.