このアプリケーションノートは、このシリーズのパート1の続編として機能します。 ボックスカー平均化器によるSNR測定の改善このアプリケーションノートでは、デュアルボックスカーアベレージャの構成と動作原理について説明し、特に以下の実装に重点を置いています。 Mokuクラウドコンパイル Moku:Pro で。

デュアルボックスカーアベレージャの動作原理

デュアルボックスカーアベレージャは、特にポンププローブ実験やDCオフセットの影響を受けやすいアプリケーションにおいて、高度な測定技術に不可欠なツールです。シングルボックスカーアベレージャの機能を拡張したデュアルボックスカーシステムは、複数の同期シングルボックスカーアベレージャを組み込むことで、性能をさらに向上させます。

ポンプ・プローブ分光実験では、ポンプパルスが試料を励起し、電子を基底状態から振動状態または電子励起状態へと遷移させます。この結果生じるプローブパルスの強度変調は、分子振動、ポピュレーションダイナミクス、励起状態寿命に関する重要な情報をエンコードします。ポンプレーザーの繰り返し周波数がプローブレーザーの半分の場合、プローブパルスは1つおきにのみポンプ誘起変調を受け、その他のパルスは基準として機能します。したがって、正味のポンプ・プローブ信号を正確に抽出するには、システムは各ポンプトリガー周期内で連続する2つのプローブパルスを独立して積分・解析する必要があります。このアプローチでは、各サイクル内で両方のプローブパルスの同時信号処理を可能にするために、2つのボックスカーアベレージャを使用する必要があります。

図1は、デュアルボックスカーアベレージャの動作図を示しています。ベースラインゲートウィンドウとボックスカーゲートウィンドウが示されています。両方のウィンドウは同じトリガー信号でアクティブになり、ゲート幅も同じですが、トリガー遅延は異なります。その結果、ゲートウィンドウは入力信号の特定の部分に合わせてシフトされます。ポンププローブ実験では、この構成により、システムはXNUMXつのパルスを個別に測定し、それらの差を計算することができます。

デュアルボックスカーアベレージャーの出力は、2つのパルスの積分値の差を表す単一の値です。この差は測定対象サンプルの特性を反映します。

図1:デュアルボックスカーアベレージャの動作原理。XNUMX組のパルスが同時に解析されます。トリガー信号は、同一のゲート幅と異なるトリガー遅延を持つXNUMXつの積分ボックスカーゲートを可能にします。

デュアルボックスカーアベレージャの実装は、シングルボックスカーアベレージャの設計を複製し、いくつかの変更を加えるだけで済みます。ボックスカーアベレージャに関する詳細な背景情報については、 このアプリケーションノートデュアルボックスカーアベレージャの基本構造を図2に示します。「シングルボックスカー」は、専用の制御レジスタを備えたフル機能のシングルボックスカーアベレージャを指します。変更点としては、追加の減算器と、出力段で複数の信号を処理するための信号選択機構の導入が挙げられます。

図2:デュアル・ボックスカー・アベレージャのブロック図。各「シングル・ボックスカー」は、XNUMXつのパルス信号とXNUMXつのトリガー信号を受信して​​XNUMXつのボックスカー・アベレージャを実行する、フル機能のボックスカー・アベレージャ・ブロックです。デュアル・ボックスカー・アベレージャはXNUMX組のボックスカー・アベレージャで構成されています。XNUMXつのボックスカー・アベレージャの結果を減算することで、差分測定が行われます。

構築されたボックスカーアベレージャは、1組ではなく2組のデュアルボックスカーアベレージャを備えています。一部のアプリケーションでは、さらに高度な測定が求められ、2つのパルス間の差分測定だけでなく、ベースラインを差し引いた各パルスの絶対強度も求められます。このニーズに対応するため、2組目のデュアルボックスカーアベレージャが導入され、1組目のボックスカーアベレージャでパルス信号を積分し、もう1組のボックスカーアベレージャでDCベースラインを積分します。ベースラインを除去することで、システムはレーザーパルス信号の絶対強度を復元し、バックグラウンドノイズを最小限に抑えます。ベースラインの変動は不要なノイズを発生させ、測定の精度と信頼性を低下させる可能性があるため、このアプローチは特に重要です。

このアプリケーションノートは操作ガイダンスに重点を置いています。構造の詳細については、 GitHub上のSimulinkモデル.

デュアルボックスカー平均化器の実装

デュアルボックスカーアベレージャの動作は、シングルボックスカーアベレージャと同じ基本的なプロセスに従います。ただし、デュアルボックスカーアベレージャには複数の出力モードがあり、ユーザーは異なるアベレージャで計算された値を選択して出力できます。

このセクションでは、PythonコントロールパネルとMoku Cloud Compile制御レジスタを使用して、Moku:Proでデュアルボックスカーアベレージャを操作する方法について説明します。Moku Python APIを使用して開発されたPythonコントロールパネルは、デュアルボックスカーアベレージャを制御するためのグラフィカルインターフェースを提供します。このインターフェースの主な利点は、ビット、ボルト、ナノ秒間の自動変換が可能で、設定プロセスを簡素化できることです。一方、Moku Cloud Compile制御レジスタも完全な制御機能を提供しますが、手動で値を変換する必要があります。この点については、このアプリケーションノートの後半で詳しく説明します。

Pythonコントロールパネル

(1)トリガーレベルの調整

この実験では、トリガー信号の振幅は150 mVです。トリガーレベルを75 mVに設定することで、ボックスカー積分における信頼性の高い安定したトリガーを実現できます。ボックスカーウィンドウは、システムが正しくトリガーされた場合にのみ表示されます。そうでない場合、安定したパルス信号もトリガー信号も表示されません。図3(a)は、トリガーレベルがトリガー信号の振幅よりも高く設定されているため、ボックスカーウィンドウがアクティブにならないシナリオを示しています。

図3(b)は、パルスボックスカーとベースラインボックスカーを区別するために、意図的に振幅の異なるXNUMXつのボックスカーウィンドウを示しています。振幅が大きい方がパルスボックスカーに対応し、振幅が小さい方がベースラインボックスカーを表しています。

図3:異なるトリガーレベル設定におけるシステム応答。(a) トリガーレベルを0.2V(トリガー信号振幅0.15Vを超える)に設定すると、ボックスカーウィンドウはアクティブになりません。その結果、ボックスカーウィンドウもパルス信号も存在しません。(b) トリガーレベルをトリガー信号振幅の半分の0.075Vに下げると、グラフの赤い線で示されているように、両方のボックスカーウィンドウが正常にトリガーされます。パルスボックスカーゲートの振幅は大きくなりますが、ベースラインボックスカーゲートの振幅は小さくなります。

(2)トリガーボックスカーゲートのウィンドウをパルス信号に合わせてゲート幅を設定する

このステップでは、トリガー遅延とボックスカーゲート幅が入力信号の特性に正確に一致するように最適化されます。システムには0組のデュアルボックスカーアベレージャが含まれているため、最初のタスクはどちらのアベレージャを設定するかを選択することです。モードを「Align AveragerXNUMX」に設定すると、最初のデュアルボックスカーアベレージャのトリガー遅延を調整できます。

トリガー遅延は、ボックスカーウィンドウが対象パルスの開始点と一致するように設定されます。一致したら、図4に示すように、ゲート幅を調整してパルス幅の大部分を積分します。一貫性を保つため、両方のボックスカーウィンドウは同じゲート幅を使用するように設定されています。

図4:Averager0の設定。最初のデュアルボックスカーアベレージャを調整するために、設定モードは「Align Averager0」に設定されています。ゲート幅は35.2ns、パルストリガ遅延は230.4ns、ベースライントリガ遅延は380.8nsに設定されています。これらのXNUMXつのボックスカーウィンドウはパルスと適切に位置合わせされており、正確な信号積分が保証されています。

次に、追加のデュアルボックスカーアベレージャーが必要な場合は、Averager1のトリガー遅延とゲート幅を調整します。前のステップと同様に、5つの積分ゲートが対応する信号を解析するように構成されています。図1では、このセットアップでパルス信号とベースライン信号の両方を解析しています。したがって、AveragerXNUMXの出力は最初のパルスの絶対信号振幅を表します。

図5:Averager1の設定。出力モードは「Align Averager1」に設定されています。パルストリガ遅延はAverager230.4と同じ0nsに設定されています。ただし、DCオフセットを測定するため、ベースライントリガ遅延は512nsに設定されています。ベースラインボックスカーウィンドウがDCオフセットのみを捕捉するように設定されている場合は、このベースライントリガ遅延を調整できます。

正常に動作させるには、トリガ遅延差がパルス幅よりも大きくなければなりません。図6では、トリガ遅延差は25.6nsで、ゲート幅35.2nsよりも小さくなっています。その結果、XNUMXつのボックスカーゲートが重なり合い、意図しない動作が発生し、ユーザーインターフェースに警告メッセージが表示されます。

図6:トリガ遅延とゲート幅の不適切な設定。トリガ遅延の差は25.6nsで、これはベースライントリガ遅延230.4nsからパルストリガ遅延256nsを差し引くことで算出されます。この値がゲート幅よりも小さいため、ボックスカーゲート間に重なりが生じています。その結果、表示されたボックスカーウィンドウ(赤いトレース)には大きな異常なピークが示され、ゲートの重なりが示されています。

(3)平均化期間数の選択とゲイン段の調整

各平均化器は、パルス積分器とベースライン積分器の差を出力します。出力ゲインを適切に設定することは不可欠です。設定を誤ると出力飽和が発生する可能性があります。飽和が発生した場合、テキストボックスに警告メッセージが表示されます(図7)。これを修正するには、出力ゲインを下げる必要があります。

図7:高い出力ゲインによる出力飽和。Averager0の結果を表示するために、モードは「Output Averager0」に設定されています。ゲインは0.2に設定されており、出力は約-1.036Vとなり、Moku:Proの飽和限界である-1.095Vに近づきます。出力ゲインが高すぎることを示す飽和警告が生成されます。

ボックスカー アベレージャの出力は、平均ではなく、n 個のボックスカーの積分結果の合計です。この設計選択は、FPGA に除算器を実装する際の計算の複雑さとリソース要件によるものです。積分結果を直接出力する方が、実際の平均を計算するよりも効率的です。図 8 に示すように、出力ゲインが適切に設定されている場合、アベレージャ出力がインターフェイスに表示されます。「Averaged Output_0」は、再スケールされた実数値を表します。これは、生の積分出力を平均数と出力ゲインの両方で割ることによって得られます。たとえば、ボックスカー アベレージャ出力から取得された生の値は、スコープに示すように約 -0.5556 V です。ただし、表示される「Averaged Output_0」の値は、約 -55.56 mV です。この 10 分の 100 の減少は、平均化係数が 0.1 でゲイン設定が 10 であるためであり、この場合、アベレージャの全体的な生のゲインは XNUMX になります。

\(\text{平均} = \frac{\text{合計パルス振幅}}{\text{平均数} \times \text{ゲイン}}\)

図8:適切な出力ゲインで再スケールされた平均化器の出力。出力ゲインは0.1に設定されており、平均値は-55.56 mVと表示されます。しかし、スコープの読み取り値(青いトレース)は約-0.5556 Vを示しています。この不一致は、表示値が10分の10に再スケールされているため、平均化係数100とゲイン設定0.1によって決まる生のゲインXNUMXの複合効果によって生じています。

さらに、両方の平均化器の結果を同時に表示できます。出力モードを「両方出力」に設定すると、両方の出力を表示できます。図9の青い線はAverager0の結果、赤い線はAverager1の結果です。データはMoku:Proから直接ストリーミングされ、Moku APIを使用してさらに処理および分析できます。

図9:両方のアベレージャの同時出力表示。出力モードは「両方出力」に設定されており、両方のデュアル・ボックスカー・アベレージャの出力が有効になっています。出力ゲインは、Averager0.1が0、Averager0.01が1に設定されています。平均出力値は、コントロールパネルにそれぞれ-55.9 mVと232.6 mVと表示されます。

Moku Cloud Compile 制御レジスタ

デュアルボックスカーアベレージャは、Mokuアプリ内でMoku Cloud Compile制御レジスタを手動で調整することでも制御できます。表1は各ポートに関連付けられた機能の概要を示しています。表は0つのセクションで構成されています。I/Oポート定義と共有制御レジスタ、そしてAverager1用とAveragerXNUMX用のXNUMXつの独立した制御レジスタセットです。この構造により、両方のボックスカーアベレージャを完全に制御できます。

表 1: ボックスカー平均化器の入力、制御、および出力ポートの構成。

信号ポート データ型 説明

共有I/Oポートと制御レジスタ

入力A 符号付き16ビット 入力パルス信号
入力B 符号付き16ビット トリガー信号
出力A 符号付き16ビット ボックスカー平均化器出力信号(シングルおよびデュアル出力モード)

入力パルス信号(アラインモード)

出力B 符号付き16ビット ボックスカーゲートウィンドウ(アラインモードとシングル出力モード)

ボックスカー平均化器出力信号(デュアル出力モード)

Control0 符号付き16ビット トリガーレベル、立ち上がりエッジでアクティブ
Control15 4ビット コントロール15 = 4 : 両方のボックス平均器を出力する

コントロール15 = 7 : 出力平均化器_0

コントロール15 = 9 : 出力平均化器_1

コントロール15 = 13: averager_1 を揃える

コントロール15 = 15: averager_0 を揃える

Boxcar averager_0 制御レジスタ

Control1 符号なし16ビット PulseTriggerDelay_0(クロックサイクル単位)
Control2 符号なし16ビット BaselineTriggerDelay_0(クロックサイクル単位)
Control3 符号なし16ビット GateWidth_0(クロックサイクル単位)
Control4 符号なし16ビット AvgLength_0、ボックスカー積分器からの結果の単位での平均の長さ
Control5 符号なし32ビット Gain_0、結果を 16 ビット信号に再スケーリングするための出力信号ゲイン。

Control16 の下位 5 ビットは、小数ゲインとして構成されます。

Boxcar averager_1 制御レジスタ

Control6 符号なし16ビット PulseTriggerDelay_1(クロックサイクル単位)
Control7 符号なし16ビット BaselineTriggerDelay_1(クロックサイクル単位)
Control8 符号なし16ビット GateWidth_1(クロックサイクル単位)
Control9 符号なし16ビット AvgLength_1、ボックスカー積分器からの結果の単位での平均の長さ
Control10 符号なし32ビット Gain_1、結果を 16 ビット信号に再スケーリングするための出力信号ゲイン。

Control16 の下位 10 ビットは、小数ゲインとして構成されます。

(1)トリガーレベルの調整

Moku Cloud Compileブロックの制御レジスタは、図10 (b)に示す値に設定されています。スイッチ制御はAverager0を設定するために15に設定されています。トリガーレベルは2,244に設定されており、これはトリガー閾値振幅 \(75 \text{mV}\) に相当します( \(\frac{\text{2244 LSBs}}{\text{29925 LSBs/V}} \approx 75 \text{mV}\) ここで、LSBは最下位ビット(Least Significant Bit)を表し、\(29925 \text{ LSBs/V}\)はMoku:Proのデジタル分解能です)。図10(a)では、トリガーレベルがトリガー信号振幅よりも高い0.2 V \(\left( \frac{5985 \text{ LSBs}}{29925 \text{ LSBs/V}} \approx 200 \text{ mV} \right)\)に設定されているため、ボックスカーウィンドウがトリガーされていないことは明らかです。

アライメント プロセスの前に、トリガー遅延を 0 に設定できます。ゲート幅が 320 ns の場合、その制御レジスタは \(\frac{320 \text{ ns}}{T_{clk}} = 100\) として構成されます。ここで、Moku:Pro では \(T_{clk} = \frac{1 \text{ s}}{312.5 \text{ MHz}} = 3.2 \text{ ns}\) となります。

図 10: Moku Cloud Compile 制御レジスタの初期構成。(a) トリガー レベルは 0.2 V に設定されており、ボックスカー ウィンドウはトリガーされていません。(b) トリガー レベルは 75 mV に設定され、ゲート幅は 320 ns に設定されているため、320 ns のボックスカー ウィンドウが表示されます (青いトレース)。

(2)トリガーボックスカーゲートのウィンドウをパルス信号に合わせてゲート幅を設定する

ここでの調整は、 ゲート幅 \(11 \times 3.2 \text{ns} = 35.2 \text{ns} パルス幅を合わせるために。次に、 パルストリガー遅延 \)latex に設定されています 72 × 3.2 ns = 230.4 ns、続いて、 ベースライントリガー遅延 に \(119 × 3.2 ns = 380.8 ns図11に示すように、この調整により、青(ボックスカーウィンドウ)と赤(パルス)のトレースが適切に整列し、各パルスが対応するボックスカーウィンドウに適切に統合されるようになります。

図11は、パルスボックスカーとベースラインボックスカーを区別するために、それぞれ異なる振幅を持つXNUMXつのボックスカーウィンドウを示しています。振幅が大きい方がパルスボックスカーに対応し、振幅が小さい方がベースラインボックスカーに対応しています。両方のボックスカーウィンドウは、一貫性を保つために同じゲート幅を使用するように設定されています。

図11:ボックスカー積分におけるトリガ遅延とゲート幅の設定。ゲート幅は35.2 nsに設定され、パルストリガ遅延は230.4 ns、ベースライントリガ遅延は380.8 nsです。ゲートウィンドウが長い方がパルスボックスカーゲート、短い方がベースラインボックスカーゲートであり、対象パルスの適切な積分を保証します。

Averager0の設定後、追加のデュアルボックスカーアベレージャが必要な場合は、Averager1のトリガー遅延とゲート幅を調整できます。前のステップと同様に、12つの積分ゲートが設定され、対応する信号を解析します。図1では、この設定によりプローブパルスとベースライン(DCレベル)信号が捕捉されています。その結果、AveragerXNUMXの出力は最初のパルスの絶対信号振幅を反映します。

図12:Averager1の設定。スイッチコントロールは13に設定され、Averager1のボックスカーウィンドウを視覚化しています。ベースライントリガー遅延は160×3.2 ns=512 nsに設定され、ベースラインボックスカーはDCオフセットのみを積分する空の領域に配置されています。

正しく動作させるには、トリガ遅延差がパルス幅よりも大きくなければなりません。図13では、トリガ遅延差は$latex(79-72)\times 3.2\text{ns} = 22.4\text{ns}であり、ゲート幅35.2nsよりも小さくなっています。そのため、2つのボックスカーゲートが意図せず重なり合い、青い線に異常なピークが観測されます。

図13:トリガ遅延とゲート幅の設定が不適切です。トリガ遅延の差は22.4nsで、ゲート幅よりも小さいため、ボックスカーゲート間のオーバーラップが発生します。その結果、表示されるボックスカーウィンドウ(青いトレース)には、ゲートのオーバーラップを示す大きな異常なピークが見られます。

(3)平均期間数の選択とゲイン段の調整

各平均化器は、パルス積分器とベースライン積分器の差を表す出力を生成します。出力ゲインを適切に設定することは非常に重要です。不適切な設定は出力飽和につながる可能性があります。飽和が発生した場合は、出力ゲインを適宜下げてください。

図65,536(b)では、ゲイン制御レジスタが14に設定されており、実質的には最下位16ビット(小数ビット)がすべて16、整数ゲイン(最上位655,360ビット)が10に設定されます。これにより、ボックスカー平均化器の出力は32,768のゲインになります。顕著な量子化誤差が発生する場合は、この値を増やして出力を増幅することができます。例えば、この制御レジスタを0.5に設定するとXNUMX倍のゲインが適用されますが、XNUMXに下げると飽和を防ぐためにXNUMX倍の減衰が適用されます。

図14(a)では、ゲインコントロールが6,553に設定されており、これは0.1倍の減衰に相当します。その結果、出力は-557.26 mVとなり、許容出力範囲内に収まります。図14(b)では、読み出し値は-1.0950 Vで、これはMoku:Proの飽和限界を示しており、この構成ではAverager0が飽和していることを示しています。飽和を回避するには、ゲインを下げる必要があります。

前述の通り、ボックスカー平均化器の出力は、平均値ではなく、n個のボックスカーウィンドウからの積分結果の合計です。FPGAに除算器を実装するとリソースを大量に消費し、時間がかかるため、このアプローチが推奨されます。したがって、実際の平均値を計算するよりも、積分結果を出力する方が効率的です。そして、復元された値は\(\frac{-557.26 \text{ mV}}{100 \times 0.1} = -55.726 \text{ mV}\)です。

図14:ゲイン設定を変えたAverager0の出力。(a) スイッチコントロールを7に設定し、Averager0の結果を表示しています。平均長は100に設定され、ボックスカー積分器からの100ポイントを平均化します。ゲインは6,553に設定され、0.1倍の減衰が適用されます。(b) ゲイン係数を65,536に増加し、ユニティゲインになります。これにより飽和が発生し、出力値は-1.0950 Vとなり、Moku:Proの最小出力値となります。

さらに、デュアルボックスカーアベレージャは、両方のボックスカーアベレージャからの出力を同時に出力できます。これらの値の表示には2つのチャンネルが使用されます。赤チャンネル(InA)はAverager0の出力を表し、青チャンネル(InB)はAverager1の出力を表します。これらの出力は、Mokuまたは データロガー または、Moku API を使用してさらにデータを処理および分析します。

図15: デュアル ボックスカー アベレージャー出力。 スイッチコントロールは4に設定されており、両方のアベレージャからの出力が出力されます。ゲインは、飽和を防ぐため、Averager0.1が0、Averager0.01が1に設定されています。これらの設定では、測定された出力値は、Averager558.33で-0 mV、Averager232.65で1 mVです。

製品概要

このアプリケーションノートでは、デュアルボックスカーアベレージャの実装を検証し、そのコア構造の概要を説明します。コア構造は、4つのシングルボックスカーアベレージャを2組にグループ化したものです。各組は、パルス積分器とベースライン積分器の差を計算することで差動出力を生成します。また、シームレスな操作を実現するPythonコントロールパネルやMoku Cloud Compile制御レジスタなどの設定オプションについても解説します。この強化された設計により、デュアルボックスカーアベレージャはポンププローブ実験に特に適しており、マルチボックスカー処理と差動結果生成の自動化のための効率的なソリューションを提供します。


Mokuをデモモードで試す

macOSとWindows用のMoku:アプリをダウンロードできます こちら.


よくある質問への回答

デバイスや機器に関する質問と回答は、 ナレッジベース .


Mokuユーザーとつながる

プログラムに参加する(英語) ユーザーフォーラム 新しい機能をリクエストしたり、サポートのヒントを共有したり、世界中のユーザー コミュニティとつながったりできます。

その他のアプリケーションノート

アプリケーションノートの一覧