I am trying to calculate the correlation between two signals, where it returns 1 if both are the same and it will return between 0 and 1 otherwise. The problem that the two signals have different sizes so resampling is needed. I already did it but the output is not correct. Can anyone help me to implement it in an efficient way.
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(isnan(c)) = 0 ;
score = mean(c);
Here is a toy example.
% 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 will generate indicies between
length(y) number of divisions.
interp1 will resample the variable to the length of the other one. The if statement will check which one needs resampling. The function
corrcoef will get the correlation coefficient of the coefficient of the 2 signals. Since
corrcoef is between 0 and 1, we need an absolute value. If you don't care about scaling and bias
corrcoef will work for you.
If you plan to use
MSE instead, then you can use the
MSE function on the error
(x-y) but it will not be between 0 and 1. Any comparison method will work with this resampling code.