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.

My code:

``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:MaxRowa = NewA(s,:);b = NewB(s,:);c(s)=real(corr(a',b'));endc(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 `1` and `length(x)` with `length(y)` number of divisions.

Essentially `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.

Top