MATLABで相互相関係数を求める関数はありますか?
9 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
MATLABで相互相関係数を求める関数はありますか?
Réponse acceptée
MathWorks Support Team
le 29 Juin 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 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur 相関と畳み込み dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!