具有两种不同大小的两个信号之间的相关性



>我正在尝试计算两个信号之间的相关性,如果两个信号相同,则返回 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);

这是一个玩具示例。

% 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会将变量重新采样到另一个变量的长度。if 语句将检查哪一个需要重新采样。函数corrcoef将获得 2 个信号系数的相关系数。由于corrcoef介于 0 和 1 之间,我们需要一个绝对值。如果您不关心缩放和偏差corrcoef它将为您工作。

如果您打算改用MSE,则可以在错误(x-y)上使用 MSE 函数,但它不会介于 0 和 1 之间。任何比较方法都将使用此重采样代码。

最新更新