我正在調整傳感器的不同測量值。其中一些是週期性的,我只是使用了最大的交叉相關性,它工作得很好。現在我有幾個非週期性信號類似於我想要對齊的ramp/sigmoids/step/hill函數,但是對於這些信號來說,互相關失敗了(在滯後0時總是給出最大值)。時間延遲/延遲估計非週期性信號(和週期性信號)
這些類型的信號的方法是什麼?
理想的方法將適用於兩個信號,而不需要事先知道哪一個我遇到。
下面是一個例子(噪聲)
我正在調整傳感器的不同測量值。其中一些是週期性的,我只是使用了最大的交叉相關性,它工作得很好。現在我有幾個非週期性信號類似於我想要對齊的ramp/sigmoids/step/hill函數,但是對於這些信號來說,互相關失敗了(在滯後0時總是給出最大值)。時間延遲/延遲估計非週期性信號(和週期性信號)
這些類型的信號的方法是什麼?
理想的方法將適用於兩個信號,而不需要事先知道哪一個我遇到。
下面是一個例子(噪聲)
一個可行的方法是把你的非週期性信號,並將其強制爲週期信號。
做到這一點的一種方法是首先標準化您的信號,然後在您的信號中追加信號的反轉版本(1 - normalizedSignal
)。這使得它成爲一個週期性信號,然後該信號應該能夠相對容易地被饋送到互相關分析中。
這裏是一個例子,我用一個倒置的sigmoid在時間上移動。
function aperiodicxcorr()
% Time step at which to sample the sigmoid
dt = 0.1;
t = -10:dt:5;
% Artificial lags to apply to the second and third signals
actualLag2 = 3;
actualLag3 = 5;
% Now create signals that are negative sigmoids with delays
S1 = -sigmoid(t);
S2 = -sigmoid(t + actualLag2);
S3 = -sigmoid(t + actualLag3);
% Normalize each sigmal
S1 = normalize(S1);
S2 = normalize(S2);
S3 = normalize(S3);
% Concatenate the inverted signal with signal to make it periodic
S1 = cat(2, 1-S1, S1);
S2 = cat(2, 1-S2, S2);
S3 = cat(2, 1-S3, S3);
% Retrieve lag (in samples)
[corr2, lag2] = computeLag(S1, S2);
[corr3, lag3] = computeLag(S1, S3);
% Convert lags to time by multiplying by time step
lag2 = lag2 * dt;
lag3 = lag3 * dt;
fprintf('Lag of S2: %0.2f (r = %0.2f)\n', lag2, corr2);
fprintf('Lag of S3: %0.2f (r = %0.2f)\n', lag3, corr3);
end
function [corr, lag] = computeLag(A, B)
[corr, lags] = xcorr(A, B, 'coeff');
[corr, ind] = max(corr);
lag = lags(ind);
end
function data = normalize(data)
data = data - min(data(:));
data = data ./ max(data(:));
end
function S = sigmoid(t)
S = 1 ./ (1 + exp(-t));
end
對我討論的信號的修改,對於上面的代碼看起來像這樣。
,並在底部的fprintf
語句的結果是:
Lag of S2: 3.00 (r = 1.00)
Lag of S3: 5.00 (r = 1.00)
而且這些匹配與指定的滯後。
這樣做的缺點是它不適用於已經有周期性的信號。也就是說,通過比較信號的第一個值和最後一個值,並確保它們處於彼此的指定容差範圍內,週期性相對容易檢查(特別是對於標準化信號)。
我想到了這個方法,但我不太確定它是否可行,因爲我的信號可能有不同的長度。在我的例子中,我一直測量信號,但實際事件(減少)發生在不同的時間點。在你的例子中,你只需要移動時間軸。因此,當我對信號做同樣的處理時,會導致中央S形元素的寬度不同。 – DarkCell
@DarkCell你不能只是採取「大塊」的時間,並執行分析?您可以根據需要用零填充信號。展示您正在談論的內容可能會有所幫助。 – Suever
那麼我會如何選擇我的時間?查看我的示例:每個信號都是在同一時間窗口內測量的,但「事件」(不同時間的減少)發生在不同的時間點。我不知道如何選擇一段時間,因此信號在鏡像時會產生相同的長度。只有當我知道什麼時候發生「事件」時,我才知道有效,但是我可以將它們與這些知識結合起來。 – DarkCell