MATLABで相互相​関係数を求める関数は​ありますか?

10 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2009 年 6 月 29 日
MATLABで相互相関係数を求める関数はありますか?

採用された回答

MathWorks Support Team
MathWorks Support Team 2009 年 6 月 29 日
【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 件)

Community Treasure Hunt

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

Start Hunting!