2015-04-20 85 views
2

我想計算兩個信號之間的相關性,如果兩個信號相同,則返回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

你的變量'A'和'B'包含什麼?你可以使用'interp1'進行重採樣。 –

+0

它包含信號A和B的採樣點(矢量) – SMH

+0

@SMH corr忽略是否存在恆定偏差(y截距)或比例。你是否在乎是否存在不變的偏移/縮放? – krisdestruction

回答

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將生成1length(x)之間indicies與length(y)分割數。

本質上interp1將重新採樣變量到另一個的長度。 if語句將檢查哪一個需要重新採樣。函數corrcoef將得到2個信號係數的相關係數。由於corrcoef介於0和1之間,我們需要一個絕對值。如果你不在乎縮放和偏見corrcoef會爲你工作。

如果你打算使用MSE代替,那麼你可以使用上的錯誤(x-y)MSE功能,但它不會是0和1之間的任何比較的方法將與此採樣代碼工作。

+0

由於兩個矢量的大小不一樣,因此您的解決方案無法正常工作。 – SMH

+0

@SMH對不起,請再試一次。我應該使用linspace – krisdestruction

+0

它仍然不工作,因爲x和y有不同的大小。同樣的錯誤 – SMH

相關問題