【自作量子コンピュータ NMRQCP】PythonでNMR信号を作ってみた

 こんにちは!自作の地球磁場NMR(EFNMR)方式で量子コンピューターの開発に挑戦している高専生です。

前回はひたすら煙と格闘する「はんだ付け」などハードウェアのお話をしましたが、今回は一転してソフトウェアのお話です。PC(Python)を使って、量子の世界をどうやって操作・観測するのか、僕が書いたシミュレーションのコードやグラフと一緒に解説します!

量子からのメッセージ「FID信号」と、立ちはだかるノイズ

量子コンピューターを作る上で、原子核の「スピン」が放つ極めて微弱な電波(NMR信号)を捉える必要があります。この信号は時間と共に弱まっていく滑らかで周期的なサイン波で、「FID信号(自由誘導減衰)」と呼ばれます。

数式で表すと s(t) = A sin(2πft) e-t/T2 となります。振幅や周波数に加えて、ネイピア数(e)を使うことで「原子核の震えが滑らかに止まっていく様子」を表現できます。これをPython(NumPyとMatplotlib)を使ってシミュレーションした理想的な波形がこちらです。

しかし、現実はこんなに綺麗な波ではありません。実際の観測では、宇宙からの雑音や電子回路から出るノイズがたっぷりと混ざります。実際に平均0、標準偏差0.2のホワイトノイズを足してみると、元の綺麗な信号はノイズに埋もれてバキバキの波形になってしまいます。

ノイズの海から真実を見つけ出す魔法「FFT」

では、このノイズだらけの波からどうやってターゲットの周波数を見つけ出すのか?ここで登場するのが「FFT(高速フーリエ変換)」です。

FFTは、横軸を周波数に変換して「どの周波数がどのくらい含まれているか」を可視化するツールで、光を色ごとに分ける「プリズム」のようなものです。レコードをイメージしてみてください。レコードを回す速さとデータが合わないと波はバラバラになって相殺されますが、速さがピタリと合うと波の山と谷が重なり合って重心がズレます。これを利用して特定の波をあぶり出します。

ちなみに「高速」と呼ばれるのは、普通のフーリエ変換の計算量が N2 なのに対し、FFTは N log N という圧倒的に少ない計算量で処理できるからです。

量子を操る「パルス制御」の仕組み

FFTで波形を解析して得られたHz(周波数)は、「量子ビットが受け取れる電波のHz」を意味しています。

ここからが量子コンピューターの面白いところです。FFTで見つけたのと同じHzの電波を量子ビットに当てると、「共鳴」が起きて原子がエネルギーを吸収し、スピンの方向が変化します。この電波(パルス)を当てる時間を調整することで、量子の状態を自由にコントロールできるんです。

結果を確認するときも同じです。原子が震えて電波を出していればFFTでピークが出て「1(または重ね合わせ)」、電波を出さなければピークなしで「0」と判定します。

このシミュレーションのように、僕のEFNMRQCプロジェクトでも実際にコイルから電波(パルス)を放ち、返ってきた信号をFFTで解析して量子状態を観測しようとしています。理論をコードにしてグラフが動くと、一気に量子の世界が身近に感じられますよね!


「本当に動くのか?」「どうやって波形を出すのか?」など、気になった方はぜひブログのブックマークやXのフォローをお願いします!

コメント

このブログの人気の投稿

【自作量子コンピュータ NMRQCP】いよいよ稼働かと思いきやデバッグ地獄