MATLABで相互相関係数を求める関数はありますか?
12 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
MATLABで相互相関係数を求める関数はありますか?
Akzeptierte Antwort
MathWorks Support Team
am 29 Jun. 2009
【Signal Processing Toolboxをお持ちの場合】
xcorr関数を使用して求めることができます。相互相関係数は、入力引数にスケールオプションを定義することで、正規化された値として出力することが可能です。
例1 : xcorrを使って、正規化なしで出力
t = 0:1/100:1; % 時間ベクトル
x = sin(2*pi*t); % 信号A
y = [zeros(1,5) x(1:96)]; % 信号B
c = xcorr(x,y); % 信号Aと信号Bの相互相関係数
例2 : xcorrを使って、-1から1までの正規化した値として出力
t = 0:1/100:1; % 時間ベクトル
x = sin(2*pi*t); % 信号A
y = [zeros(1,5) x(1:96)]; % 信号B
c = xcorr(x-mean(x),y-mean(y),'coef'); % 信号Aと信号Bの相互相関係数
【Econometrics Toolbox(旧GARCH Toolbox)をお持ちの場合】
crosscorr関数を使用して求めることができます。相互相関係数は、-1から1までの正規化された値として出力されます。
例3 : crosscorr関数を使って、-1から1までの正規化した値として出力 (例2の出力と等価)
t = 0:1/100:1; % 時間ベクトル
x = sin(2*pi*t); % 信号A
y = [zeros(1,5) x(1:96)]; % 信号B
c = crosscorr(y,x,length(t)-1); % 信号Aと信号Bの相互相関係数
【Signal Processing ToolboxおよびEconometrics Toolbox(旧GARCH Toolbox)をお持ちでない場合】
conv関数を使用して求めることができます。
例4 : conv関数を使って、正規化なしで出力 (例1の出力と等価)
t = 0:1/100:1; % 時間ベクトル
x = sin(2*pi*t); % 信号A
y = [zeros(1,5) x(1:96)]; % 信号B
c = conv(x,y(end:-1:1)); % 信号Aと信号Bの相互相関係数
例5 : conv関数を使って、-1から1までの正規化した値として出力 (例2の出力と等価)
t = 0:1/100:1; % 時間ベクトル
x = sin(2*pi*t); % 信号A
y = [zeros(1,5) x(1:96)]; % 信号B
xc = sqrt(sum((x-mean(x)).^2));
yc = sqrt(sum((y-mean(y)).^2));
c = conv(x-mean(x),y(end:-1:1)-mean(y))/xc/yc; % 信号Aと信号Bの相互相関係数
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu 相関と畳み込み finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!