2008-10-15 54 views
9

我正在從測量距離的設備讀取數據。我的採樣率很高,因此我可以測量距離(即速度)的較大變化,但這意味着當速度較低時,設備會提供多個相同的測量值(由於設備的粒度)。這導致「階梯式」曲線。如何「平滑」數據並計算線條漸變?

我需要做的是平滑曲線以計算速度。之後,我需要計算加速度。

如何最好的去解決這個問題?

(採樣率高達1000Hz的,爲10Hz的計算速度將是確定使用VS2005 C#)

回答

25

來自moogs的維基百科條目是平滑數據的一個很好的起點。但它不能幫助你作出決定。

這一切都取決於您的數據和所需的處理速度。

移動平均線 將平頂的價值。如果您對最小值和最大值感興趣,請勿使用此值。另外我認爲使用移動平均值會影響你對加速度的測量,因爲它會使你的數據變平(一點點),因此加速度看起來會變小。這一切都歸結爲所需的準確性。

Savitzky-Golay 快速算法。和移動平均線一樣快。這將保持高峯的高峯。實施起來有點困難。你需要正確的係數。我會選這個。

卡爾曼濾波器 如果你知道分佈,這可以給你很好的結果(它用於GPS導航系統)。也許有點難以實施。我提到這個是因爲我過去曾經使用過它們。但他們可能不是這種類型的初學者的好選擇。

以上將減少您的信號噪音。

接下來你要做的是檢測「加速度」的開始和結束點。您可以通過創建原始信號的Derivative來完成此操作。衍生物穿過Y軸(零點)的點可能是信號中的峯值,可能表示加速度的開始和結束。

然後,您可以創建二階導數來獲取最小值和最大加速度本身。

9

你需要一個平滑濾波器,最簡單的將是一個「移動平均」:剛纔計算的平均最後n點。

這裏的問題是,如何確定n,你能告訴我們更多關於你的應用程序嗎?

(還有其他的,更復雜的過濾器。他們對他們是如何保持輸入數據有所不同。一個很好的列表是Wikipedia

編輯!:對於10Hz的,平均的最後100個值。

+0

糾正。謝謝! – moogs 2008-10-15 09:58:14

+0

您能否解釋爲什麼要使用10Hz的100個值?謝謝。 – 2008-10-15 10:16:53

+0

@Guido - 根據我對他所說的話的解釋,他每秒鐘有1000個值,但實際上只需要每秒獲得10次數據。所以,一個簡單的方法就是將100個值作爲一個值(得到平均值)。 – moogs 2008-10-15 10:28:44

0

除了上面的GvSs優秀答案,您還可以考慮使用一些通用曲線擬合(如三次或二次樣條)來平滑/減少平均結果的步進效應。

3

移動平均線通常很糟糕 - 但對於白噪聲很好。移動均線& Savitzky-Golay都歸結爲相關性 - 因此速度非常快,可以實時實施。如果您需要更高階的信息,如一階和二階導數 - SG是一個很好的正確選擇。 SG的神奇之處在於濾波器所需的恆定相關係數 - 一旦確定了多項式的長度和程度以適應局部,係數只需要被找到一次。你可以使用R(sgolay)或Matlab來計算它們。

您還可以通過Savitzky-Golay最佳擬合多項式來估計噪聲信號的一階導數 - 這些有時稱爲Savitzky-Golay導數 - 通常可以很好地估計一階導數。

卡爾曼濾波可以是非常有效的,但它在計算上更重 - 難以擊敗短的卷積速度!

保羅
CenterSpace軟件