解萍,王偉
(淮南師范學院 電氣信息工程學院,安徽 淮南 232038)
基于C++、數(shù)據(jù)庫與MATLAB協(xié)作編程的信號處理系統(tǒng)研究
解萍,王偉
(淮南師范學院 電氣信息工程學院,安徽 淮南 232038)
把Visual C++,MATLAB和數(shù)據(jù)庫合作編程整合在一起,可以使信號處理更加自動,高效。樣本數(shù)據(jù)使用ADO方法存儲在數(shù)據(jù)庫中,可以通過COM接口提取出來,并利用Add-in技術被MATLAB計算與處理。Visual C++是完成整個程序的編程平臺。
聯(lián)合編程;ADO;COM
隨著模型科學與技術的發(fā)展,計算機的研究與軟件水平已經(jīng)有了快速提高。工業(yè)生產(chǎn)與科學實驗所需要的信號數(shù)據(jù)變得越來越復雜,而我們所使用的軟件一般都是針對普通領域的,工作人員很難將它們整合到具有特殊需要的應用場景,而在這些場合中,通常需要準確的實際研究。
集成VC++、數(shù)據(jù)庫和MATLAB,可以使信號處理高效且成本低??紤]到便捷與成本,選擇Microsoft Access作為數(shù)據(jù)存儲數(shù)據(jù)庫,并使用ADO技術進行數(shù)據(jù)操作,這種技術也可以用在大型數(shù)據(jù)庫管理系統(tǒng)如SQLSERVER和ORACLE當中。樣本數(shù)據(jù)被存儲在數(shù)據(jù)庫當中,用戶可以通過可視化界面進行索引、檢測和進倉的一些操作,比使用文件系統(tǒng)更加先進。對于工程人員來說,MATLAB是一種有力的數(shù)據(jù)庫,擁有多種工具箱。所需要的數(shù)據(jù)可以從數(shù)據(jù)庫中提出來并為MATLAB處理,然后轉(zhuǎn)換成所需的數(shù)據(jù)格式。用戶可以使用他們自己的M型文件,并將它們集成到VC平臺以進行數(shù)據(jù)分析與處理。所有的功能都可以通過程序來完成,從而大大提高了準確度,降低了時間消耗。
以前大量數(shù)據(jù)存儲在相應的文件中,難以被其他程序索引和共享。為了克服文件系統(tǒng)帶來的不足,可將數(shù)據(jù)存儲在具有良性定義的數(shù)據(jù)庫中,以適合使用ADO技術的信號處理系統(tǒng)。ADO是一種與語言無關的數(shù)據(jù)接入技術,所有的組件包含了標準的COM的介面系列。ADO是OLEDB的一個高層次的抽象,使客戶端應用程序通過OLE DB接口來訪問和操作數(shù)據(jù)。數(shù)據(jù)庫訪問結構如圖1所示。
圖1 ADO對象訪問數(shù)據(jù)庫的結構
為了使用ADO來訪問數(shù)據(jù)庫,應首先定義ADO對象模型。使用如下的經(jīng)典對象:
1 Connection對象:代表一到數(shù)據(jù)源的開放連接。這是一個與數(shù)據(jù)源的唯一會話。基于集合、方法以及一個連接對象的屬性,我們可以從應用程序建立一個連接到數(shù)據(jù)庫,這是第一步驟操作數(shù)據(jù)庫。
2 Command對象:定義一個特定的命令對數(shù)據(jù)源執(zhí)行。使用命令對象,可以在一個Recordset對象查詢數(shù)據(jù)庫并返回記錄,執(zhí)行批量操作,或操作數(shù)據(jù)庫的結構。它的語法與SQL兼容。
3 Recordset對象:代表從基表的記錄集或整個一個執(zhí)行命令的結果。Recordset對象包括所有記錄(行)和字段(列)。可以操作的數(shù)據(jù)幾乎完全使用在ADO記錄集。這是一個記錄對象和Fields對象聚合。
4 記錄對象:代表了從一個記錄集或數(shù)據(jù)。記錄對象可能會直接返回一排Recordset或得到一個Recordset對象。
5 領域?qū)ο螅捍砹艘粋€共同的數(shù)據(jù)類型的列。每個字段對象對應于Recordset中的列。
6 Parameter對象:代表與參數(shù)化查詢相關的參數(shù),或者輸入/輸出參數(shù)和存儲過程的返回值。
圖2 Object model of ADO
下面的源代碼顯示操縱與ADO在Visual C++方法的數(shù)據(jù)的步驟:
1 預處理:由于ADO使用標準的COM接口,我們必須在初始化程序,這是由調(diào)用AfxOleInit在CWinApp()來完成它的開始::InitInstance()中。
2 引入ADO庫:必須加上 “C:\程序文件\共同文件\系統(tǒng)\msado15.dll”no_namespace重命名 (“EOF 分析”,“adoEOF”)'在 stdafx.h 為了生成兩個C的msado15.tlh,ado15.tli++頭文件編譯。
3 數(shù)據(jù)庫操作:首先要打開一個連接,可以配置連接屬性,然后打開它。所有其他對象都可以用類似的方式。參考代碼:
可以使用MAT-files,硬盤中數(shù)據(jù)的存儲使用MATLAB數(shù)據(jù)文件格式,以方便在MATLAB環(huán)境中使用。MAT-files為在不同平臺中交換數(shù)據(jù)提供了一種方便的高度可移植的機制。MAT-file文件格式公開,但是Mathworks公司因為其兼容性問題所以不建議用戶開發(fā)自己的I/O例程文件。使用MATLAB提供的例程來完成數(shù)據(jù)的通信,下面的源代碼顯示了如何利用這一機制。
COM是一個與平臺無關的、分布式的、面向?qū)ο蟮南到y(tǒng),用以創(chuàng)建可以交互的二進制軟件組件。COM是一種標準,制定了一種對象之間互操作的對象模型與編程需求。一個COM對象是提供了一個或多個接口或方法用以成功訪問對象數(shù)據(jù)的實體。自動化是一個基于COM的技術,允許在運行時或后置地綁定到一個對象的方法及屬性并能夠進行跨平臺編程。自動化客戶(端)是一個應用程序或編程工具,或者是一個腳本語言,以訪問由其他自動化對象提供的服務;自動化服務器是一個應用程序或類型庫,或者是其他的一些應用,使得其中的自動化對象可以被其他的應用程序用來編程、提供編程所需的工具或腳本語言。在本文所提的程序中,MATLAB就是一個自動化的服務器,它提供了支持VC的服務,將VC當作客戶端,從而實現(xiàn)了
通過MATLAB實現(xiàn)了利用數(shù)據(jù)庫技術與信號處理技術完成數(shù)據(jù)操作的功能,利用每種開發(fā)工具的特點,通過組合不同的平臺來完成系統(tǒng)的功能。這種方法可以被廣泛地應用于開發(fā)人員在系統(tǒng)研發(fā)初期的理論驗證。然而由于使用了MATLAB庫,所以源代碼不能直接應用到最后的生產(chǎn)過程中,還需要做進一步的人工處理。
[1]劉驚雷.Visual C++實用教程[M].北京:電子工業(yè)出版社,2005
[2]求是科技.Visual C++6.0信息管理系統(tǒng)開發(fā)實例導航[M].北京:人民郵電出版社,2005
[3]黃維通.Visual C++面向?qū)ο笈c可視化程序設計[M].北京:清華大學出版社,2003
[4]Peter Rob.Database Systems:Design,Implementation,and Management(Fifth Edition)[M].Course Technology,2001
[5]Alan Gordon.The COM and COM+Programming Primer[M].Prentice Hall PTR,2000
[6]David Sceppa,David Sceppa.Microsoft ADO.NET(Core Reference)[M].Microsoft Press,2003
[7]Bob Beauchemin.Essential ADO.NET[M].Addison-Wesley Pub Co.,2002
TP392
A
1009-9530(2012)03-0036-03
2011-11-28
淮南師范學院科研項目(2010LK16);安徽省高校省級科學研究項目 (kj2012z371)
[作者簡介]解萍(1979-),女,淮南師范學院電氣信息工程學院講師,主要從事數(shù)據(jù)庫與信號系統(tǒng)研究。