2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

位相の設定

Last updated at Posted at 2021-06-04

はじめに

Qiskit Textbookの6-1で紹介されている$\pi$パルスは、ゲート$R_x(\pi)$を作用させていることに相当します。量子回路作成する際には位相を変更したいこともあるはずでこの記事ではパルスに対して位相を操作する方法を紹介したいと思います。

https://qiskit.org/textbook/ch-quantum-hardware/calibrating-qubits-pulse.html#Our-$\pi$-pulse!

まず、Qiskit Pulseを動かすために必要な記述をまとめておきます。

import numpy as np
from qiskit import QuantumCircuit, transpile, Aer, IBMQ
from qiskit.visualization import *
from qiskit.circuit import Gate
from qiskit.circuit import Parameter
from qiskit import pulse

IBMQ.load_account()

provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')
backend = provider.get_backend('ibmq_armonk')
backend_defaults = backend.defaults()
backend_config = backend.configuration()

位相の設定の仕方

shift_phase()を使えば位相を変更したパルスを設定できます。

GHz = 1.0e9 # Gigahertz
MHz = 1.0e6 # Megahertz
us = 1.0e-6

qubit=0
frequency=4.97194*GHz
drive_sigma_sec=0.075*us
drive_duration_sec = drive_sigma_sec * 8 
pi_amp=0.14

with pulse.build(backend) as ry_1:
    pulse.set_frequency(frequency, pulse.drive_channel(qubit))
    pulse.shift_phase(np.pi/2, pulse.drive_channel(qubit))
    pulse.play(pulse.Gaussian(duration=16 * int(pulse.seconds_to_samples(drive_duration_sec) / 16),
                                  amp=pi_amp/2,
                                  sigma=pulse.seconds_to_samples(drive_sigma_sec),
                                  name="phase"), pulse.drive_channel(qubit))
    pulse.play(pulse.Gaussian(duration=16 * int(pulse.seconds_to_samples(drive_duration_sec) / 16),
                                  amp=pi_amp/2,
                                  sigma=pulse.seconds_to_samples(drive_sigma_sec),
                                  name="phase"), pulse.drive_channel(qubit))

ry_1.draw(backend=backend)

無題.png

draw()でみてみると最初に位相をずらしていること(VZ($-\pi/2$))が分かります。

ただこれだと、位相を変更したあとに、定義するパルスは全て位相が変わった状態になってしまいます。上記のScheduleの中で最初の一つのパルスだけ位相変更したいという場合はphase_offset()を利用すれば可能です。

with pulse.build(backend) as ry_2:
    pulse.set_frequency(frequency, pulse.drive_channel(qubit))
    with pulse.phase_offset(np.pi/2, pulse.drive_channel(qubit)):
        pulse.play(pulse.Gaussian(duration=16 * int(pulse.seconds_to_samples(drive_duration_sec) / 16),
                                  amp=pi_amp/2,
                                  sigma=pulse.seconds_to_samples(drive_sigma_sec),
                                  name="phase"), pulse.drive_channel(qubit))
    pulse.play(pulse.Gaussian(duration=16 * int(pulse.seconds_to_samples(drive_duration_sec) / 16),
                                  amp=pi_amp/2,
                                  sigma=pulse.seconds_to_samples(drive_sigma_sec),
                                  name="phase"), pulse.drive_channel(qubit))

ry_2.draw(backend=backend)

無題2.png

draw()を使ってみてみると最初のパルス実行後位相の設定がもとに戻っていることが分かります。パルスの色の濃淡でも位相が違うことを表現しています。

まとめ

この記事では位相の設定の仕方を紹介しました。パルスに対して位相の設定ができると実験の幅が広がりますね。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?