Main Content

finddelay

信号間の遅延の推定

説明

d = finddelay(x,y) は、入力信号 xy の間の遅延 d の推定値を返します。ゼロを先頭に付加することで xy の遅延を発生させることができます。

d = finddelay(x,y,maxlag) は、maxlag を使用して xy の間の推定遅延を求めます。

すべて折りたたむ

以下は、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

入力引数

すべて折りたたむ

参照入力。ベクトルまたは行列として指定します。

ベクトルまたは行列として指定される入力信号。

最大相関ウィンドウ サイズ。整数のスカラーまたはベクトルとして指定します。maxlag のいずれかの要素が負の場合、その絶対値で置き換えられます。maxlag のいずれかの要素が整数値でない、つまり複素数、Inf または NaN である場合、finddelay はエラーを返します。

出力引数

すべて折りたたむ

入力信号間の遅延。整数のスカラーまたはベクトルとして返されます。yx に対して遅れている場合、d は正です。yx に対して進んでいる場合、d は負です。周期的な信号のように、いくつかの遅延の可能性がある場合、絶対値が最も小さい遅延を返します。絶対値が同じ正と負の両方の遅延が可能な場合、正の遅延が返されます。

x が MX 行 NX 列 (MX > 1 および NX > 1) のサイズの行列で、y が MY 行 NY 列 (MY > 1 および NY > 1) のサイズの行列の場合、finddelayx の各列と y の対応する列間での推定遅延の行ベクトル d を返します。この使用において、xy の行数は同じでなければなりません (NX = NY)。

ヒント

  • xy は、遅延した互いの正確なコピーである必要はありません。finddelay(x,y) は、相互相関による遅延の推定値を返します。ただし、この推定遅延は、遅延した xy の間に十分な相関がある場合にのみ有益な意味をもちます。

  • 推定遅延 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 列との相互相関。

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

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

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

    xm = [1 1 1 1;
          0 0 0 0];
    

アルゴリズム

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

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

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

拡張機能

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