2016-11-10 102 views
0

我在使用Raspberry Pi 3 B的項目中工作,我通過ADC MPC3008從IR傳感器(Sharp GP2Y0A21YK0F)獲取數據,並使用PyQtgraph庫實時顯示它。如何在從ADC獲取數據時測量python中的採樣率?

但是,似乎我得到的樣本非常少,並且圖表並不像我所期望的那樣「平滑」。

我使用Adafruit Python MCP3008庫和函數mcp.read_adc(0)來獲取數據。

有沒有辦法測量Python中的採樣率?

謝謝

雨果·奧利維拉

+0

'看起來我只有很少的樣本'你是什麼意思? ,您在閱讀ADC通道時會獲得樣本。你多久閱讀一次ADC?你能顯示一些代碼嗎? –

+0

嘗試收集例如一個100(或1000?)的樣本並使用timeit來測量需要多長時間。 – barny

+0

我想你問另一個關於如何從MCP3008獲得200ksps的問題。不要以爲你會接近那個地方。 Pi/Linux不是實時平臺 – barny

回答

0

我建議設立一些下一級緩存,通過多理想(見multiprocessing and GUI updating - Qprocess or multiprocessing?),以更好地得到你如何能快速訪問數據的句柄。目前,您正在使用QTimer進行輪詢,每50毫秒只能獲得3個原始讀取數據......所以您真的是通過計時器人爲地限制自己。我沒有使用過MCP3008,但是快速瀏覽一下他們的代碼看起來好像你必須設置一些樣例測試來嘗試一些事情,或者進一步調查以獲得更好的文檔。問題是mcp.read_adc(0)方法的行爲,它是阻塞的還是非阻塞的......如果是非阻塞的,它是否會在沒有新數據時返回陳舊數據,等等。這將是理想的如果它從時序上來說是阻塞的,你可以在它上面設置一個循環,並且每次連續返回時間增量以確定你能夠以多快的速度獲得新的採樣。如果它是非阻塞的,那麼你會希望它返回null以便沒有新的採樣,並且只返回實際的新樣本,如果它返回了某些東西。你必須玩弄它,看看它的行爲。無論如何,一旦你設置了第二個線程來輪詢mcp.read_adc(0),那麼你可以使用update()定時器來收集最新的緩衝區並繪製它。我也不知道多線程/多處理對RaspPI的影響(請參見此處的一般性討論:Multiprocessing vs Threading Python),但是任何事情都應該比QTimer輪詢更好。

+0

謝謝你非常喜歡你的答案! –