《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > EDA與制造 > 設(shè)計應(yīng)用 > 基于MATLAB的實(shí)時數(shù)據(jù)采集與分析研究
基于MATLAB的實(shí)時數(shù)據(jù)采集與分析研究
程偉 程文波 李燦平 成都理工大學(xué)信息工程學(xué)院
摘要: 數(shù)據(jù)采集系統(tǒng)涉及多學(xué)科,,所研究的對象是物理或生物等各種非電或電信號,。根據(jù)各種非電或電信號的特征,利用相應(yīng)的歸一化技術(shù),,將其轉(zhuǎn)換為可真實(shí)反映事物特征的電信號后,,經(jīng)A/D轉(zhuǎn)換器轉(zhuǎn)換為計算機(jī)可識別的有限長二進(jìn)制數(shù)字編碼,,以此作為研究自然科學(xué)和實(shí)現(xiàn)工業(yè)實(shí)時控制的重要依據(jù),實(shí)現(xiàn)對宏觀和微觀自然科學(xué)的量化認(rèn)識
Abstract:
Key words :

 

      1,、引言
 
  數(shù)據(jù)采集系統(tǒng)涉及多學(xué)科,,所研究的對象是物理或生物等各種非電或電信號。根據(jù)各種非電或電信號的特征,,利用相應(yīng)的歸一化技術(shù),,將其轉(zhuǎn)換為可真實(shí)反映事物特征的電信號后,經(jīng)A/D轉(zhuǎn)換器轉(zhuǎn)換為計算機(jī)可識別的有限長二進(jìn)制數(shù)字編碼,,以此作為研究自然科學(xué)和實(shí)現(xiàn)工業(yè)實(shí)時控制的重要依據(jù),,實(shí)現(xiàn)對宏觀和微觀自然科學(xué)的量化認(rèn)識,典型的數(shù)據(jù)采集系統(tǒng)組成如圖1所示,。
 
  在采集過程中,,將傳感器獲取的參數(shù)通過A/D轉(zhuǎn)換送入內(nèi)存,然后由CPU對其進(jìn)行分析,、運(yùn)算和處理,,如數(shù)字濾波、量綱變換、誤差修正,、數(shù)字顯示等,。在本文中,嘗試通過利用MATLAB的數(shù)據(jù)采集工具箱對自主設(shè)計的數(shù)據(jù)采集系統(tǒng)進(jìn)行模擬仿真,,結(jié)果實(shí)現(xiàn)了對設(shè)計系統(tǒng)的模擬操作檢驗(yàn)與數(shù)據(jù)分析,。為了滿足實(shí)時采集的要求,采用了Compilier編譯器,,Compilier以M語言編制的程序?yàn)檩斎?,可以根?jù)需要生成獨(dú)立運(yùn)行的應(yīng)用程序或可以被 C/C++程序調(diào)用的動態(tài)鏈接庫文件。它支持MATLAB所有的內(nèi)部函數(shù),,可使程序變得簡潔高效,。
 
圖1 典型數(shù)據(jù)采集系統(tǒng)的組成
 
  2、數(shù)據(jù)采集工具箱介紹
 
   在MATLAB數(shù)據(jù)采集工具箱里集成了數(shù)據(jù)采集的M文件格式的函數(shù)和MEX文件格式的動態(tài)鏈接庫,。其主要特征[4][5]如下:
 
  (1) 提供了將實(shí)時測量數(shù)據(jù)從數(shù)據(jù)采集硬件采集到MATLAB中的框架,。
 
  (2) 支持模擬量輸入(AI)、模擬量輸出(AO)以及數(shù)字量I/O子系統(tǒng),,包括模擬量I/O實(shí)時變換,。
 
  (3) 支持PC聲卡和業(yè)界非常流行的數(shù)據(jù)采集設(shè)備如NI卡、并行口(LPT1-LPT3),、Keithley卡等,。
 
  (4) 采用事件驅(qū)動模式進(jìn)行數(shù)據(jù)采集。數(shù)據(jù)采集工具箱由三部分組成:M文件格式的函數(shù),、數(shù)據(jù)采集引擎和硬件驅(qū)動,如圖2所示,。這些組成部分使得MATLAB與數(shù)據(jù)采集硬件之間的信息傳遞成為可能,。
 
 
圖2 數(shù)據(jù)采集引擎與硬件驅(qū)動
 
  3、數(shù)據(jù)采集過程

  3.1 數(shù)據(jù)采集的基本步驟
 
 ?。?)創(chuàng)建設(shè)備的一個對象,。對象創(chuàng)建函數(shù)列表如下:
 
表1 對象創(chuàng)建函數(shù)列表
 
  (2)添加通道或數(shù)據(jù)線,。模擬量I/O對象中用應(yīng)添加通道,,而數(shù)字量I/O對象中應(yīng)添加數(shù)據(jù)線,與添加通道或數(shù)據(jù)線有關(guān)的函數(shù)列表如下:
 
表2 與添加通道或數(shù)據(jù)線有關(guān)的函數(shù)列表
 
 ?。?)配置屬性,。屬性分為公共屬性和通道/數(shù)據(jù)線屬性,而兩者又再被分為基本屬性與設(shè)備特有屬性,。其中公共屬性為返回設(shè)備對象的所有可配置的公共屬性名及其可能的屬性值,,應(yīng)將對象作為Set函數(shù)的輸入?yún)?shù);要返回設(shè)備對象的所有公共屬性及其當(dāng)前值或?yàn)轱@示某個屬性的當(dāng)前值,應(yīng)將對象或?qū)傩悦鳛?Get函數(shù)的輸入?yún)?shù),。對于通道/數(shù)據(jù)線屬性,,則使用Channel(Line)屬性。
 
 ?。?)獲取或輸出數(shù)據(jù),。包括啟動設(shè)備對象,記錄或發(fā)送數(shù)據(jù)及停止設(shè)備對象三個步驟,。其中啟動設(shè)備執(zhí)行Start函數(shù),、提取記錄數(shù)據(jù)使用 Getdata函數(shù)、發(fā)送數(shù)據(jù)前的數(shù)據(jù)排列使用Putdata函數(shù),、停止使用用Stop函數(shù),;另外運(yùn)行狀態(tài)用Running屬性標(biāo)識、記錄狀態(tài)由 Logging屬性標(biāo)識,、發(fā)送狀態(tài)由Sending屬性標(biāo)識,,其取值均為On或Off。對于數(shù)字量I/O對象,,該部分處理有所不同,。
 
  (5)清除,。當(dāng)不再需要設(shè)備對象時,,應(yīng)使用刪除函數(shù)Delete將設(shè)備對象從內(nèi)存中清除,并使用清除命令Clear將對象從MATLAB工作空間中清除,。
 
  3.2 應(yīng)用實(shí)例與分析
 
  3.2.1 MATLAB對RS232 的串口通信設(shè)計

   MATLAB是一個跨平臺軟件,,而此處使用的是自主設(shè)計的數(shù)據(jù)采集卡,因此不具備直接訪問的能力,。但MATLAB的面向?qū)ο蠹夹g(shù),,已用一個對象把計算機(jī)串口封裝起來,只要用Serial函數(shù)創(chuàng)建串口對象即可[6],。關(guān)鍵語句為:s=serial(‘COM1’,,‘BaudRate’,9600)。 MATLAB封裝的串口對象支持對串口的異步讀寫操作,,通過對異步讀寫設(shè)置,,PC在執(zhí)行讀寫串口函數(shù)時能立即返回,不必等待串口把數(shù)據(jù)串輸完畢,。當(dāng)指定數(shù)據(jù)傳輸結(jié)束時就觸發(fā)事件,,執(zhí)行事件回調(diào)函數(shù),對事件回調(diào)函數(shù)編程,,進(jìn)行數(shù)據(jù)處理,,這樣可以大大提高數(shù)據(jù)處理的效率,。
 
    MEX是MATLAB的可執(zhí)行程序,是MATLAB調(diào)用其它語言編寫的程序或算法的接口,,在Windows環(huán)境下是擴(kuò)展名為DLL的動態(tài)鏈接庫,。對MEX 編譯器進(jìn)行配置的方法是:在MATLAB命令窗口中運(yùn)行mex-setup,選擇VC6.0++作為編譯器,。用C語言編寫端口讀,、寫的操作程序,程序包含有頭文件mex.h和mexFunction函數(shù),,mexFunction函數(shù)中nelhs表示輸出變量的個數(shù),,plhs包含指向輸出變量指針的數(shù)組,nrhs表示輸入變量的個數(shù),,prhs包含指向輸入變量指針的數(shù)組,。接口編形成的MEX文件與參考文獻(xiàn)[7][8]類似,在此不再累述,。 
 
  3.2.2 數(shù)據(jù)采集與分析
 
 ?。?)數(shù)據(jù)讀取的MATLAB實(shí)現(xiàn)
 
  主要代碼為:
 
  %讀取通道數(shù)及總數(shù)據(jù)量
 
  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’);
 
  %按通道數(shù)循環(huán)讀出各通道起始地址
 
  status=fseek(fid,76, ‘bof’);%
 
  for i="1:" nDataChNum
 
  pChannelAdr(i)=fread(fid,1, ‘long’)
 
  end
 
  %按通道數(shù)循環(huán)讀出各通道數(shù)據(jù)
 
  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)數(shù)據(jù)處理與圖形繪制
 
  利用MATLAB的圖形用戶接口,通過編程可以很方便地構(gòu)建數(shù)據(jù)采集與分析的用戶交互界面,。將數(shù)據(jù)采集系統(tǒng)采集的實(shí)際心電圖信號,,用RS232導(dǎo)入到PC 中。在MATLAB環(huán)境下,,運(yùn)行以上已經(jīng)編好的程序,,即可得到如下的模擬實(shí)驗(yàn)結(jié)果。不過要說明的是,,此處使用的數(shù)據(jù)采集系統(tǒng)是八通道同步采集,,而仿真時僅使用的是其中一個通道進(jìn)行的操作。
 
圖3 實(shí)際心電圖信號的采集與處理效果圖
 
  4,、結(jié)語
 
   使用自主開發(fā)的數(shù)據(jù)采集系統(tǒng),,通過合理運(yùn)用串口及MTLAB強(qiáng)大的數(shù)值計算和分析功能,實(shí)現(xiàn)了基于MATLAB的實(shí)時數(shù)據(jù)處理和分析,。通過模擬實(shí)驗(yàn)表明,,該方法對于其它類似采集卡依然實(shí)用,,具有一定的應(yīng)用價值和發(fā)展前景,。
 
此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。