跳转至

拼接上升段与保持段

设计一个从零上升、保持最终幅度后结束的脉冲。先查看时间网格,再运行单原子实验,用脉冲面积核对激发概率。先完成全局驱动和物理单位,在安装好的环境中从仓库根目录运行。

上升段在 0.2 us 内从 0 升到 1.2 rad/us,随后保持 0.1 us。失谐和相位为零时,Hamiltonian 始终正比于 X。脉冲面积为 1.2 × 0.2 / 2 + 1.2 × 0.1 = 0.24 rad。从基态开始,运行前先预测 P(1) = sin²(0.24/2)。

拼接兼容的片段

"""组合一条 pulse,并检查降低后的 waveform sample。

``Waveform.concat`` 把 ramp 和 hold 串接起来,结果仍明确列出采样 grid 和总时长。
它只负责波形片段组合,不提供生产 channel scheduler。
"""

from __future__ import annotations

import json

from cascaqit import AHSProgram, AtomRegister, MockNeutralAtomTarget, Waveform


def main() -> None:
    """组合、lower、校验并执行一个双片段 pulse。"""
    ramp = Waveform.linear(0.0, 1.2, duration=0.2, waveform_id="ramp")
    hold = Waveform.linear(1.2, 1.2, duration=0.1, waveform_id="hold")
    rabi = ramp.concat(hold, waveform_id="rabi.composed")

    program = (
        AHSProgram(
            AtomRegister.line(count=1, spacing=5.0),
            program_id="lesson.experimentalist.waveform",
        )
        .drive(
            rabi=rabi,
            detuning=Waveform.constant(0.0, duration=0.3),
            phase=0.0,
        )
        .measure()
    )
    target = MockNeutralAtomTarget.v0_1()
    validated = program.validate(target, shots=16)
    result = program.run(shots=0, seed=302, target=target, time_steps=120)
    waveform_ir = program.to_ir().hamiltonian.rabi

    payload = {
        "track": "quantum_experimentalist",
        "level": "foundation",
        "lesson": "waveform_design",
        "facts": {
            "waveform_kind": waveform_ir.kind,
            "times": waveform_ir.times,
            "values": waveform_ir.values,
            "duration": waveform_ir.times[-1],
            "validation_errors": [
                item.code for item in validated.diagnostics if item.severity == "error"
            ],
            "probability_sum": round(sum((result.probabilities or {}).values()), 12),
        },
        "boundaries": {
            "hardware_execution": False,
            "cloud_execution": False,
            "network_accessed": False,
            "credentials_loaded": False,
        },
    }
    print(json.dumps(payload, sort_keys=True))


if __name__ == "__main__":
    main()

下载完整脚本

python3 examples/user/tracks/quantum_experimentalist/02_foundation_waveform_design_zh.py

保持段写成 Waveform.linear(1.2, 1.2, duration=0.1),使两段都属于线性波形族。concat() 将后续片段的时间平移到整个脉冲的时间轴上,返回新波形,原片段保持不变。

{
  "boundaries": {
    "cloud_execution": false,
    "credentials_loaded": false,
    "hardware_execution": false,
    "network_accessed": false
  },
  "facts": {
    "duration": 0.30000000000000004,
    "probability_sum": 1.0,
    "times": [
      0.0,
      0.2,
      0.30000000000000004
    ],
    "validation_errors": [],
    "values": [
      0.0,
      1.2,
      1.2
    ],
    "waveform_kind": "piecewise_linear"
  },
  "lesson": "waveform_design",
  "level": "foundation",
  "track": "quantum_experimentalist"
}

结果为分段线性波形,采样点接近 (0, 0)、(0.2, 1.2)、(0.3, 1.2)。打印出的 0.30000000000000004 是浮点加法的常见表示,不代表多设计了一小段脉冲。

脚本默认输出归一化检查。在本地副本中加入 print(result.probabilities),核对物理预测 P(1) ≈ 0.014331。本次执行使用 120 个时间步、零 shots,返回概率而不做有限次采样。校验调用中的 16 shots 用于检查目标约束,不会产生样本,也不会覆盖后面单独执行时的设置。

选择符合控制含义的表示

表示 给定时刻之间的含义
常量或分段常量 保持一个值,片段之间可以有阶跃
线性或分段线性 用直线连接相邻采样值
插值波形 使用保形 PCHIP 穿过给定采样点

这个拼接接口支持常量族内部或线性族内部的组合,线性片段接缝处的数值必须相等。即使数学上的保持段可以用两种方式表示,也不能直接混拼常量族和线性族。插值片段重新拟合后可能改变形状,因此不能这样拼接;应在整个时间范围上定义一条插值波形。插值控制指南介绍了对应接口。

检查设计修改

  1. 将保持段延长到 0.2 us,同时把失谐波形时长改为新的总时长。计算新脉冲面积与激发概率。
  2. 将保持段换成 Waveform.constant(1.2, duration=0.1),阅读报错,再恢复为兼容的线性表示。
  3. 保持线性表示,但把第二段起点从 1.2 改成 0.7。解释接缝为何被拒绝;如果真的需要阶跃,应使用怎样的波形表示?
核对思路

延长后的面积为 0.36 rad,P(1) = sin²(0.18) ≈ 0.032052。混合波形族会报 AHS_WAVEFORM_CONCAT_FAMILY_MISMATCH;不连续的线性接缝会报 AHS_WAVEFORM_CONCAT_LINEAR_SEAM_MISMATCH。阶跃应使用明确允许不连续的表示,并继续通过目标约束校验。总时长一致、采样值有限是必要条件,但不能单独证明物理控制器能产生这条脉冲。

脉冲面积的简便公式依赖单一旋转轴和零失谐。控制项不对易时,时间形状也会影响结果。下一课局域失谐将区分波形随时间的变化和它在空间上的权重。

English

SDK 1.0.8a · `6eff6362`