メインコンテンツ

gccphat

説明

tau = gccphat(sig,refsig) は、信号 sig と基準信号 refsig との間の時間遅延 tau を計算します。sigrefsig は、どちらも複数のチャネルを含めることができます。関数は、信号と基準信号が単一のソースから到達すると仮定します。遅延を推定するために、gccphatsigrefsig との相互相関におけるピーク位置を検出します。相互相関は、一般化相互相関位相変換 (GCC-PHAT) アルゴリズムを使用して計算されます。時間遅延は、既定のサンプリング周波数 1 ヘルツに対応するサンプル間隔の倍数です。

tau = gccphat(sig,refsig,fs) は、信号のサンプリング周波数を指定します。時間遅延は、サンプリング周波数に対応するサンプル間隔の倍数です。すべての入力信号のサンプル レートは同じでなければなりません。

[tau,R,lag] = gccphat(___) は、これまでの構文のいずれかの引数を使用して、さらに相互相関値と相関タイム ラグを返します。ラグは、サンプリング間隔の倍数です。相互相関チャネル数は、sig のチャネル数に等しくなります。

[___] = gccphat(sig) または [___] = gccphat(sig,fs) は、sig 内のすべてのチャネル ペア間の推定遅延と推定相互相関を返します。sig の列数が M である場合、結果の tauR の列数は M2 になります。これらの構文では、基準信号入力が使用されません。tauR の最初の M 列には、第 1 チャネルを基準として使用する遅延と相互相関が含まれます。2 番目の M 列には、第 2 チャネルを基準として使用する遅延と相互相関が含まれます。これ以降も同様です。

すべて折りたたむ

ゴングの音声信号を読み込みます。まず、ゴングの信号を基準信号として使用します。次に、信号を 2 回複製し、5 秒および 25 秒の時間遅延を導入します。サンプル レートは、既定値の 1 ヘルツのままにします。gccphat を使用して、遅延信号と基準信号との間の時間遅延を推定します。

load gong;
refsig = y;
delay1 = 5;
delay2 = 25;
sig1 = delayseq(refsig,delay1);
sig2 = delayseq(refsig,delay2);
tau_est = gccphat([sig1,sig2],refsig)
tau_est = 1×2

     5    25

ゴングの音声信号を読み込みます。ゴングの信号を基準信号として使用します。次に、信号を複製し、5 ミリ秒の時間遅延を導入します。8192 Hz のサンプル レートを使用します。gccphat を使用して、遅延信号と基準信号との間の時間遅延を推定します。

load gong;
delay = 0.005;
refsig = y;
sig = delayseq(refsig,delay,Fs);
tau_est = gccphat(sig,refsig,Fs)
tau_est = 
0.0050

サンプル レートが 8192 ヘルツの楽音信号を読み込みます。次に、信号を 3 回複製し、信号間に時間遅延を導入します。遅延信号と基準信号との間の時間遅延を推定します。相関値をプロットします。

load handel;
dt = 1/Fs;
refsig = y;

信号の遅延バージョンを 3 つ作成します。

delay1 = -5.2*dt;
delay2 = 10.3*dt;
delay3 = 7*dt;
sig1 = delayseq(refsig,delay1,Fs);
sig2 = delayseq(refsig,delay2,Fs);
sig3 = delayseq(refsig,delay3,Fs);

遅延信号と基準信号との相互相関を計算します。

[tau_est,R,lags] = gccphat([sig1,sig2,sig3],refsig,Fs);

gccphat 関数は、最も近いサンプル間隔までの遅延を推定します。

disp(tau_est*Fs)
    -5    10     7

相関関数をプロットします。

plot(1000*lags,real(R(:,1)))
xlabel('Lag Times (ms)')
ylabel('Cross-correlation')
axis([-5,5,-.4,1.1])
hold on
plot(1000*lags,real(R(:,2)))
plot(1000*lags,real(R(:,3)))
hold off

Figure contains an axes object. The axes object with xlabel Lag Times (ms), ylabel Cross-correlation contains 3 objects of type line.

サンプル レートが 8192 ヘルツの楽音信号を読み込みます。次に、信号を 2 回複製し、2 つの信号と基準信号との間に時間遅延を導入します。すべての信号ペア間の時間遅延を推定し、相互相関関数をプロットします。

load handel;
dt = 1/Fs;
refsig = y;

信号の遅延バージョンを 3 つ作成します。

delay1 = -5.7*dt;
delay2 = 10.2*dt;
sig1 = delayseq(refsig,delay1,Fs);
sig2 = delayseq(refsig,delay2,Fs);

すべての信号と他の信号との相互相関を計算します。

[tau_est,R,lags] = gccphat([refsig,sig1,sig2],Fs);

時間遅延をサンプル間隔単位で表示します。このアルゴリズムは、最も近いサンプル間隔に量子化された時間遅延を推定します。3 つの信号の相互相関では、考えられるすべての信号ペアに対して 1 つずつ、合計 9 個の時間遅延が生成されます。

disp(tau_est*Fs)
     0    -6    10     6     0    16   -10   -16     0

信号とその信号自体との相互相関では、ラグがゼロになります。

相関関数をプロットします。

for n=1:9
    plot(1000*lags,real(R(:,n)))
    if n==1
        hold on
        xlabel('Lag Times (ms)')
        ylabel('Correlation')
        axis([-5,5,-.4,1.1])
    end
end
hold off

Figure contains an axes object. The axes object with xlabel Lag Times (ms), ylabel Correlation contains 9 objects of type line.

入力引数

すべて折りたたむ

センサー信号。N 行 1 列の列ベクトルまたは NM 列の行列として指定します。N は時間サンプル数、M はチャネル数です。sig が行列である場合、各列は異なるチャネルです。

例: [0,1,2,3,2,1,0]

データ型: single | double
複素数のサポート: あり

基準信号。N 行 1 列の複素数値の列ベクトル、または NM 列の複素数値の行列として指定します。refsig が列ベクトルである場合、sig 内のすべてのチャネルは、相互相関を計算する際に refsig を基準信号として使用します。

refsig が行列である場合、refsig のサイズは sig のサイズと一致しなければなりません。gccphat 関数は、sig 内と refsig 内の対応するチャネルの間の相互相関を計算します。これらの信号は、異なるソースから取得できます。

例: [1,2,3,2,1,0,0]

データ型: single | double
複素数のサポート: あり

信号のサンプル レート。正の実数値のスカラーとして指定します。すべての信号のサンプル レートは同じでなければなりません。サンプル レートの単位はヘルツです。

例: 8000

データ型: single | double
複素数のサポート: あり

出力引数

すべて折りたたむ

時間遅延。1 行 K 列の実数値の行ベクトルとして返されます。K の値は、入力引数の構文によって異なります。

  • 基準信号 refsig を使用する場合、K の値は sig の列次元 M と等しくなります。tau の各エントリは、sig 内と refsig 内の対応する信号のペアに対する推定遅延を指定します。

  • 基準信号を使用しない場合、K の値は sig の列次元の 2 乗 M2 と等しくなります。tau の各エントリは、sig 内の対応する信号のペアに対する推定遅延を指定します。

単位は秒です。

異なるセンサーの信号間の相互相関。(2N-1) 行 K 列の複素数値の行列として返されます。

  • 基準信号 refsig を使用する場合、K の値は sig の列次元 M と等しくなります。各列は、sig 内と refsig 内の対応する信号のペア間の相互相関です。

  • 基準信号を使用しない場合、K の値は sig の列次元の 2 乗 M2 と等しくなります。各列は、sig 内の対応する信号のペア間の相互相関です。

相関ラグ時間。(2N-1) の実数値の列ベクトルとして返されます。lag の各行には、R の対応する行のラグ時間が含まれます。ラグ値は、サンプリング間隔の倍数に制限されます。ラグの単位は秒です。

詳細

すべて折りたたむ

参照

[1] Knapp, C. H. and G.C. Carter, “The Generalized Correlation Method for Estimation of Time Delay.” IEEE Transactions on Acoustics, Speech and Signal Processing. Vol. ASSP-24, No. 4, Aug 1976.

[2] G. C. Carter, “Coherence and Time Delay Estimation.” Proceedings of the IEEE. Vol. 75, No. 2, Feb 1987.

拡張機能

すべて展開する

バージョン履歴

R2015b で導入