>我正在尝试计算两个信号之间的相关性,如果两个信号相同,则返回 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
将生成1
和length(x)
之间的指示,length(y)
划分数。
本质上interp1
会将变量重新采样到另一个变量的长度。if 语句将检查哪一个需要重新采样。函数corrcoef
将获得 2 个信号系数的相关系数。由于corrcoef
介于 0 和 1 之间,我们需要一个绝对值。如果您不关心缩放和偏差corrcoef
它将为您工作。
如果您打算改用MSE
,则可以在错误(x-y)
上使用 MSE
函数,但它不会介于 0 和 1 之间。任何比较方法都将使用此重采样代码。