你好脈衝 - Amazon Braket

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

你好脈衝

在本節中,您將學習如何直接使用脈衝來表徵和構造單個量子比特門 Rigetti 設備。將電磁場施加到量子比特導致拉比振盪,在其 0 狀態和 1 狀態之間切換量子位。通過校準的脈衝長度和相位,Rabi 振盪可以計算單個量子比特門。在這裡,我們將確定測量 pi/2 脈衝的最佳脈衝長度,這是一個用於構建更複雜脈衝序列的基本塊。

首先,要構建一個脈衝序列,導入PulseSequence類。

from braket.aws import AwsDevice from braket.circuits import FreeParameter from braket.devices import Devices from braket.pulse import PulseSequence, GaussianWaveform import numpy as np

接下來,使用實例化一個新的 Braket 設備 Amazon Resource Name 的 ARN () QPU。下面的代碼塊使用 Rigetti Ankaa-2.

device = AwsDevice(Devices.Rigetti.Ankaa2)

以下脈衝序列包括兩個組成部分:播放波形和測量量子位。脈衝序列通常可以應用於幀。在某些例外情況下,例如障礙和延遲,可以應用於量子比特。在構建脈衝序列之前,您必須檢索可用幀。驅動框架用於施加脈衝進行 Rabi 振盪,讀出框架用於測量量子位狀態。這個例子中,使用量子比特 25 的幀。如需框架的詳細資訊,請參閱框架和連接埠的角色

drive_frame = device.frames["Transmon_25_charge_tx"] readout_frame = device.frames["Transmon_25_readout_rx"]

現在,創建將在驅動器幀中播放的波形。目標是描述不同脈衝長度的量子位的行為。您將每次播放不同長度的波形。而不是每次都實例化一個新的波形,而是在脈衝序列中使用制動器支持的自由參數。您可以使用自由參數創建一次波形和脈衝序列,然後使用不同的輸入值運行相同的脈衝序列。

waveform = GaussianWaveform(FreeParameter("length"), FreeParameter("length") * 0.25, 0.2, False)

最後,將它們組合在一起作為脈衝序列。在脈衝序列中,在驅動器框架上play播放指定的波形,並從讀出幀capture_v0測量狀態。

pulse_sequence = ( PulseSequence() .play(drive_frame, waveform) .capture_v0(readout_frame) )

掃描一定範圍的脈衝長度,並將其提交給QPU.

start_length=12e-9 end_length=2e-7 lengths = np.arange(start_length, end_length, 12e-9) tasks = [ device.run(pulse_sequence, shots=100, inputs={"length": length}) for length in lengths ] probability_of_zero = [ task.result().measurement_counts['0']/N_shots for task in tasks ]

量子比特測量的統計信息顯示了在 0 狀態和 1 狀態之間振盪的量子比特的振盪動態。從測量數據中,您可以提取 Rabi 頻率並微調脈衝的長度以實現特定的 1 量子比特門。例如,從下圖中的數據中,週期性約為 154 ns。因此,pi/2 旋轉門將對應於長度為 38.5ns 的脈衝序列。

以秒為單位顯示脈衝持續時間的人口量的折線圖。圖中有兩個峰和一個波谷。

你好脈衝使用 OpenPulse

OpenPulse是一種用於指定一般量子裝置的脈衝位準控制的語言,並且是 Open QASM 3.0 規範的一部分。Amazon Braket 支持 OpenPulse 用於使用 Open QASM 3.0 表示法直接編程脈衝。

布拉克特用途 OpenPulse 作為在本地指令中表達脈衝的基礎中間表示。OpenPulse 支持以defcal(「定義校準」)聲明的形式添加指令校準。使用這些聲明,您可以在較低級別的控制語法中指定 gate 指令的實現。

您可以使用以下命令查看 Braket PulseSequence 的 OpenPulse 程序。

print(pulse_sequence.to_ir())

您也可以直接建構 OpenPulse 程式。

from braket.ir.openqasm import Program openpulse_script = """ OPENQASM 3.0; cal { bit[1] psb; waveform my_waveform = gaussian(12.0ns, 3.0ns, 0.2, false); play(Transmon_25_charge_tx, my_waveform); psb[0] = capture_v0(Transmon_25_readout_rx); } """

使用腳本創建一個Program對象。然後,將程序提交到QPU.

from braket.aws import AwsDevice from braket.devices import Devices from braket.ir.openqasm import Program program = Program(source=qasm_script) device = AwsDevice(Devices.Rigetti.Ankaa2) task = device.run(program, shots=100)