2017-06-12 152 views
0

我想讀取來自我的Arduino的大量數據,我已將輸入緩衝區設置爲500000,以確保它可以處理所有這些數據。我的數據是4個傳感器讀數,每個採樣頻率爲250 Hz。使用默認的緩衝區大小(712),當我實時繪製讀數並且樣本變得混亂並且使情節變得瘋狂時,我曾經遇到過困難。我通過將緩衝區大小增加到50000來解決這個問題。但是現在,這會運行一段時間,但如果我想運行它15分鐘,5分鐘後我會得到相同的錯誤行爲,並且繪圖速度會變慢。我確實有一些處理代碼以及現場繪圖,但它不應該像這樣使用雙緩衝區。我想知道緩衝區是否將包含從開始到滿的所有數據,或者是否會在舊數據滿時繼續清除舊數據(知道我已經將它保存在另一個矢量中並繪製它)。我真的不明白爲什麼這會繼續發生。串行輸入緩衝區大小Matlab

親切的問候 I.H

+0

「_I確實有一些處理代碼,與現場繪圖一樣,但它不應該像這樣有這麼大的buffer_」。緩衝區的大小不會影響處理速度。如果你對一塊數據的處理比需要到達的數據塊長得多...那麼即使是無限的緩衝器也不會停止數據到達和它們的顯示之間的逐漸失步。 – Hoki

回答

0

當緩衝區滿,一旦你得到它擦除舊數據新數據。您看到的行爲是因爲您的處理和繪圖比數據流更慢。

  • 儘量確保您優化您處理
  • 確保用於繪製由「的DrawNow」來完成。像這樣,你確定如果隊列中有任何東西,它不會被執行
  • 儘量避免保存並保留所有數據
  • 如果問題仍然存在,可以嘗試實現一個計時器以確保你是一致的閱讀你的數據
+0

如何在程序使用緩衝區時擦除數據?在文檔中,刷新緩衝區會清除所有數據。我確定仍然會有一些新的數據,當我刷新它時,我還沒有讀取,這意味着數據丟失.....我正在使用drawnow並更新每70個樣本的繪圖以便更快處理。另一個信號處理部分可能很耗時,但那是因爲我正在進行繁重的處理......最後,計時器應該如何判斷我是否一致? – Isra

+1

如果您正在讀取串行端口,則一旦讀取,數據將被刪除。你不需要擦除任何東西! – Laleh