2 つの信号があります。それらを「a」と「b」と呼びましょう。それらは両方ともほぼ同一の信号です (同じ入力から記録され、同じ情報を含んでいます)。明らかに、それぞれにランダム ノイズがあります。
現在、相互相関を使用して時間シフトを計算していますが、まだ不適切な結果が得られています。
タイムシフトを計算するために使用しているコードは次のとおりです。
function [ diff ] = FindDiff( signal1, signal2 )
%FINDDIFF Finds the difference between two signals of equal frequency
%after an appropritate time shift is applied
% Calculates the time shift between two signals of equal frequency
% using cross correlation, shifts the second signal and subtracts the
% shifted signal from the first signal. This difference is returned.
length = size(signal1);
if (length ~= size(signal2))
error('Vectors must be equal size');
end
t = 1:length;
tx = (-length+1):length;
x = xcorr(signal1,signal2);
[mx,ix] = max(x);
lag = abs(tx(ix));
shifted_signal2 = timeshift(signal2,lag);
diff = signal1 - shifted_signal2;
end
function [ shifted ] = timeshift( input_signal, shift_amount )
input_size = size(input_signal);
shifted = (1:input_size)';
for i = 1:input_size
if i <= shift_amount
shifted(i) = 0;
else
shifted(i) = input_signal(i-shift_amount);
end
end
end
plot(FindDiff(a,b));
ただし、関数の結果はランダム ノイズではなく周期波であるため、ラグはオフのままである必要があります。プロットの画像を投稿しますが、imgur は現在協力していません。
相互相関以外にラグを計算するより正確な方法はありますか、または相互相関の結果を改善する方法はありますか?