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