イントロダクション
相互相関は信号処理において有用な手法であり、基本的には2つの信号の類似性を比較するものです。この手法は、信号間の無相関(ランダム)ノイズを除去し、全体的なノイズフロアを低下させることで、正確な位相ノイズ解析に役立ちます。また、2つの信号が重なり合う際に振幅が最大となるため、信号の時間的なマッチングにも役立ちます。これは、レーダー測定における距離や飛行時間の測定、あるいは入力信号と既知のテンプレートとの比較といった用途において貴重な機能です。
このアプリケーションノートでは、相互相関の積分形式を紹介し、その物理的な意味を検証します。次に、この式を離散化し、信号処理アプリケーションにおけるその使用法について考察します。最後に、周波数領域における相互相関に相当する相互パワースペクトル密度の概念を紹介します。Mokuオシロスコープとスペクトラムアナライザを用いて、この概念のいくつかの例を示すことができます。
時間領域における相互相関
積分形式
数学的には、相互相関は2つの信号の積の積分として定義され、その後正規化されます。通常、一方の信号には可変の時間遅延 \(\tau\) が与えられ、相互相関はこの時間遅延の関数となります。信号の振幅が同値か逆値かによって、相関関数は正または負の値を取ることもあります。まず、2つの連続した任意関数 \(y(t)\) と \(x(t)\) を考えます。\(x(t)\) の複素共役は \(x^*(t)\) で表されます。時間遅延 \(\tau\) の関数として、ある時間 \(T\) にわたって平均化すると、次の式が得られます。
\(R_{xy} = \frac{1}{T} \int^{T/2}_{T/2}{x^*(t)y(t+\tau)dt}\) (1)
\(x(t)\) と \(y(t)\) が周期 T にわたって厳密に周期的であり、それらの間の振幅と位相差は任意であると仮定します。
\(x(t) = A \sin{(\omega t)}\) (2)
\(y(t) = B \sin{(\omega t + \phi)}\) (3)
実関数 \(x(t)\) の複素共役は自己同値であることに注意してください。したがって、 \(R_{xy}\) の定義は次のように書き直すことができます。
\(R_{xy} = \frac{1}{T} \int^{T}_{0}{x^*(t)y(t+\tau)dt}\)
計算を進めると、式(2)と式(3)を挿入することができます。
\(R_{xy} = \frac{AB}{T} \int^{T}_{0}{\sin{(\omega t)} \sin{(\omega t + \phi)} dt}\)
複素記法で書き直すと:
\(R_{xy} = \frac{AB}{T} \int^{T}_{0}{ \left( \frac{e^{i \omega t} – e^{-i \omega t}}{2i} \right) \left( \frac{e^{i \omega (t + \tau) + \phi} – e^{-i \omega (t + \tau) – \phi}}{2i} \right) dt}\)
\(R_{xy} = \frac{-AB}{4T} \int^{T}_{0}{e^{i \omega (2t + \tau) + \phi} – e^{-i \omega \tau – \phi} – e^{i \omega \tau + \phi} + e^{-i \omega (2t + \tau) – \phi} dt}\)
t を含む項は周期的であるため、1 周期にわたって平均するとゼロが返され、2 つの項のみが残ります。
\(R_{xy} = \frac{AB}{2} \left( \frac{e^{i(\omega \tau + \phi)} + e^{-i(\omega \tau + \phi)} }{2} \right) = \frac{AB}{2} \cos{(\omega \tau + \phi)}\)
相関関数は、信号の時間遅延と位相差の両方に依存します。時間遅延がゼロ(\(\tau = 0\))の場合、関数は\(\phi = 0\)で完全に相関し、\(\phi = 180\)で完全に反相関します。\(\phi = 90\)では、関数の位相が互いにずれるため、相関はゼロになります(図1参照)。
離散形式
オシロスコープで捕捉したようなデジタルサンプリングデータの場合、上記の式は離散化する必要があります。捕捉された2つのスペクトルに実数値\(x[t]\)と\(y[t]\)が含まれていると仮定します。ここで、tはデータ点のインデックスです。相互相関は次のようになります。
\(R_{xy}[\tau] = \sum_t x[t] y[t+\tau]\)
ここで、パラメーター \(\tau\) は、点の数に関して x と y の間の時間シフトを表します。
実際には、データセット \(x[t]\) と \(y[t]\) は有限であるため、関数の時間シフト量には限界があります。オフセットが大きい場合、データセット間の重なりは縮小します。例えば、ちょうど1000点の \(x[t]\) と \(y[t]\) の集合を考えてみましょう。数学的には \(\tau =999\) 点ずつオフセットできますが、その場合、重なりは各集合で1点のみとなり、結果は一般的に有用な量にはなりません。
このシナリオでは、通常、必要なウィンドウサイズよりも多くのデータポイントを取得します。目安として、トレースの全長は
\(N_{トレース} = N_{ウィンドウ} + N_{ラグ、最大} \)
これにより、相関関数がエッジにぶつかることなく完全に設定されるようになります。
振幅または位相シフトを比較する場合、トレースからDCオフセットを差し引き、RMS振幅で正規化するのが一般的です。したがって、相関関数の完全な形は次のようになります。
\(C_{xy}[\tau] = \frac{\sum_t{(x[t] – \bar{x})(y[t+\tau]-\bar{y}_m) }}{\sqrt{\sum_t{(x[t]-\bar{x})^2}} \sqrt{\sum_t{(y[t+\tau]-\bar{y}_m)^2}} }\)
ここで、\(\bar{x}\) と \(\bar{y}_m\) は、重なり合うウィンドウにおける \(x[t]\) と \(y[t+\tau]\) の平均です。これにより、振幅に関わらず、常に -1 から +1 の間の正規化された相関が得られます。
Mokuオシロスコープによる相互相関の測定
まず、Mokuで相互相関を検証します。オシロスコープからトレースを取得し、Pythonスクリプトを使って手動で相互相関値を計算します。Moku:Deltaを使用して、OutputAをInputAに、OutputBをInputBに接続します。次に、オシロスコープモードを起動し、内蔵の波形ジェネレータを使用して、わずかに位相差のある2つの正弦波を出力します(下の図1を参照)。

次はPythonです。オシロスコープの設定とトレースのキャプチャを行うことで、この測定を自動化します。Moku Python APIの詳細については、ドキュメントをご覧ください。各トレースは8192個のポイントで構成され、set_timebaseコマンドによって制御されます。スクリプトが期待どおりにデータを収集していることを確認するために、図2に結果をプロットします。

次に、各ベクトルをN点で分割し、残りのデータを掛け合わせる関数を作成して、相互相関プロットを計算します。上記の\(C_{xy}\)の式に従って適切に正規化すると、図3に示すプロットが得られます。

相互相関プロットは、遅延の関数として+1(完全相関)から-1(完全反相関)の間を振動します。遅延がゼロの場合、ソース信号は直交しているため相関は0です。異なる位相シフトを適用すると、相互相関プロットの値は左または右にシフトします。ただし、入力信号が周期的である限り、相互相関プロットも周期的のままです。この振動の周期は約312サンプルです。つまり、チャネルBの信号を312サンプルシフトすると、信号の周期性により、相互相関の値は同じになります。312サンプルという値は、オシロスコープのサンプリングレートと収集されたアレイのサイズによって異なります。
時系列データからクロススペクトルを計算する
時系列データの相互相関を計算したら、同じオシロスコープ構成を用いて周波数領域における相関を計算できます。周波数領域において、この量は通常クロススペクトル、あるいはクロスパワースペクトル密度と呼ばれ、周波数空間における相関の分布に関する情報を提供します。まず、離散時系列データセット \(x[t]\) と \(y[t]\) をフーリエ変換によって周波数領域に変換します。これらの量はそれぞれ \(X[f]\) と \(Y[f]\) と表記します。2つの信号間の位相関係を測定するために、\(Y[f]\) の複素共役を取り、点数 N で正規化します。これにより、電圧の2乗を単位とする量が得られ、位相情報を保持したまま元の信号のパワースペクトルと比較することができます。クロススペクトルの式は次のように表されます。
\(S_{AB}(f) = \frac{X[f] \times Y^*[f]}{N^2}\)
上記の量は一般に複素数であることに注意してください。Mokuスペクトラムアナライザで他のスペクトルデータと並べて表示するには、50Ωのインピーダンスを仮定し、以下の式を用いて振幅を対数スケールに変換します。
\(P_{dBm} = 10 \log_{10} \left( 0.001 \times \frac{|S_{AB}|}{50 \Omega}\right)\)
この方法は、表示される量から位相情報が失われるという残念な結果をもたらします。しかし、位相情報は完全な複素数値表現\(S_{AB}(f)\)に残ります。次のセクションで説明するように、これはノイズを除去し、時間に敏感な信号を定量化する上で依然として有用なツールです。
Mokuスペクトラムアナライザを使用した相互相関
Moku:ProとMoku:Deltaを使用した相互相関機能をテストするための簡単なデモをご紹介します。相互相関の測定には、Moku:Deltaのスペクトラムアナライザをシングルインストゥルメントモードで使用し、Moku:Proで信号を生成します。Moku:Proのマルチインストゥルメントモードでは、図4に示すように、波形ジェネレータをスロット1に、オシロスコープをスロット2に配置します。これにより、波形ジェネレータの出力を時間領域でモニタリングしながら、Deltaで同時に周波数領域をモニタリングできます。

波形ジェネレータを開き、周波数50MHz、相対位相90°の正弦波を2つ生成します。位相を同期させ、オシロスコープで時間領域で信号を確認します。図5に示すように、2つの信号は振幅が一致していますが、位相オフセットが存在します。

次にスペクトラム・アナライザに移動し、図6に示すように、20MHzの周波数領域で信号を表示します。同じ信号源から発生しているため、両方の信号は似ており、同じスプリアスやその他のデジタル信号特性を備えています。マス・チャネルと相互相関機能を有効にすると、ノイズフロアは全体的に低下しているものの、主信号とスプリアスは保持されていることがわかります。これは、相関のない特徴は抑制され、各信号の共通成分は保持されるという相互相関の理解と一致しています。

前のセクションで説明したように、この機能は計算されたクロススペクトルの振幅を取得し、位相情報を破棄します。つまり、2 つの信号間の 90° 位相差は反映されません。
相互相関によって2つの信号の時間的同一性がどのように判定されるかを示すために、波形発生器に戻り、50MHzから100MHzの範囲で2つのチャープパルスを生成します。構成は図7に示されています。両方の信号は50MHzから始まり、5msの周期で同期して掃引されます。

Mokuスペクトラムアナライザの出力を見ると、両方の信号が周波数空間でプラトーとして現れ、50MHz未満と100MHzを超えると急激に低下していることがわかります。両方のスイープはほぼ同一で、プロット上できれいに重なり合っています。また、計算された相互相関は、信号が時間的に重なっていることを示しています。

一方のチャープの方向を反転し、チャネルの同期を保ちながら同じ期間に 100 MHz から 50 MHz まで掃引することで、相互相関の有用性を示します。周波数空間では、フーリエ変換は掃引の方向を考慮しないため、これは同一に見えます。これは図 9 に示されています。入力 A と B は前の場合から変化せず、スペクトラム アナライザ画面上で重なり合っています。ただし、相互相関は各信号の瞬間周波数に依存するため、この変化が反映されています。以前は平坦だった相互相関プロットは、約 30 dB 減少し、約 75 MHz でのみピークになっています。これは掃引が交わるポイントで、短時間周波数が重なり合ってから反対方向に続きます。

スペクトラム・アナライザは周波数領域で動作しますが、相互相関を追加することで、時間依存の挙動に対する感度を効果的に回復します。振幅スペクトルだけでは区別できない信号も、時間的な重なりを考慮することで明確に区別できるようになります。
結論
相互相関は、2 つの信号の類似性を比較し、相関のないノイズを除去し、タイミングまたは位相関係を高精度に抽出する強力な方法を提供します。
このアプリケーションノートでは、まず相互相関の積分定義から始め、その物理的解釈を探りました。次に、相互相関の周波数領域版である相互パワースペクトル密度について考察しました。最後に、Mokuオシロスコープとスペクトラムアナライザを用いて、これらの概念が実際の測定にどのように現れるかを示しました。これらのツールを組み合わせることで、相互相関技術が幅広いアプリケーションにおいて測定精度を向上させる方法を示すことができます。