在數(shù)據(jù)采集應(yīng)用中怎樣選擇合適的采樣率
理想開關(guān)
理想開關(guān)的穩(wěn)定時(shí)間永遠(yuǎn)是0,采樣率要保證所有開關(guān)的閉合都檢測(cè)到,因此比最小閉合時(shí)間短。雖然看起來簡(jiǎn)單,但也有一個(gè)取舍的問題,如果σmin是10μs,我們是否要每10μs就檢測(cè)一次?這樣做肯定會(huì)耗盡CPU所有的可用資源。
克服這種問題的最好方法是考慮實(shí)際應(yīng)用狀況然后再做取舍。假如10μs的閉合時(shí)間確實(shí)是有可能的,但在每一千次閉合中才會(huì)出現(xiàn)一次(0.1%),由于99.9%的時(shí)間里σmin都大于10μs,那么5ms最小閉合時(shí)間更加切合實(shí)際,而且比10μs最小閉合時(shí)間使用的CPU資源要少很多。但漏掉一個(gè)10μs開關(guān)閉合對(duì)于一個(gè)具體的應(yīng)用來說是不是可以接受呢?
答案取決于實(shí)際的應(yīng)用。如果開關(guān)閉合是由人來操縱,我們可以假設(shè)按開關(guān)時(shí)太輕了,使用者只要按重一點(diǎn)就可以了;如果閉合是彈球機(jī)中的一個(gè)開關(guān),我們可以認(rèn)為開關(guān)沒有真正閉合,結(jié)果也就是玩的人得不到分;但是如果開關(guān)的閉合與有毒氣體的釋放有關(guān),那么我們就要把它測(cè)出來,在這種情形下,我們要將開關(guān)鎖住,或者由一個(gè)專門的小處理器每隔10μs讀取一次數(shù)據(jù)。
我們假設(shè)只有檢測(cè)到σmin大于5ms的開關(guān)閉合是可以接受的,這時(shí)精度也有99.9%,但如果此時(shí)CPU過載了又怎么辦?可不可以用10ms來代替5ms從而進(jìn)一步使CPU負(fù)載減半呢?根據(jù)實(shí)驗(yàn),這樣精度會(huì)降到99.0%。如果在實(shí)際應(yīng)用中沒有問題,那么這種取舍還是值得的。但是如果采樣率改為10ms后精度降到了85%,這種取舍就有點(diǎn)危險(xiǎn)了。記錄下所有σmin的實(shí)驗(yàn)結(jié)果能有助于你正確評(píng)估如何在精度和CPU的利用率間找到平衡。
到現(xiàn)在為止所提到的開關(guān)都是理想狀態(tài)下的開關(guān),開關(guān)反彈對(duì)選擇合適采樣率又增加了一些影響。非理想開關(guān) 我們來看一下圖2a中的滾球開關(guān)。該開關(guān)的輸出如圖4a,過濾后的波形如圖4b。輸出通過去反彈算法過濾,以給應(yīng)用處理代碼提供一個(gè)純凈的信號(hào),表示開關(guān)的閉合狀態(tài)。已有很多文獻(xiàn)介紹了多種硬件和軟件去反彈算法。下面分析中所用到的算法如圖5所示,它是一個(gè)同步狀態(tài)機(jī),需要對(duì)同一數(shù)值進(jìn)行兩次連續(xù)采樣,以記錄開關(guān)的狀態(tài)改變。對(duì)不同的算法,采樣率分析和結(jié)果會(huì)有所不同。
在嵌入式處理器中可以直接用布爾代數(shù)執(zhí)行這種算法,該方法的另一個(gè)優(yōu)點(diǎn)是可對(duì)多個(gè)開關(guān)同時(shí)去反彈。例如表1中的代碼顯示了圖5去反彈算法執(zhí)行情況,這里同時(shí)對(duì)8個(gè)獨(dú)立的輸入進(jìn)行處理,假設(shè)每個(gè)輸入都用輸入變量x的一位來表示。
如果硬件設(shè)計(jì)可以靈活改變,也可采用FPGA在硬件中執(zhí)行狀態(tài)機(jī)邏輯。在這種情形下,不需要再用軟件對(duì)開關(guān)進(jìn)行去反彈,可以認(rèn)為開關(guān)是理想的,硬件狀態(tài)機(jī)的時(shí)序和我們下面的分析沒有太大區(qū)別。
如果開關(guān)關(guān)閉后在最小關(guān)閉時(shí)間內(nèi)采樣少于兩次,開關(guān)的動(dòng)作就會(huì)被過濾掉,這也就決定了采樣周期的上限是σmin/2。
現(xiàn)在我們來看看采樣周期的下限,我們將去反彈算法的最低要求看作是不能將兩次連續(xù)的開關(guān)動(dòng)作搞錯(cuò)。例如我們得到兩個(gè)為1的樣本,后面是兩個(gè)0,然后又是兩個(gè)1。假定只有最后兩個(gè)1是穩(wěn)定狀態(tài),此時(shí)過濾后的輸出在穩(wěn)定時(shí)間內(nèi)至少有4個(gè)樣本。為防止出現(xiàn)誤判斷,在開關(guān)關(guān)閉瞬間我們必須最多取三次樣,所以采樣周期要大于τmax/3。
將上限和下限合在一起,對(duì)于圖5所示的狀態(tài)機(jī)數(shù)字輸入去反彈輸入驅(qū)動(dòng)器我們可得采樣周期Ts(采樣率fs=1/Ts)的條件:
采取快速采樣(如1ms)的另一個(gè)理由是試驗(yàn)獲得的關(guān)閉時(shí)間也許不是最小值。如果希望采集到99.0%的開關(guān)閉合,快一些的采樣率也許能將這個(gè)數(shù)值提高一點(diǎn)。但為了避免系統(tǒng)將反彈誤認(rèn)為是開關(guān)閉合,采樣率絕不要小于1ms。 當(dāng)然,也可能采樣率范圍都不可接受。我們以一個(gè)特殊的反彈開關(guān)作為例子,它的穩(wěn)定時(shí)間是6ms,最小關(guān)閉時(shí)間是4ms。此時(shí),式1得到一個(gè)空集,沒有一個(gè)采樣率可以保證捕獲到開關(guān)的閉合且確保反彈不會(huì)誤認(rèn)為是好幾次開關(guān)閉合。 要解決這個(gè)問題,設(shè)計(jì)人員就必須考慮其它的方法。有一種辦法是采用不同的去反彈算法,如在三個(gè)1而不是兩個(gè)連續(xù)的1中找出兩個(gè)1;另一種辦法是考慮開關(guān)閉合時(shí)的內(nèi)部到達(dá)時(shí)間;第三種辦法是要么提高σmin,偶爾錯(cuò)過開關(guān)的閉合,要么減少τmax,偶爾將一次開關(guān)閉合當(dāng)作兩個(gè)事件。不管選擇哪一種,這些方法都要容易記錄下來,如果選擇被證明不好,更變?cè)O(shè)計(jì)僅僅只需改變采樣率就可以了,或者改變有限狀態(tài)機(jī)定義的算法。 本文結(jié)論 歸納起來,我們用試驗(yàn)和分析得到輸入的采樣率有效范圍,當(dāng)范圍確定以后,再考慮實(shí)際應(yīng)用的其它因素,在可接受范圍內(nèi)選擇一個(gè)最佳采樣率。采用這種方法可以相對(duì)較快地得到合適采樣率,因其它應(yīng)用和系統(tǒng)問題進(jìn)行調(diào)節(jié)也只要幾分鐘就可以了,不需要用幾天或幾個(gè)星期的時(shí)間進(jìn)行試錯(cuò)測(cè)試和微調(diào)。 雖然本文中提到的數(shù)字開關(guān)代表了很多嵌入式系統(tǒng)器件,但是它們還很不全面,不過我的目的是證明組合式分析實(shí)驗(yàn)方法的有效性,而不是提供對(duì)所有可能存在的傳感器都適用的解決辦法。該方法依具體使用的傳感器、使用場(chǎng)合以及通過簡(jiǎn)單試驗(yàn)獲得合理數(shù)據(jù)的能力的不同而需要作不同程度的修正。
有可能出現(xiàn)的值表明了采樣率可接受取舍范圍。假設(shè)τmax是3ms,σmin是10ms,那么由等式1可得1ms
評(píng)論