ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

finddelay

信号間の遅延の推定

構文

D = finddelay(X,Y)
D = finddelay(...,maxlag)

説明

D = finddelay(X,Y) (XY は行ベクトルまたは列ベクトル) は、XY の間の遅延 D の推定値を返します。ここで、X は参照ベクトルとして機能します。YX に対して遅れている場合、D は正です。YX に対して進んでいる場合、D は負です。ゼロを先頭に付加することで XY の遅延を発生させることができます。

XY は、遅延した互いの正確なコピーである必要はありません。finddelay(X,Y) は、相互相関による遅延の推定値を返します。ただし、この推定遅延は、遅延した XY の間に十分な相関がある場合にのみ有益な意味をもちます。さらに、周期的な信号のように、いくつかの遅延の可能性がある場合、絶対値が最も小さい遅延を返します。絶対値が同じ正と負の両方の遅延が可能な場合、正の遅延が返されます。

D = finddelay(X,Y) は、X の各列と Y の対応する列の間の推定遅延の行ベクトル D を返します。ここで、X はサイズが MX 行 NX 列 (MX > 1 および NX > 1) の行列で、Y はサイズが MY 行 NY 列 (MY > 1 および NY > 1) の行列です。この使用において、X の列数は、Y の列数と等しくなければなりません (NX = NY)。

D = finddelay(...,maxlag) は、XY との間の推定遅延を求めるために使用する最大相関ウィンドウ サイズとして、maxlag を使用します。次の表は、maxlag の使用法を詳しく示しています。

既定の設定では、maxlag は、2 つのベクトル入力の場合は max(LX,LY) – 1 に (ここで LX および LY は、それぞれ X および Y の長さ)、2 つの行列入力の場合は max(MX,MY) – 1 に、1 つのベクトル入力と 1 つの行列入力の場合は max(LX, MY) – 1 または max(MX, LY) – 1 に、それぞれ等しくなります。maxlag[] として入力されると、既定値で置換されます。maxlag のいずれかの要素が負の場合、その絶対値で置き換えられます。maxlag のいずれかの要素が整数値でない、つまり複素数、Inf または NaN である場合、finddelay はエラーを返します。

推定遅延 D のベクトルの計算は、次の表に示すように、XY および maxlag によって異なります。

maxlagXYD の計算方法
整数値スカラー行ベクトルまたは列ベクトル、あるいは行列行ベクトルまたは列ベクトル、あるいは行列maxlag:maxlag のラグ範囲における X 列と Y 列との相互相関。
整数値行ベクトルまたは整数値列ベクトル長さ LX ≥ 1 の行ベクトルまたは列ベクトルサイズ MY 行 NY 列の行列 (MY > 1, NY > 1)maxlag(j):maxlag(j) (j = 1:NY) のラグ範囲における XY の j 列との相互相関
整数値行ベクトルまたは整数値列ベクトルサイズ MX 行 NX 列の行列 (MX > 1, NX > 1)長さ LY ≥ 1 の行ベクトルまたは列ベクトルmaxlag(j):maxlag(j) (j = 1:NX) のラグ範囲における X の j 列と Y との相互相関
整数値行ベクトルまたは整数値列ベクトルサイズ MX 行 NX 列の行列 (MX > 1, NX > 1)サイズ MY- 行 NY 列の行列 (MY > 1, NY = NX > 1)maxlag(j):maxlag(j) (j = 1:NY) のラグ範囲における X の j 列と Y の j 列との相互相関

マルチ チャネルとしての X の処理

長さ LX の行ベクトル X を別のチャネル LX の対応する 1 つのサンプルとして扱う場合、X が行列になるように 1 つ以上の 0 の行を追加する必要があります。これで、X の各列は 1 つのチャネルと見なされます。

たとえば、X = [1 1 1 1] は、4 つのサンプルで構成される 1 つのチャネルと見なされます。これを各チャネルが 1 つのサンプルで構成される 4 つの異なるチャネルとして扱うには、新しい行列 Xm を定義します。

Xm = [1 1 1 1;
      0 0 0 0];

Xm の各列は 1 つのチャネルに対応します。各チャネルには、サンプル 10 が含まれます。

すべて折りたたむ

以下は、YX に対して 2 サンプル分だけ遅延している場合を示します。

X = [1 2 3];
Y = [0 0 1 2 3];
D = finddelay(X,Y)
D = 2

以下は、YX に対して 3 サンプル分だけ先行している場合です。

X = [0 0 0 1 2 3 0 0]';
Y = [1 2 3 0]';
D = finddelay(X,Y)
D = -3

以下は、YX と揃っているがノイズを含む場合を示します。

X = [0 0 1 2 3 0];
Y = [0.02 0.12 1.08 2.21 2.95 -0.09];
D = finddelay(X,Y)
D = 0

YX の周期的なバージョンである場合、可能な最小の遅延が返されます。

X = [0 1 2 3];
Y = [1 2 3 0 0 0 0 1 2 3 0 0];
D = finddelay(X,Y)
D = -1

maxlag はスカラーとして指定されます (同じ最大ウィンドウ サイズ)。

X = [0 1 2];
Y = [0 1 0 0;
     1 2 0 0;
     2 0 1 0;
     0 0 2 1];
maxlag = 3;
D = finddelay(X,Y,maxlag)
D = 1×4

     0    -1     1     1

同じサイズの XY を指定します。finddelay は、列ごとに処理を行います。

X = [0 1 0 0;
     1 2 0 0;
     2 0 1 0;
     1 0 2 1;
     0 0 0 2];
Y = [0 0 1 0;
     1 1 2 0;
     2 2 0 1;
     1 0 0 2;
     0 0 0 0];
D = finddelay(X,Y)
D = 1×4

     0     1    -2    -1

計算を繰り返しますが、今度は Y の 2 行目にゼロからなる行を追加します。

Y = [0 0 1 0;
     0 0 0 0;
     1 1 2 0;
     2 2 0 1;
     1 0 0 2;
     0 0 0 0];
D = finddelay(X,Y)
D = 1×4

     1     2    -1     0

Y の各チャネルが X の各チャネルの遅延した同一のコピーをもつようにして、2 つのマルチチャネル信号 X および Y を作成します。

X = [1 3 2 0 0 0 0 0;
     0 0 0 0 0 1 3 2]';

Y = [0 0 0 1 3 2;
     1 3 2 0 0 0]';

列ごとの遅延を計算します。各チャネルの最大相関ウィンドウ サイズを 8 に設定します。

maxlag = [8 8];
D = finddelay(X,Y,maxlag)
D = 1×2

     3    -5

1 番目のチャネルの相関ウィンドウ サイズを 3 に、2 番目のチャネルの相関ウィンドウ サイズを 5 に減らします。

maxlag = [3 5];
D = finddelay(X,Y,maxlag)
D = 1×2

     3    -5

1 番目のチャネルの相関ウィンドウ サイズを 5 に増やし、2 番目のチャネルの相関ウィンドウ サイズを 3 に減らします。

maxlag = [5 3];
D = finddelay(X,Y,maxlag)
D = 1×2

     3    -3

アルゴリズム

関数 finddelay は、Signal Processing Toolbox™ の関数 xcorr を使用して、ユーザーが指定する可能性のあるすべてのラグにおける信号の各ペアの間の相互相関を決定します。次に、信号の各ペア間の正規化された相互相関が計算されます。推定遅延は、正規化された相互相関が最大の絶対値をもつラグの負の値によって与えられます。

複数のラグが相互相関の最大絶対値となる場合 (周期的な信号の場合など)、遅延はそのようなラグの最小 (絶対値) の負の値として選択されます。

信号のペアは遅延された互いの正確なコピーである必要はありません。ただし、推定遅延は、遅延信号の少なくとも 1 つのペアの間に十分な相関がある場合にのみ有益な意味をもちます。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。