相互相関xcorrについて質問です

15 Ansichten (letzte 30 Tage)
Takaaki Takatsuki
Takaaki Takatsuki am 20 Jan. 2020
相互相関xcorrについて質問です。(素人ですみません)
以下のプログラムを実行したところ、変数lagsに0が入ります。
プログラムとしては、エクセルから読み込み、変数(d1,d2)に入れ込んで相互相関を取っています。
(d2はd1からcircshiftを使って中身を100だけ動かしているのでラグは100になると思うのですが、、)
分かる方がいらっしゃれば、ご教授お願い致します。
%データ入力
data = importdata('data.xlsx');
size(data(:,1));
datasize = ans(1);
t = 1:datasize;
d1 = data(:,1);
d2 = circshift(d1,-100)
%相互相関
[c,lags] = xcorr(d1,d2,'normalized');
stem(lags,c);
saveas(gcf,'LagData.png');
  1 Kommentar
Naoya
Naoya am 21 Jan. 2020
xcorrに入力する実際のデータがないと判断できませんが、例えば、 xcorr に入力する信号の長さが 100 サンプルだったり、正弦波のように元々周期的な信号が対象の場合は、ラグが 0 となる可能性もあります。
また、circshift (循環シフト)ではなく、
d2 = zeros( size(d1));
d2(1:end-100) = d(101:end);
のような形で与えることで結果が変わってくることもあるかもしれません。

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Naoya
Naoya am 21 Jan. 2020
原理的には信号d1とd2の畳み込みを行っていることになりますが、d1, d2 が今回のように プラス方向に信号の値にバイアスが掛かっている場合は、どうしてもその畳み込み演算の中心部の値が高くなる傾向になると思います。
例えば、 d1, d2 共にゼロ平均化してから xcorr を実行すると所望の結果が得られるかもしれません。
>> xcorr(d1-mean(d1), d2-mean(d2))
  1 Kommentar
Takaaki Takatsuki
Takaaki Takatsuki am 21 Jan. 2020
ありがとうございます。解決しました!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Takaaki Takatsuki
Takaaki Takatsuki am 21 Jan. 2020
丁寧な回答ありがとうございます。
入力データについて説明が不十分でありました。
入力データ(d1)はかなり非定常性の強い波形で、周期的な信号ではありません。(下記図表参照、赤:d1、青:d2)
サンプル数(データ数)1853個となっています。
この場合、入力するデータが悪いのでしょうか。
教えて頂けたら幸いです。
PreData.png

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!