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

10 views (last 30 days)
MathWorks Support Team
MathWorks Support Team on 29 Jun 2009
MATLABで相互相関係数を求める関数はありますか?

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 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の相互相関係数

More Answers (0)

Community Treasure Hunt

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

Start Hunting!