具有两种不同尺寸的两个信号之间的相关性

时间:2015-04-20 22:02:49

标签: matlab

我正在尝试计算两个信号之间的相关性,如果两个信号相同则返回1,否则返回0到1之间。这两个信号具有不同大小的问题需要重新采样。我已经做到了,但输出不正确。任何人都可以帮助我以有效的方式实施它。

我的代码:

MaxRow = max(size(A,1),size(B,1));
MaxCol = max(size(A,2),size(B,2));
NewA = resample(A,MaxRow,size(A,1));
NewB = resample(B,MaxRow,size(B,1));
NewA = resample(NewA',MaxCol,size(A,2))';
NewB = resample(NewB',MaxCol,size(B,2))';
for s = 1:MaxRow
    a = NewA(s,:);
    b = NewB(s,:);
    c(s)=real(corr(a',b'));
end
c(isnan(c)) = 0 ;
score = mean(c);

1 个答案:

答案 0 :(得分:1)

这是一个玩具示例。

% Example Data
x = 0:9;
y = 1:0.1:10;

% Check if y is longer
if length(x) < length(y)
    x = interp1( x, linspace( 1, length(x), length(y) ) );   % Resample x
else
    y = interp1( y, linspace( 1, length(y), length(x) ) );   % Resample y
end

% Get corrcoeff
c = abs( corrcoef( x, y ) );   % Corrcoeff solution here
c = c(2,1);

% Get MSE
m = mse( x - y );   % MSE solution here

linespace会在1length(x)之间产生length(y)interp1个分段的指示。

基本上corrcoef会将变量重新采样到另一个变量的长度。 if语句将检查哪一个需要重新采样。函数corrcoef将获得2个信号的系数的相关系数。由于corrcoef介于0和1之间,因此我们需要一个绝对值。如果您不关心缩放和偏见MSE将适合您。

如果您计划使用MSE,那么您可以在错误(x-y)上使用{{1}}函数,但不会介于0和1之间。任何比较方法都可以使用这个重新采样代码。