2017-03-04 26 views
1

我試圖確定低頻數字信號何時開啓和關閉。一旦我可以準確地確定轉換,測量時間和時間。在C中測量脈衝的開啓和關閉時間#

該信號在0.5Hz至5Hz的某處工作。我每30毫秒就會得到一個樣本。這是一個浮點值,一旦發生轉換但轉換髮生時正在改變,則該值通常非常一致。而且,不幸的是,過渡不是即時的。有時會有2或3個樣本值發生變化,並且樣本之間的樣本值永遠不會相同,所以總會有一點抖動。

我已經嘗試了大量的樣本,對它們進行排序,讓它們的平均值和平均值低於平均值來表示OFF和平均值的平均值爲ON。這很有效,因爲99個樣本的平均值應該是第50個樣本。不幸的是,在現實世界中,在平均值的任何一側都不能總是得到49個值,這些值完全處於ON或OFF狀態。

那麼,這是我應該使用移動平均或指數平均的東西嗎? DFT?一個FFT?我也嘗試將前一個樣本與下一個樣本進行比較,這幾乎一樣好。但是,我仍然無法獲得準確的價值來表示發生了轉變。

一個例子是:

該設備是一個 「未知」 狀態,將樣品看起來像這樣:

  • S0 - 45.1156987295826
  • S1 - 45.1156987295826
  • S2 - 67.7942377495463
  • S3 - 67.7942377495463
  • S4 - 60.9886569872958
  • S5 - 49.4682395644283
  • S6 - 45.1156987295826

這是很容易看到,S0和S1處於斷開狀態,S2和S3都處於開啓狀態,但向OFF狀態S4和S5趨勢但S4和S5屬於哪個狀態? (僅供參考,該數據也可以很乾淨我使用的過渡非常非常快速地模擬設備)

感謝, 道格

+0

向我們展示沒有它的信號(idealy plot),我們不禁... – Spektre

+0

@Spektre:如果合法輸入信號的定義可能與任何一個情節(或兩個情節)顯示的情況相差太多,則情節不會產生太大的幫助(甚至可能會引起誤解)。 – hotpaw2

+0

謝謝。情節可能會有所幫助。我會盡力創造一個。 – AeroClassics

回答

1

你可以嘗試一個低通濾波器,具有時間常數的約0.5秒,以擺脫一些抖動。然後查找每次發作最陡峭部分的低通濾波結果的一階導數中的峯值。如有必要,在第一個差分樣本之間插入(二次或三次)該峯值。

如果您先驗知道噪聲「抖動」的大小,您可能仍需要使用高於此抖動的閾值來防止誤報。

連續逼近:你也可以設置任意的閾值;然後檢查產​​生的轉換決定,看它們是否符合您的信號定義標準(全部或大部分脈衝寬度在0.5和5 Hz之間)。如果沒有上下調整閾值,直到符合條件(或最大化)。如果您發現一系列可行的轉換閾值,請選擇最大抗噪聲的中位數。

+0

我碰到這個+1,但有工作要理解你的建議,儘管它可能是答案在這裏。我今天嘗試了K-means聚類,但我仍然不相信這有幫助。也許趨勢分析是正確的方法,但數據點非常少。我將在原始文章中添加一個數據示例。 – AeroClassics