本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Hello Pulse
在本節中,您將了解如何直接在Rigetti裝置上使用脈衝來描述和建構單一 qubit 閘道。將電磁場套用至 qubit 會導致 Rabi 振盪,並在其 0 狀態和 1 狀態之間切換 qubit。使用經過校正的脈衝長度和階段,Rabi 振盪可以計算單一 qubit 閘道。在這裡,我們將決定測量 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
接著,使用 QPU 的 Amazon Resource Name(ARN) 來執行個體化新的 Braket 裝置。下列程式碼區塊使用 Rigetti Ankaa-3。
device = AwsDevice(Devices.Rigetti.Ankaa3)
下列脈衝序列包含兩個元件:播放波形和測量 qubit。脈衝序列通常可以套用至影格。有一些例外狀況,例如障礙和延遲,可套用至 qubit。在建構脈衝序列之前,您必須擷取可用的影格。驅動框架用於套用 Rabi 振盪的脈衝,而讀取框架用於測量 qubit 狀態。此範例使用 qubit 25 的影格。如需影格的詳細資訊,請參閱影格和連接埠的角色。
drive_frame = device.frames["Transmon_25_charge_tx"] readout_frame = device.frames["Transmon_25_readout_rx"]
現在,建立將在驅動影格中播放的波形。目標是描述不同脈衝長度的 qubit 行為。您每次都會播放不同長度的波形。請不要每次執行個體化新波形,而是在脈衝序列中使用 Braket 支援的可用參數。您可以使用免費參數建立波形和脈衝序列一次,然後使用不同的輸入值執行相同的脈衝序列。
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 ]
qubit 測量的統計資料會顯示在 0 狀態和 1 狀態之間振盪的 qubit 振盪動態。從測量資料中,您可以擷取 Rabi 頻率,並微調脈衝的長度,以實作特定的 1 qubit 閘道。例如,從下圖中的資料中,週期性約為 154 ns。因此,pi/2 輪換閘道會對應至長度 = 38.5ns 的脈衝序列。

使用 OpenPulse 的 Hello Pulse
OpenPulse
Braket 使用 OpenPulse做為基礎中繼表示法,在原生指示中表達脈衝。 OpenPulse支援以 defcal
(「定義校正」的簡稱) 宣告形式新增指令校正。透過這些宣告,您可以在較低層級的控制文法中指定閘道指令的實作。
您可以使用PulseSequence
下列命令檢視 Braket 的 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=openpulse_script) device = AwsDevice(Devices.Rigetti.Ankaa3) task = device.run(program, shots=100)