量子フーリエ変換
この「Qiskit in Classrooms」モジュールを使用するには、以下のパッケージがインストールされ た Python 環境が必要です:
qiskitv2.1.0 以降qiskit-ibm-runtimev0.40.1 以降qiskit-aerv0.17.0 以降qiskit.visualizationnumpypylatexenc
上記パッケージのセットアップとインストールについては、Qiskit のインストールガイドを参照してください。 実際の量子コンピューターでジョブを実行するには、IBM Cloud アカウントのセットアップガイドの手順に従って IBM Quantum® のアカウントを作成する必要があります。
このモジュールはテスト済みで、QPU 時間を 13 秒使用しました。これはあくまで目安であり、実際の使用量は異なる場合があります。
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
はじめに
フーリエ変換は、数学、物理学、信号処理、データ圧縮をはじめとする無数の 分野で広く活用されている手法です。量子版のフーリエ変換、すなわち「量子フーリエ変換」は、最も重要な量子アルゴリズムの一部の基盤となっています。
本日は、古典的なフーリエ変換のおさらいをしたうえで、量子コンピューター上での量子フーリエ変換の実装方法について説明します。次に、量子フーリエ変換を応用した「位相推定アルゴリズム」についても解説します。量子位相推定は、量子コンピューティングの「最高傑作」とも呼ばれる Shor の素因数分解アルゴリズムのサブルーチンです。このモジュールは Shor のアルゴリズム全体を扱う別のモジュールへの足がかりとなっていますが、単体としても完結した内容を目指しています。量子フーリエ変換は、それ自体としても魅力的かつ有用なアルゴリズムです!
古典的フーリエ変換
量子フーリエ変換に踏み込む前に、まず古典版のフーリエ変換を振り返りましょう。フーリエ変換は、ある「基底」から別の基底へと変換する手法です。二つの基底は、同じ問題を異なる視点から見たものと考えることができます。どちらも関数を表現する有効な方法ですが、問題によってどちらか一方がより明快な場合があります。フーリエ変換によって結ばれる基底の組の例としては、位置と運動量、時間と周波数などが挙げられます。
では、フーリエ変換を使って、オーディオ波形からどの音が演奏されているかを識別する例を 見てみましょう。通常、波形は時間基底で表現されます。つまり、波の振幅が時間の関数として表されます。

この波形をフーリエ変換することで、時間基底から周波数基底へ変換できます:

周波数基底では、約 260 Hz に明確なピークを確認できます。これはミドル C(中央のド)です!
フーリエ変換なしにミドル C が演奏されていることを判断できたかもしれませんが、複数の音が同時に演奏されている場合はどうでしょうか?時間基底でプロットすると、波形はより複雑になります:

しかし、周波数スペクトルでは三つのピークがはっきりと識別されます:

これは C メジャーコードで、ド・ミ・ソの音が演奏されていました。