有效产生动态脉冲
September 8, 2021 by Andrea Corna
固态量子位通常由一系列非常短的脉冲来表征和操作。为了实现高保真度控制,需要生成许多序列,并具有非常精确的定时。
在这篇博文中,我将展示如何使用HDAWG任意波形发生器和SHFSG信号发生器的高级功能集来高效地生成简单和复杂的序列。它们的参数可以动态调整,以实现高效的工作流程,还可以实现闭环反馈实验。
振幅扫描拉比实验
让我们从最简单的表征实验之一开始:拉比振荡的测量。该实验通常用于启动量子位的测量,因为它可以证明被测器件确实是一个两级系统(即量子位),并且可以相干地控制。此外,它可以用于确定控制量子位的基本参数,如谐振频率、脉冲持续时间和振幅,以执行π旋转[1]。
拉比实验类中一个非常常见的变体是所谓的振幅拉比。控制脉冲的形状、长度和频率保持恒定,而幅度是变化的,因此脉冲能量也是变化的。预期结果是参与过渡的两个级别的平均人口的波动。这种振荡频率是拉比频率。通过保持脉冲长度恒定,我们还可以保持脉冲的带宽不变,因此我们可以最大限度地减少激发不必要跃迁的风险。这对于像人工原子这样具有多种状态的系统尤其重要,我们只想使用其中的两个,实现一个量子位。
我们如何用HDAWG或SHFSG以最佳方式产生这样的脉冲?解决方案在命令表(CT)中。命令表允许您将波形回放指令与其他定时关键相位和振幅设置命令组合在一条指令中。顾名思义,它是一个可以填充许多参数的表,与波形回放的控制相关。
现在我们来构造振幅Rabi。首先,我们需要声明表示序列中脉冲包络的波形:
//Waveform definition wave pulse = gauss(PULSE_TOTAL_LEN, PULSE_TOTAL_LEN/2, PULSE_WIDTH_SAMPLE);
然后我们可以为这个波形分配一个显式索引,这样我们就可以在命令表中使用它:
//Assign index and outputs assignWaveIndex(1,pulse, INDEX);
这里我们只声明了包络线,其他静态参数(如频率调制)在Python中外部设置。
平均值在Rabi序列中非常重要,因为我们对平均州人口感兴趣。我们有两个选择如何平均:顺序或循环。在第一种情况下,我们在移动到下一个振幅之前获取振幅的所有结果。在第二个步骤中,我们一个接一个地扫描所有振幅,然后重复多次这样的序列。
对于顺序情况,它将如下所示:
而循环平均如下:
为了实现顺序平均,我们需要以这种方式编程命令表
以及相对序列:
//Execution, sequential average
//Set start amplitude
executeTableEntry(TE_SET_START_AMPLITUDE);
repeat (NUM_AMPLITUDES)
{ repeat (NUM_AVERAGES) {
//Reset the oscillator (not really needed for Rabi)
resetOscPhase();
//Play pulse
executeTableEntry(TE_PULSE);
//Place for readout
}
//Increment amplitude
executeTableEntry(TE_INCREMENT_AMPLITUDE);
}
正如我们所看到的,我们有两个命令分别设置起始振幅和增加(或减少)它。第三个条目播放具有这种振幅的脉冲。
通过这种方式,我们在波形存储器使用方面非常有效:我们只定义了一个波形,我们可以在单个序列中生成数千或数百万个脉冲,只需重复使用它!振幅增量和两个循环中的迭代次数可以小也可以大,并且序列存储器不会改变。因此,我们可以高效地进行非常精细且耗时的扫描,而无需重新加载波形或序列以跳过下一个值。
当然,可以将波形播放和幅度变化结合起来;振幅参数的更新将恰好在波形回放开始时发生。这对于循环平均版本很有用:
这里的顺序是:
//Execution, cyclic average
//Averaging loop
repeat (NUM_AVERAGES) {
//Reset the oscillator (not really needed for Rabi)
resetOscPhase();
//Play start pulse
executeTableEntry(TE_PULSE_START);
//Place for readout
repeat (NUM_AMPLITUDES-1) {
//Reset the oscillator (not really needed for Rabi)
resetOscPhase(); //Play pulse and increment amplitude
executeTableEntry(TE_PULSE_INCREMENT);
//Place for readout
}
}
拉姆齐实验
通常,下一步是用拉姆齐序列进一步校准和表征量子位。
在这个序列中,我们有两个π/2脉冲,由量子位演化的等待时间隔开。第一个π/2脉冲使量子位处于基态和激发态的叠加。然后,它通过绕Z轴进动自由演化一段时间τ。最后,第二个π/2脉冲将状态带到基态或激发态,这取决于在自由演化阶段积累的相位。通过改变时间τ,可以评估量子位的退相干时间T2*。
我们可以很容易地构造这个序列(为简单起见,省略了平均值):
在这个序列中,我们使用了特殊命令playZero。它播放一系列等于零的样本,其最大优点是不使用波形存储器,长度可以是动态变量。因此,进化时间可以假设很多值,而且它是任意长的。
该序列按预期工作,但有一个非常重要的限制。事实上,playZero的参数需要是16的倍数,就像playWave波形的粒度一样。如果采样率最大为2.4GSa/s,则意味着最小步长为6.66ns,这可能不适用于许多高精度实验。幸运的是,这里的命令表可以解决这个问题!
如何做到这一点?我们将等待时间分为两部分,粗略和精细。粗糙的一个由playZero处理,与之前一样。
对于精细的一个,我们创建了16个脉冲副本,每个副本多移动一个样本,并在右侧填充,以参考相关粒度并具有恒定长度:
这会产生这样的结果:
然后,我们使用一对一映射在命令表中引用它们:
通过播放正确的命令表条目作为第二个pi/2脉冲,我们可以调整延迟。播放内容如下:
我们如何执行序列?精细延迟可以通过取进化时间的四个最低有效位来计算;该值可以用作命令表执行的参数。指令playZero自动丢弃精细部分,因此我们可以将原始等待时间作为参数传递。然而,只有当其参数大于16(最小playZero长度)时,我们才需要执行playZero
序列将如下所示:
现在我们有了所有的元素:我们可以以采样精度、任意长度和最小内存消耗来扫描演化时间,只需要波形副本。
哈恩回声实验
用拉姆齐序列测量的量子位退相干时间受到宽频谱上噪声源的影响。自旋回波技术通常用于抵消低频的贡献,并获得本征退相干时间T2。该序列源自核磁共振和广义的自旋量子位领域,这主要是由于不均匀磁场和与远程自旋的耦合。类似地,对于超导量子位,在低频下对退相干时间的主要贡献是由于磁通噪声[6]。
该序列与拉姆齐序列非常相似,在两个π/2脉冲之间增加了一个π脉冲。在两个演化时间内积累的随机相位抵消,因为由于π脉冲,量子位将在相反的方向上进行处理。
与之前一样,我们可以高精度地扫描tau时间,但是我们如何计算第二个脉冲的精细/粗略参数?与拉姆齐序列不同的是,现在我们必须考虑第二个脉冲的正确填充,它随着精细移位而改变。这可以很容易地通过将第二个脉冲的右填充减去脉冲2和3之间的目标等待时间来实现
我们还需要一组不同的π脉冲命令表条目。为了简单起见,我们假设π/2脉冲的振幅为0.5,而π脉冲的振幅则为1.0:
然后,我们可以像之前一样进行精细/粗略计算:
与之前一样,我们可以以样本精度、任意长度和最小内存消耗来扫描进化时间,但对于更复杂的序列。
返回Rabi,长度扫描版
在之前的拉比实验中,我们扫描了脉冲的振幅。另一种方法是保持振幅恒定,而扫描脉冲长度。原则上,这两种方法是等效的,因为目标是扫描脉冲能量。控制脉冲长度有助于观察更多的振荡,而随着振幅的增加,我们的控制范围更小。它对于具有适度拉比频率的量子位也是有用的。此外,我们不必担心用于高功率上变频的混频器的线性。
对于这个实验,我们使用所谓的平顶脉冲。它由上升段和下降段组成,中间是一个可以变化的恒定振幅。
与方形脉冲相比,它最小化了硬边缘的带宽需求。与宽度变化的高斯脉冲不同,它最大化了脉冲功率。
这个实验可以以与拉姆齐实验相同的方式实现。首先,我们必须改变具有上升/下降边缘的两个脉冲。上升沿需要一个波形,下降沿需要16个移位的副本。左填充现在将是波形的最大值,而不是零:
如果我们使用高斯边,它们可以这样创建