MATLABで相互相関係数を求める関数はありますか?
10 views (last 30 days)
Show older comments
MATLABで相互相関係数を求める関数はありますか?
Accepted Answer
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の相互相関係数
0 Comments
More Answers (0)
See Also
Categories
Find more on 相関と畳み込み in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!