DAQ卡擷取時間與程式執行時間不同

各位IT360的大大們好,小弟有一個問題想請教各位,就是我的DAQ卡的取樣速率是每秒51200點,但是我主VI中的matlab程式在執行這51200筆的資料時卻要耗費2秒多,目前的做法是將每一秒的資料存入矩陣中,之後再使用local variable將資料依序的從矩陣中抓出,但這樣一直儲存的結果卻會導致我記憶體爆掉,不曉得各位前輩有沒有好的解決辦法,或是其它方法可以給小弟參考,謝謝

資料擷取流程: 擷取資料(取樣速率x取樣點數) -> 資料傳輸 (PCI、USB、GPIB or RS-232) -> 資料處裡 (濾波、FFT、RMS、時域操作...)

所以你講的1秒只是流程的第一段;

第二段看匯流排速度而定,但是也不會到達匯流排的理論值,通常有6成就很厲害了,尤其USB、RS-232不是全雙工的介面,單向傳輸還打對折先;

第三段就看你放了什麼給CPU算,算法複雜時間當然會拉長,CPU慢時間也會拉長,程式不支援多核心平行運算也快不起來,尤其matlab不是LabVIEW的原生碼,執行還要再編譯過,充其量只能驗證 or debug演算法用,要商用或用於生產還是用LabVIEW重寫過 (or compile 成 DLL 由LabVIEW 呼叫也可)。

 

另外就是知道了流程後,至少可以把流程pipeline起來,流程1+2 使用一個迴圈,流程3自己一個迴圈,兩迴圈間用Queue (VI裡的FIFO) 傳資料,把擷取與運算脫鉤,讓擷取與運算能同時運行,也許就可以達到你要的1秒內同時搞定。