基于MATLAB的實時數據采集與分析研究
程偉 程文波 李燦平 成都理工大學信息工程學院
摘要: 數據采集系統涉及多學科,所研究的對象是物理或生物等各種非電或電信號。根據各種非電或電信號的特征,利用相應的歸一化技術,將其轉換為可真實反映事物特征的電信號后,經A/D轉換器轉換為計算機可識別的有限長二進制數字編碼,以此作為研究自然科學和實現工業實時控制的重要依據,實現對宏觀和微觀自然科學的量化認識
Abstract:
Key words :
1、引言
數據采集系統涉及多學科,所研究的對象是物理或生物等各種非電或電信號。根據各種非電或電信號的特征,利用相應的歸一化技術,將其轉換為可真實反映事物特征的電信號后,經A/D轉換器轉換為計算機可識別的有限長二進制數字編碼,以此作為研究自然科學和實現工業實時控制的重要依據,實現對宏觀和微觀自然科學的量化認識,典型的數據采集系統組成如圖1所示。
在采集過程中,將傳感器獲取的參數通過A/D轉換送入內存,然后由CPU對其進行分析、運算和處理,如數字濾波、量綱變換、誤差修正、數字顯示等。在本文中,嘗試通過利用MATLAB的數據采集工具箱對自主設計的數據采集系統進行模擬仿真,結果實現了對設計系統的模擬操作檢驗與數據分析。為了滿足實時采集的要求,采用了Compilier編譯器,Compilier以M語言編制的程序為輸入,可以根據需要生成獨立運行的應用程序或可以被 C/C++程序調用的動態鏈接庫文件。它支持MATLAB所有的內部函數,可使程序變得簡潔高效。

圖1 典型數據采集系統的組成
2、數據采集工具箱介紹
在MATLAB數據采集工具箱里集成了數據采集的M文件格式的函數和MEX文件格式的動態鏈接庫。其主要特征[4][5]如下:
(1) 提供了將實時測量數據從數據采集硬件采集到MATLAB中的框架。
(2) 支持模擬量輸入(AI)、模擬量輸出(AO)以及數字量I/O子系統,包括模擬量I/O實時變換。
(3) 支持PC聲卡和業界非常流行的數據采集設備如NI卡、并行口(LPT1-LPT3)、Keithley卡等。
(4) 采用事件驅動模式進行數據采集。數據采集工具箱由三部分組成:M文件格式的函數、數據采集引擎和硬件驅動,如圖2所示。這些組成部分使得MATLAB與數據采集硬件之間的信息傳遞成為可能。

圖2 數據采集引擎與硬件驅動
3、數據采集過程
3.1 數據采集的基本步驟
(1)創建設備的一個對象。對象創建函數列表如下:

表1 對象創建函數列表
(2)添加通道或數據線。模擬量I/O對象中用應添加通道,而數字量I/O對象中應添加數據線,與添加通道或數據線有關的函數列表如下:

表2 與添加通道或數據線有關的函數列表
(3)配置屬性。屬性分為公共屬性和通道/數據線屬性,而兩者又再被分為基本屬性與設備特有屬性。其中公共屬性為返回設備對象的所有可配置的公共屬性名及其可能的屬性值,應將對象作為Set函數的輸入參數;要返回設備對象的所有公共屬性及其當前值或為顯示某個屬性的當前值,應將對象或屬性名作為 Get函數的輸入參數。對于通道/數據線屬性,則使用Channel(Line)屬性。
(4)獲取或輸出數據。包括啟動設備對象,記錄或發送數據及停止設備對象三個步驟。其中啟動設備執行Start函數、提取記錄數據使用 Getdata函數、發送數據前的數據排列使用Putdata函數、停止使用用Stop函數;另外運行狀態用Running屬性標識、記錄狀態由 Logging屬性標識、發送狀態由Sending屬性標識,其取值均為On或Off。對于數字量I/O對象,該部分處理有所不同。
(5)清除。當不再需要設備對象時,應使用刪除函數Delete將設備對象從內存中清除,并使用清除命令Clear將對象從MATLAB工作空間中清除。
3.2 應用實例與分析
3.2.1 MATLAB對RS232 的串口通信設計
MATLAB是一個跨平臺軟件,而此處使用的是自主設計的數據采集卡,因此不具備直接訪問的能力。但MATLAB的面向對象技術,已用一個對象把計算機串口封裝起來,只要用Serial函數創建串口對象即可[6]。關鍵語句為:s=serial(‘COM1’,‘BaudRate’,9600)。 MATLAB封裝的串口對象支持對串口的異步讀寫操作,通過對異步讀寫設置,PC在執行讀寫串口函數時能立即返回,不必等待串口把數據串輸完畢。當指定數據傳輸結束時就觸發事件,執行事件回調函數,對事件回調函數編程,進行數據處理,這樣可以大大提高數據處理的效率。
MEX是MATLAB的可執行程序,是MATLAB調用其它語言編寫的程序或算法的接口,在Windows環境下是擴展名為DLL的動態鏈接庫。對MEX 編譯器進行配置的方法是:在MATLAB命令窗口中運行mex-setup,選擇VC6.0++作為編譯器。用C語言編寫端口讀、寫的操作程序,程序包含有頭文件mex.h和mexFunction函數,mexFunction函數中nelhs表示輸出變量的個數,plhs包含指向輸出變量指針的數組,nrhs表示輸入變量的個數,prhs包含指向輸入變量指針的數組。接口編形成的MEX文件與參考文獻[7][8]類似,在此不再累述。
3.2.2 數據采集與分析
(1)數據讀取的MATLAB實現
主要代碼為:
%讀取通道數及總數據量
fid=fopen(‘cardiogram.add’,‘r’);
Status=fseek(fid,56,‘bof’);
nDataChNum=fread(fid,1,‘long’);
status=fseek(fid,204, ‘bof’);
nAllDataLength=fread(fid,1, ‘long’);
%按通道數循環讀出各通道起始地址
status=fseek(fid,76, ‘bof’);%
for i="1:" nDataChNum
pChannelAdr(i)=fread(fid,1, ‘long’)
end
%按通道數循環讀出各通道數據
for i="1:nDataChNum"
status=fseek(fid,pChannelAdr(i)+360, ‘bof’)
nSegNum=fread(fid,1, ‘log’)
status=fseek(fid,pChannelAdr(i)+160*nSegNum+1024, ‘bof’);
data=fread(fid,nAllDataLength, ‘short’);
end
sta=fclose(fid);
(2)數據處理與圖形繪制
利用MATLAB的圖形用戶接口,通過編程可以很方便地構建數據采集與分析的用戶交互界面。將數據采集系統采集的實際心電圖信號,用RS232導入到PC 中。在MATLAB環境下,運行以上已經編好的程序,即可得到如下的模擬實驗結果。不過要說明的是,此處使用的數據采集系統是八通道同步采集,而仿真時僅使用的是其中一個通道進行的操作。

圖3 實際心電圖信號的采集與處理效果圖
4、結語
使用自主開發的數據采集系統,通過合理運用串口及MTLAB強大的數值計算和分析功能,實現了基于MATLAB的實時數據處理和分析。通過模擬實驗表明,該方法對于其它類似采集卡依然實用,具有一定的應用價值和發展前景。
此內容為AET網站原創,未經授權禁止轉載。