Qiskit pulseを用いて状態操作では,qiskit.pulseを用いて状態操作を行いました.今回は同様の実験を,qiskit_experimentsを用いて,より簡単に行いたいと思います.
qiskit_experiments
Qiskit pulseを用いて状態操作では,マイクロ波の波形から逐一設定していました.これらの面倒な設定を代行してくれるのがqiskit_experimentsです(多分).
それでは,Qiskit pulseを用いて状態操作と同じ実験を実際に行ってみましょう.
Calibrations
import numpy as np
import qiskit.pulse as pulse
from qiskit.circuit import Parameter
from qiskit_experiments.calibration_management.calibrations import Calibrations
from qiskit_experiments.library.calibration.rough_frequency import RoughFrequencyCal
from qiskit import schedule
from qiskit import IBMQ
IBMQ.save_account("") #tokenを代入
#IBMQ.load_account()
provider = IBMQ.get_provider(hub='ibm-q')
backend = provider.get_backend('') #使えるbackendを選んでください
qubit = 0
cals=Calibrations.from_backend(backend)
# 単位変換係数
GHz = 1.0e9 # Gigahertz
MHz = 1.0e6 # Megahertz
us = 1.0e-6 # Microseconds
ns = 1.0e-9 # Nanoseconds
# おおよその周波数を取得
freq01_estimate = backend.defaults().qubit_freq_est[qubit]
# その周辺で周波数をスイープ
frequencies = np.linspace(freq01_estimate-30*MHz, freq01_estimate+30*MHz, 100)
spec = RoughFrequencyCal([qubit], cals, frequencies, backend=backend)
spec.set_experiment_options(duration=120*ns, sigma=15*ns, amp=0.05)
これでマイクロ波の波形の設定まで終わりました.Qiskit pulseを用いて状態操作と比較すると,簡略化されていることが分かります.一方で,公式ドキュメントのRoughFrequencyCalを見ると,波形はGaussianSquareしか対応していないことが分かります1.実際に波形について見てみると,
next(iter(circuit.calibrations["Spec"].values())).draw()
circuit.calibrations["Spec"]
#{((0,),
# (-30000000.0,)): ScheduleBlock(ShiftFrequency(-30000000, DriveChannel(0)), Play(GaussianSquare(duration=240, sigma=30.000000000000004, width=0.0, amp=0.05, angle=0), DriveChannel(0)), ShiftFrequency(30000000, DriveChannel(0)), name="spectroscopy", transform=AlignLeft())}
と,GaussianSquareになっていることが分かります2.このように,波形の種類を制限してしまうという欠点もあります.
結果のプロットも簡単です.
spec_data = spec.run().block_for_results()
spec_data.figure(0)
自動でローレンツ関数でフィッティングしてくれます.嬉しいですね.Qiskit pulseを用いて状態操作と同様の結果が得られていることが分かります.
最後に
2量子ビット操作も実験してみたいですね.
Version Information
Software | Version |
---|---|
qiskit | 0.45.1 |
qiskit_experiments | 0.5.4 |
System information | |
---|---|
Python version | 3.10.12 |
-
波形については,量子ビットのパルス操作シミュレーションでも少し紹介しました. ↩
-
durationやsigmaが設定した値の2倍となって表示されていることが分かります.おそらく単位が異なるのだろうと思っているのですが,原因はよく分かっていません. ↩