DDSの位相モード、周波数を変えた後の波をどこから始めるか

淡い青、桃色、緑の三つの輪が、切れ目の位置を変えて半透明の平面に並ぶ。位相の基準点の違いを表した抽象画。

量子実験で電気信号を使うときは、パルスを出す時刻だけでなく、その中の波をどの位置から始めるかも問題になります。山から始まる波と、そこから半周期ずれた波では、同じ周波数でも位相が異なります。予定時刻どおりに信号を更新できたとしても、更新後の位相をそろえられるとは限りません。

DDS(Direct Digital Synthesis、直接デジタル合成)は、デジタル値で波の進み方を指定する仕組みです。ここでは、量子実験制御ソフトウェアARTIQのAD9910用ドライバーにある三つの位相モードを比べます。違いは、周波数を変えたときに「それまで進んだ位相を残すか」「変更時刻から数え直すか」「別の基準時刻から進んだことにするか」です。[1]

簡単にまとめると?

  • continuousは内部で積み上げた位相を引き継ぎます。ただし、位相に加えるオフセットまで変えれば、出力の位相は飛ぶことがあります。
  • absoluteは変更時刻を、trackingは指定した基準時刻を位相の出発点にします。同じ周波数とオフセットでも、基準の取り方で更新直後の位相が変わります。
  • 位相の式と実機の再現性は別に確かめる必要があります。AD9910用ドライバーは、更新の整列条件とDMA再生時の注意を明示しています。

位相を「積み上げた分」と「あとから足す分」に分ける

位相は、波の一周のうちどこまで進んだかを表す量です。この記事では一周を1 turnとして数えます。0.25 turnは90度、0.5 turnは180度です。1.25 turnと0.25 turnは、周回数は違っても一周の中では同じ位置になります。

DDSでは、周波数に応じて内部の位相を少しずつ進めます。この蓄積を行う部分が位相アキュムレーターです。ARTIQの説明は、その内部位相をq、さらに足す位相オフセットをpと分け、出力位相をq+pとして扱います。周波数は進む速さ、オフセットは波を横へずらす量、と考えると違いを追いやすくなります。[1]

たとえば62.5 MHzなら、理想化した波は16 nsで一周します。更新後の周波数をこの値に固定すれば、三つのモードとも8 nsで0.5 turn進みます。違うのは速さではなく、どの位相からその半周を進むかです。

三つのモードは、位相の原点が違う

変更時刻をt′、変更後の周波数をf、現在時刻をt、tracking用の基準時刻をTとします。次の表はドライバーが示す基本の定義です。位相はturn、時刻は秒、周波数はHzとすると単位がそろいます。表の式は周回数も含めて書いており、一周の中の位置を見るときは整数部分を除きます。[1]

モード 更新後の位相φ(t) 引き継ぐ基準
continuous q(t′)+p+(t−t′)f 更新時点までの内部位相q(t′)
absolute p+(t−t′)f 変更時刻t′
tracking p+(t−T)f 指定した基準時刻T

continuousでは、周波数や位相の設定時にアキュムレーターを消しません。オフセットpを保った周波数変更なら、それまでの位相につながる形で、その後の進む速さが変わります。一方、pを変えれば、その変更量だけ位相は動きます。「continuous」という名前だけで、どの操作でも位相が連続すると解釈するのは早計です。

absoluteはアキュムレーターをリセットし、変更時刻の位相を指定したpにします。同じ条件で、設定のたびに波を同じ位置から始めたい場合の基準になります。ここでの比較では、absoluteに追加の基準時刻を指定しない通常の形を扱っています。

trackingもアキュムレーターをリセットしますが、基準時刻Tから新しい周波数fで動き続けていたと仮定した分を、位相オフセットへ加えます。過去の波形を追いかけて保存するのではなく、現在の設定と共通の時計から位相を計算する方式です。Tの既定値は0です。資料がcoherent phase modeとも呼ぶのは、この時間基準に沿う定義であり、光学系全体や量子状態のコヒーレンスを保証する意味ではありません。[1]

同じ62.5 MHzでも、更新直後は三つの位置になる

違いを見るため、次の値を置きます。装置で測った結果ではなく、定義式から計算する例です。変更時刻t′は24 ns、変更後のfは62.5 MHz、指定するpは0.125 turn、変更直前までの内部位相q(t′)は0.25 turnとします。trackingのTは0 nsです。continuousでは変更前後でpを同じ値に保ち、absoluteでは基準時刻を追加指定しません。

continuousの更新直後は0.25+0.125=0.375 turnです。absoluteは内部位相を消すので0.125 turnになります。trackingでは、基準時刻から24 nsの間に新しい周波数で1.5周進んだと計算し、pを足した1.625 turn、つまり一周内では0.625 turnになります。

モード 24 ns:更新直後 32 ns:8 ns後
continuous 0.375 turn(135度) 0.875 turn(315度)
absolute 0.125 turn(45度) 0.625 turn(225度)
tracking 0.625 turn(225度) 0.125 turn(45度)
24 nsでの位相をcontinuousは0.375、absoluteは0.125、trackingは0.625 turnとして、どの線も8 nsごとに0.5 turn進む比較図。
三つの位相モードを同じ更新後周波数で比較した自作図。線の傾きを見やすくするため、24 nsの位相を0以上1未満にそろえ、以後の周回を折り返さずに描いた。表は各時点の一周内の位置を示すため、trackingの32 nsは図の1.125 turnと同じ位置の0.125 turnになる。実機の遅延や波形測定を示す図ではない。

この例では、三つの波が進む速さは同じまま、位相の差も保たれます。trackingを選んでも、continuousの過去の位相へ自動的につながるわけではありません。逆に、trackingのTを変更時刻t′と同じに置けば、定義式はabsoluteの基本形と一致します。どちらが常に優れるかではなく、引き継ぎたいのが「直前の蓄積」か「共通の時刻」かで選びます。

設定値だけでなく、更新が反映される条件を確認する

ここまでの式は、位相の基準を理解するためのモデルです。実装では有限幅の整数を使います。保存したAD9910用ドライバーのset_muは、周波数を32 bitのFTW、位相オフセットを16 bitのPOW、振幅を14 bitのASFで指定します。位相オフセットの1刻みは1/65,536 turnです。この細かさは設定値の分解能であり、出力位相の測定精度ではありません。[2]

SPI通信で設定を渡したあと、共通のIO_UPDATE信号をパルス状に出して、新しい値を反映します。ソフトウェアで関数を呼び始めた時刻を、そのまま出力波形が変わる時刻とみなすことはできません。ドライバー内でも、基準時刻による位相補正と出力側のパイプライン遅延を区別しています。

また、この実装は、再現性のある位相制御に4 nsのSYNC_CLK格子へ操作を整列させる条件があると明記しています。通常の呼び出しでは整列を行いますが、記録済みの操作列をDMAで再生する場合は、SYNC_CLKに対して同じずれで再生を始める必要があります。そうでないと、どの周期に割り当てられるかが揺れ、ちょうど4 nsの遅延差が生じ得ます。62.5 MHzの例なら4 nsは0.25周、90度に相当します。これは条件違反時の影響を換算した値で、実機で90度の誤差を測定した結果ではありません。[2]

DMAにはもう一つ注意があります。既定の位相モード設定が記録・再生の中で不整合になり得るため、資料はsetやset_muの呼び出しでモードを明示することを勧めています。また、ref_time_muを明示するとabsolute側でも基準時刻に応じた補正が入る実装です。基本のモード名だけでなく、呼び出しに渡した引数まで見る必要があります。

trackingの補正後にcontinuousを続けるときも、指定前のpと、実際に書かれた補正後のオフセットは同じとは限りません。set_muが返す補正後の位相語を、後続のcontinuousで現在の位相として使うよう説明されています。モードを切り替える箇所では、アキュムレーターだけでなくオフセットの引き継ぎも確認点になります。[2]

そろえたいものに合わせて比較する

直前の波につながる周波数変更をしたいなら、continuousでpを保てるかを見ます。設定のたびに波を指定位置から始めたいなら、absoluteの変更時刻を基準に考えます。離れた更新を同じ時刻基準へ結びたいなら、trackingでTと周波数から求めた位相を比較します。そのうえで、更新信号、DMAの開始位置、共通クロック、信号が通る経路の遅延を確かめると、ソフトウェアの指定と実際の波の違いを切り分けやすくなります。

この記事の対象は、2026年10月18日に保存したARTIQの固定ソース版です。三つのモードの意味と条件を読むための例であり、装置へ接続した試験、複数DDSの同期実証、レーザーまで含む位相安定性の測定は行っていません。

ARTIQの開発や実験機器の提供を手がけるM-Labsの事業については、cyclewaveの企業解説で紹介しています。

M-Labsの企業解説を読む

出典

  1. ARTIQ・AD9910ドライバー固定版:set_phase_modeの定義。M-Labs公式リポジトリ。固定commit a7303a7a536935a2e4a7b8d1a537ca89f567772f、主に190–228行。
  2. 同固定版:set_muの設定幅、更新、整列、基準時刻補正。主に543–621行。同じソースの別箇所であり、独立した実験根拠ではない。
  3. ARTIQ Core drivers reference:AD9910。2026年10月18日保存時の表示版9.9698+a7303a7。後日更新され得るオンライン説明と、上記の固定版を区別した。