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