

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Braket でのパルス制御
<a name="braket-pulse-control"></a>

パルスとは、量子コンピュータ内の量子ビットを制御するアナログ信号です。Amazon Braket の特定のデバイスでは、パルス制御機能にアクセスし、パルスを使用して回路を送信できます。Braket SDK または OpenQASM 3.0 を使用して、あるいは Braket API から直接、パルス制御にアクセスできます。まず、Braket でのパルス制御の主要概念をいくつか紹介します。

**Topics**
+ [フレーム](#braket-frame)
+ [ポート](#braket-port)
+ [波形](#braket-waveform)
+ [Hello Pulse の使用方法](braket-hello-pulse.md)
+ [パルスを使用したネイティブゲートへのアクセス](braket-native-gate-pulse.md)

## フレーム
<a name="braket-frame"></a>

フレームは、量子プログラム内のクロックと位相の両方として機能するソフトウェア抽象化です。操作が特定の周波数で定義され、ステートフルキャリア信号によって行われます。操作するたびに、それにかかる時間がクロック時間として加算されます。量子ビットに信号を送信すると、フレームは量子ビットのキャリア周波数、位相オフセット、および、波形エンベロープが放出される時間を決定します。Braket Pulse では、フレームの構築方法はデバイス、周波数、位相によって異なります。デバイスに応じて、事前定義されたフレームを選択するか、ポートを指定して新しいフレームをインスタンス化できます。

```
from braket.aws import AwsDevice
from braket.pulse import Frame, Port

# Predefined frame from a device
device = AwsDevice("arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-3")
drive_frame = device.frames["Transmon_5_charge_tx"]

# Create a custom frame
readout_frame = Frame(frame_id="r0_measure", port=Port("channel_0", dt=1e-9), frequency=5e9, phase=0)
```

## ポート
<a name="braket-port"></a>

ポートは、量子ビットを制御する入出力ハードウェアコンポーネントを表すソフトウェア抽象化です。これにより、ハードウェアベンダーは、ユーザーが量子ビットを操作して監視できるインターフェイスを提供できます。ポートは、コネクタの名前を表す単一の文字列によって決定されます。また、この文字列には、波形をどれだけ細かく定義できるかを指定する最小時間増分も定義できます。

```
from braket.pulse import Port

Port0 = Port("channel_0", dt=1e-9)
```

## 波形
<a name="braket-waveform"></a>

波形は、出力ポートで信号を出力したり、入力ポートを介して信号をキャプチャしたりするために使用できる時間依存エンベロープです。波形を直接指定するには、複素数のリストを使用するか、ハードウェアプロバイダーからリストを生成する波形テンプレートを使用します。

```
from braket.pulse import ArbitraryWaveform, ConstantWaveform
import numpy as np

cst_wfm = ConstantWaveform(length=1e-7, iq=0.1)
arb_wf = ArbitraryWaveform(amplitudes=np.linspace(0, 100))
```

 Braket Pulse は、一定の波形、ガウシアン波形、断熱ゲートによる微分除去 (DRAG) 波形を含む、波形の標準ライブラリを提供します。次の例に示すように、`sample` 関数を使用して波形データを取得し、波形の形状を描画できます。

```
from braket.pulse import GaussianWaveform
import numpy as np
import matplotlib.pyplot as plt

zero_at_edge1 = GaussianWaveform(1e-7, 25e-9, 0.1, True)
# or zero_at_edge1 = GaussianWaveform(1e-7, 25e-9, 0.1)
zero_at_edge2 = GaussianWaveform(1e-7, 25e-9, 0.1, False)

times_1 = np.arange(0, zero_at_edge1.length, drive_frame.port.dt)
times_2 = np.arange(0, zero_at_edge2.length, drive_frame.port.dt)

plt.plot(times_1, zero_at_edge1.sample(drive_frame.port.dt))
plt.plot(times_2, zero_at_edge2.sample(drive_frame.port.dt))
```

![ZaE = True (下の曲線) と ZaE = False (上の曲線) の 2 つのケースの経時的な振幅を示すグラフ。曲線のベル形状のピークは 0.5 秒辺りで、振幅は 0.10 a. u. です。](http://docs.aws.amazon.com/ja_jp/braket/latest/developerguide/images/gaussianwaveform.png)


上の画像は、`GaussianWaveform` から作成されたガウス波形を示しています。パルス長 100 ns、幅 25 ns、振幅 0.1 (任意単位) を選択しました。波形はパルスウィンドウの中央に配置されます。`GaussianWaveform` はブール引数 `zero_at_edges` (凡例の ZaE) を入力として取ります。この引数を `True` に設定すると、t=0 と t=`length` のポイントがゼロになるようにガウス波形がオフセットされ、最大値が `amplitude` 引数の値になるように振幅が再スケールされます。