Matlab實(shí)時(shí)信號(hào)采集與處理開發(fā)課件_第1頁
Matlab實(shí)時(shí)信號(hào)采集與處理開發(fā)課件_第2頁
Matlab實(shí)時(shí)信號(hào)采集與處理開發(fā)課件_第3頁
Matlab實(shí)時(shí)信號(hào)采集與處理開發(fā)課件_第4頁
Matlab實(shí)時(shí)信號(hào)采集與處理開發(fā)課件_第5頁
已閱讀5頁,還剩139頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

北京理工大學(xué)交通工程系姚國仲

MATLAB數(shù)據(jù)采集和處理軟件開發(fā)北京理工大學(xué)交通工程系MATLAB數(shù)據(jù)采集和處理軟件開發(fā)1學(xué)習(xí)目標(biāo)了解Matlab語言的開發(fā)環(huán)境及開發(fā)方法掌握Matlab語言的基本操作學(xué)習(xí)數(shù)據(jù)采集和數(shù)據(jù)處理的編程思路掌握Matlab的數(shù)據(jù)采集和處理軟件的開發(fā)方法學(xué)習(xí)目標(biāo)了解Matlab語言的開發(fā)環(huán)境及開發(fā)方法2MATLAB的功能用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計(jì)算Matlab可以進(jìn)行矩陣運(yùn)算、繪制函數(shù)和數(shù)據(jù)、實(shí)現(xiàn)算法、創(chuàng)建用戶界面、連接其他編程語言的程序等,主要應(yīng)用于工程計(jì)算、控制設(shè)計(jì)、信號(hào)處理與通訊、圖像處理、信號(hào)檢測、金融建模設(shè)計(jì)與分析等領(lǐng)域。MATLAB的功能用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值3認(rèn)識(shí)一下MATLAB認(rèn)識(shí)一下MATLAB4MATLAB的GUI編程GUI簡介通過向?qū)?chuàng)建GUI界面編寫GUI代碼通過程序創(chuàng)建GUIMATLAB的GUI編程GUI簡介5GUI簡介MATLAB中的GUI程序?yàn)槭录?qū)動(dòng)的程序。事件包括按下按鈕,鼠標(biāo)單擊等。GUI中的每個(gè)控件與用戶定義的語句相關(guān)。當(dāng)在界面上執(zhí)行某項(xiàng)操作時(shí),則開始執(zhí)行相關(guān)的語句。MATLAB提供了兩種創(chuàng)建圖形用戶接口的方法:通過GUI向?qū)?chuàng)建的方法和編程創(chuàng)建GUI的方法。GUI簡介MATLAB中的GUI程序?yàn)槭录?qū)動(dòng)的程序。6GUI控件PushButton:按鈕ToggleButton:開關(guān)按鈕RadioButton:單選按鈕CheckBox:復(fù)選框EditText:文本編輯框Panel:面板GUI控件PushButton:按鈕7Slider:滑動(dòng)條ListBox:列表框Pop-UpMenu:彈出式菜單Axes:坐標(biāo)系ButtonGroup:按鈕組Slider:滑動(dòng)條8GUI界面GUI界面9GUI界面GUI界面10GUI控件功能簡介PushButton:按鈕,當(dāng)按鈕按下時(shí)則產(chǎn)生操作,如按下OK按鈕時(shí)進(jìn)行相應(yīng)操作并關(guān)閉對(duì)話框。ToggleButton:開關(guān)按鈕,該按鈕包含兩個(gè)狀態(tài),第一次按下按鈕時(shí)按鈕狀態(tài)為“開”,再次按下時(shí)將其狀態(tài)改變?yōu)椤瓣P(guān)”。狀態(tài)為“開”時(shí)進(jìn)行相應(yīng)的操作。RadioButton:單選按鈕,用于在一組選項(xiàng)中選擇一個(gè)并且每次只能選擇一個(gè)。用鼠標(biāo)點(diǎn)擊選項(xiàng)即可選中相應(yīng)的選項(xiàng),選擇新的選項(xiàng)時(shí)原來的選項(xiàng)自動(dòng)取消。GUI控件功能簡介PushButton:按鈕,當(dāng)按鈕按下時(shí)11GUI控件功能簡介CheckBox:復(fù)選框,用于同時(shí)選中多個(gè)選項(xiàng)。當(dāng)需要向用戶提供多個(gè)互相獨(dú)立的選項(xiàng)時(shí),可以使用復(fù)選框。EditText:文本編輯框,用戶可以在其中輸入或修改文本字符串。程序以文本輸入時(shí)使用該工具。StaticText:靜態(tài)文本。靜態(tài)文本控制文本行的顯示,用于向用戶顯示程序使用說明、顯示滑動(dòng)條的相關(guān)數(shù)據(jù)等。用戶不能修改靜態(tài)文本的內(nèi)容。GUI控件功能簡介CheckBox:復(fù)選框,用于同時(shí)選中多12GUI控件功能簡介Slider:滑動(dòng)條,通過滑動(dòng)條的方式指定參數(shù)。指定數(shù)據(jù)的方式可以拖動(dòng)滑動(dòng)條、點(diǎn)擊滑動(dòng)槽的空白處,或者點(diǎn)擊按鈕。滑動(dòng)條的位置顯示的為指定數(shù)據(jù)范圍的百分比。ListBox:列表框,列表框顯示選項(xiàng)列表,用戶可以選擇一個(gè)或多個(gè)。Pop-UpMenu:彈出式菜單,當(dāng)用戶點(diǎn)擊箭頭時(shí)彈出選項(xiàng)列表。Axes:坐標(biāo)系,用于在GUI中添加圖形或圖像。GUI控件功能簡介Slider:滑動(dòng)條,通過滑動(dòng)條的方式指定13GUI控件功能簡介Panel:面板,用于將GUI中的控件分組管理和顯示。使用面板將相關(guān)控件分組顯示可以使軟件更易于理解。面板可以包含各種控件,包括按鈕、坐標(biāo)系及其他面板等。面板包含標(biāo)題和邊框等用戶顯示面板的屬性和邊界。面板中的控件與面板之間的位置為相對(duì)位置,當(dāng)移動(dòng)面板時(shí),這些控件在面板中的位置不改變。GUI控件功能簡介Panel:面板,用于將GUI中的控件14GUI控件功能簡介ButtonGroup:按鈕組,按鈕組類似于面板,但是按鈕組的控件只包括單選按鈕或者開關(guān)按鈕。按鈕中的所有控件,其控制代碼必須寫在按鈕組的SelectionChangeFcn響應(yīng)函數(shù)中,而不是用戶接口控制響應(yīng)函數(shù)中。按鈕組會(huì)忽略其中控件的原有屬性。ActiveXComponent:ActiveX控件,用于在GUI中顯示控件,該功能只有在Windows操作系統(tǒng)下可用。GUI控件功能簡介ButtonGroup:按鈕組,按鈕組類15創(chuàng)建GUI應(yīng)用程序創(chuàng)建一個(gè)GUI,實(shí)現(xiàn)三維圖形繪制。 界面中應(yīng)包含一個(gè)繪圖區(qū)域; 一個(gè)面板,其中包含三個(gè)繪圖按鈕,分別實(shí)現(xiàn)表面圖、網(wǎng)格圖和等值線的繪制; 一個(gè)彈出菜單,用以選擇數(shù)據(jù)類型,并且用靜態(tài)文本進(jìn)行說明。其草圖如圖所示。創(chuàng)建GUI應(yīng)用程序創(chuàng)建一個(gè)GUI,實(shí)現(xiàn)三維圖形繪制。16創(chuàng)建GUI應(yīng)用程序點(diǎn)擊工具欄中的GUIDE圖標(biāo),啟動(dòng)GUIDE,系統(tǒng)打開界面如圖所示。選擇新建GUI標(biāo)簽,并選擇新建空的GUI,選中下面的保存選項(xiàng),輸入文件名,得到結(jié)果如圖所示。該窗口中包括菜單欄、控制工具欄、GUI控件面板、GUI編輯區(qū)域等,在GUI編輯區(qū)域右下腳,可以通過鼠標(biāo)拖曳的方式改變GUI界面的大小。創(chuàng)建GUI應(yīng)用程序點(diǎn)擊工具欄中的GUIDE圖標(biāo),啟動(dòng)G17創(chuàng)建GUI應(yīng)用程序向界面中添加按鈕。創(chuàng)建GUI應(yīng)用程序向界面中添加按鈕。18創(chuàng)建GUI應(yīng)用程序?qū)傩跃庉嬈鲃?chuàng)建GUI應(yīng)用程序?qū)傩跃庉嬈?9創(chuàng)建GUI應(yīng)用程序編寫數(shù)據(jù)生成函數(shù)M-fileEditorGUIPlot_OpeningFcn函數(shù)創(chuàng)建GUI應(yīng)用程序編寫數(shù)據(jù)生成函數(shù)20創(chuàng)建GUI應(yīng)用程序該函數(shù)中已有部分內(nèi)容,現(xiàn)在其中添加數(shù)據(jù)生成函數(shù)。添加后該函數(shù)的內(nèi)容為:%---ExecutesjustbeforeGUIPlotismadevisible.functionGUIPlot_OpeningFcn(hObject,eventdata,handles,varargin)%Thisfunctionhasnooutputargs,seeOutputFcn.%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%varargincommandlineargumentstoGUIPlot(seeVARARGIN)%Createthedatatoplot.handles.peaks=peaks(35);handles.membrane=membrane;[x,y]=meshgrid(-8:.5:8);創(chuàng)建GUI應(yīng)用程序該函數(shù)中已有部分內(nèi)容,現(xiàn)在其中添加數(shù)據(jù)生成21創(chuàng)建GUI應(yīng)用程序r=sqrt(x.^2+y.^2)+eps;sinc=sin(r)./r;handles.sinc=sinc;%Setthecurrentdatavalue.handles.current_data=handles.peaks;contour(handles.current_data)%ChoosedefaultcommandlineoutputforGUIPlothandles.output=hObject;%Updatehandlesstructureguidata(hObject,handles);%UIWAITmakesGUIPlotwaitforuserresponse(seeUIRESUME)%uiwait(handles.figure1);該函數(shù)首先生成三組數(shù)據(jù),并設(shè)置初始數(shù)據(jù)為peaks數(shù)據(jù),且初始圖形為等值線。修改該函數(shù)后再次運(yùn)行GUI,得到結(jié)果如圖。創(chuàng)建GUI應(yīng)用程序r=sqrt(x.^2+y.^2)+22創(chuàng)建GUI應(yīng)用程序在GUI編輯器中右鍵點(diǎn)擊相應(yīng)控件,選擇ViewCallbacks中的Callback,系統(tǒng)自動(dòng)打開M文件編輯器,并且光標(biāo)位于相應(yīng)的函數(shù)處其他控件的Callback。創(chuàng)建GUI應(yīng)用程序在GUI編輯器中右鍵點(diǎn)擊相應(yīng)控件,選擇23創(chuàng)建GUI應(yīng)用程序彈出菜單的響應(yīng)函數(shù):%---Executesonselectionchangeindata_pop_up.functiondata_pop_up_Callback(hObject,eventdata,handles)%hObjecthandletodata_pop_up(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%Determinetheselecteddataset.str=get(hObject,'String');val=get(hObject,'Value');%Setcurrentdatatotheselecteddataset.switchstr{val};創(chuàng)建GUI應(yīng)用程序彈出菜單的響應(yīng)函數(shù):24創(chuàng)建GUI應(yīng)用程序case'Peaks'%Userselectspeakshandles.current_data=handles.peaks;case'Membrane'%Userselectsmembranehandles.current_data=handles.membrane;case'Sinc'%Userselectssinchandles.current_data=handles.sinc;end%Savethehandlesstructure.guidata(hObject,handles)%Hints:contents=get(hObject,'String')returnsdata_pop_upcontentsascellarray%contents{get(hObject,'Value')}returnsselecteditemfromdata_pop_up該函數(shù)首先取得彈出菜單的String屬性和Value屬性,后通過分支語句選擇數(shù)據(jù)。創(chuàng)建GUI應(yīng)用程序case'Peaks'%Users25創(chuàng)建GUI應(yīng)用程序三個(gè)按鈕的響應(yīng)函數(shù)分別為:functionbtnSurf_Callback(hObject,eventdata,handles)surf(handles.current_data);functionbtnMesh_Callback(hObject,eventdata,handles)mesh(handles.current_data);創(chuàng)建GUI應(yīng)用程序三個(gè)按鈕的響應(yīng)函數(shù)分別為:26創(chuàng)建GUI應(yīng)用程序functionbtnContour_Callback(hObject,eventdata,handles)contour(handles.current_data);創(chuàng)建GUI應(yīng)用程序functionbtnContour_C27創(chuàng)建GUI應(yīng)用程序創(chuàng)建GUI應(yīng)用程序28GUI代碼說明在創(chuàng)建GUI界面后,需要為界面中的控件編寫響應(yīng)函數(shù),這些函數(shù)決定當(dāng)事件發(fā)生時(shí)的具體操作。通常情況下,GUI包含兩個(gè)文件:FIG文件和M文件。FIG文件的擴(kuò)展名為.fig,是一種MATLAB文件,其中包含GUI的布局及其中包含的所有控件的相關(guān)信息。FIG文件為二進(jìn)制文件,只能通過GUI向?qū)нM(jìn)行修改。內(nèi)容描述注釋程序注釋。當(dāng)在命令行調(diào)用help時(shí)顯示初始化代碼GUI向?qū)У某跏既蝿?wù)。Opening函數(shù)在用戶訪問GUI之前進(jìn)行初始化任務(wù)Output函數(shù)在控制權(quán)由Opening函數(shù)向命令行轉(zhuǎn)移過程中向命令行返回輸出結(jié)果響應(yīng)函數(shù)這些函數(shù)決定控件的操作的結(jié)果。GUI為事件驅(qū)動(dòng)的程序,當(dāng)事件發(fā)生時(shí),系統(tǒng)調(diào)用相應(yīng)的函數(shù)進(jìn)行執(zhí)行GUI代碼說明在創(chuàng)建GUI界面后,需要為界面中的控件編寫29GUI代碼說明M文件擴(kuò)展名為.m,其中包含GUI的初始代碼及相關(guān)響應(yīng)函數(shù)的模板。用戶需要在該文件中添加響應(yīng)函數(shù)的具體內(nèi)容。M文件通常包含一個(gè)與文件同名的主函數(shù),各個(gè)控件對(duì)應(yīng)的響應(yīng)函數(shù),這些響應(yīng)函數(shù)為主函數(shù)的子函數(shù)。其內(nèi)容如表所示。內(nèi)容描述注釋程序注釋。當(dāng)在命令行調(diào)用help時(shí)顯示初始化代碼GUI向?qū)У某跏既蝿?wù)。Opening函數(shù)在用戶訪問GUI之前進(jìn)行初始化任務(wù)Output函數(shù)在控制權(quán)由Opening函數(shù)向命令行轉(zhuǎn)移過程中向命令行返回輸出結(jié)果響應(yīng)函數(shù)這些函數(shù)決定控件的操作的結(jié)果。GUI為事件驅(qū)動(dòng)的程序,當(dāng)事件發(fā)生時(shí),系統(tǒng)調(diào)用相應(yīng)的函數(shù)進(jìn)行執(zhí)行GUI代碼說明M文件擴(kuò)展名為.m,其中包含GUI的初30GUI代碼說明響應(yīng)函數(shù)屬性觸發(fā)事件可用控件ButtonDownFcn用戶在其對(duì)應(yīng)控件5個(gè)象素范圍內(nèi)按下鼠標(biāo)坐標(biāo)系、圖形、按鈕組、面板、用戶接口控件Callback控制操作,用戶按下按鈕或選中一個(gè)菜單項(xiàng)右鍵菜單、菜單、用戶接口控件CloseRequestFcn關(guān)閉圖形時(shí)執(zhí)行圖形CreateFcn創(chuàng)建控件時(shí)初始化控件,初始化后顯示該控件坐標(biāo)系、圖形、按鈕組、右鍵菜單、菜單、面板、用戶接口控件DeleteFcn在控件圖形關(guān)閉前清除該對(duì)象坐標(biāo)系、圖形、按鈕組、右鍵菜單、菜單、面板、用戶接口控件KeyPressFcn用戶按下控件或圖形對(duì)應(yīng)的鍵盤圖形、用戶接口控件ResizeFcn用戶改變面板、按鈕組或圖形的大小,這些控件的Resize屬性需處于On狀態(tài)按鈕組、面板、圖形SelectionChangeFcn用戶在一個(gè)按鈕組內(nèi)部選擇不同的按鈕,或改變開關(guān)按鈕的狀態(tài)按鈕組WindowButtonDownFcn在圖形窗口內(nèi)部按下鼠標(biāo)圖形WindowButtonMotionFcn在圖形窗口內(nèi)部移動(dòng)鼠標(biāo)圖形WindowButtonUpFcn松開鼠標(biāo)按鈕圖形GUI代碼說明響應(yīng)函數(shù)屬性觸發(fā)事件可用控件ButtonDow31GUI代碼說明一個(gè)GUI中包含多個(gè)控件,GUIDE中提供了一種方法,用于指定每個(gè)控件所對(duì)應(yīng)的響應(yīng)函數(shù)。GUIDE通過每個(gè)控件的響應(yīng)屬性將控件與對(duì)應(yīng)的響應(yīng)函數(shù)相關(guān)聯(lián)。在默認(rèn)情況下,GUIDE將每個(gè)控件的最常用的響應(yīng)屬性設(shè)置為%automatic,如圖所示。如每個(gè)按鈕有五個(gè)響應(yīng)屬性,ButtonDownFcn、Callback、CreateFcn、DeleteFcn和KeyPressFcn,GUIDE將其Callback屬性設(shè)置為%automatic。用戶可以通過屬性編輯器將其他響應(yīng)屬性設(shè)置為%automatic。GUI代碼說明一個(gè)GUI中包含多個(gè)控件,GUIDE中提32GUI代碼說明當(dāng)再次保存GUI時(shí),GUIDE將%automatic替換為響應(yīng)函數(shù)的名稱,該函數(shù)的名稱由該控件Tag屬性及響應(yīng)函數(shù)的名稱組成,如圖所示。其中two_axes是該GUI的名稱,同時(shí)是該GUI主調(diào)函數(shù)的名稱。其他參數(shù)為plotpushbutton_Callback函數(shù)的輸入?yún)?shù),其意義分別為:gcbo:用于返回響應(yīng)對(duì)象的句柄;[]:用于存放事件數(shù)據(jù);guidata(gcbo):返回該GUI的句柄結(jié)構(gòu)體。GUI代碼說明當(dāng)再次保存GUI時(shí),GUIDE將%au33GUI代碼說明響應(yīng)函數(shù)的語法與參數(shù)MATLAB中對(duì)響應(yīng)函數(shù)的語法和參數(shù)有一些約定,在GUI向?qū)?chuàng)建響應(yīng)函數(shù)并寫入M文件時(shí)便遵守這些約定。如下面為按鈕的響應(yīng)函數(shù)模板:%---Executesonbuttonpressinpushbutton1.functionpushbutton1_Callback(hObject,eventdata,handles)%#ok%hObjecthandletopushbutton1(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)用戶可以在這里輸入函數(shù)的其他內(nèi)容說明該函數(shù)的觸發(fā)事件函數(shù)定義行對(duì)輸入?yún)?shù)進(jìn)行說明GUI代碼說明響應(yīng)函數(shù)的語法與參數(shù)說明該函數(shù)的觸發(fā)事件函數(shù)定34GUI代碼說明初始化響應(yīng)函數(shù)GUI的初始化函數(shù)包括Opening函數(shù)和Output函數(shù)。在每個(gè)GUIM文件中opening函數(shù)是第一個(gè)調(diào)用的函數(shù)。該函數(shù)在所有控件創(chuàng)建完成后,GUI顯示之前運(yùn)行。用戶可以通過opening函數(shù)設(shè)置程序的初始任務(wù),如創(chuàng)建數(shù)據(jù)、讀入數(shù)據(jù)等。通常opening函數(shù)的名稱為“M文件名+_OpeningFcn”,如下面的初始模板:GUI代碼說明初始化響應(yīng)函數(shù)35GUI代碼說明%---Executesjustbeforemyguiismadevisible.functionmygui_OpeningFcn(hObject,eventdata,handles,varargin)%Thisfunctionhasnooutputargs,seeOutputFcn.%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%varargincommandlineargumentstomygui(seeVARARGIN)

%Choosedefaultcommandlineoutputformyguihandles.output=hObject;

%Updatehandlesstructureguidata(hObject,handles);

%UIWAITmakesmyguiwaitforuserresponse(seeUIRESUME)%uiwait(handles.mygui);GUI代碼說明%---Executesjustbef36GUI代碼說明其中文件名為mygui,函數(shù)名為mygui_OpeningFcn。該函數(shù)包含四個(gè)參數(shù),第四個(gè)參數(shù)varargin允許用戶通過命令行向opening函數(shù)傳遞參數(shù)。opening函數(shù)將這些參數(shù)添加到結(jié)構(gòu)體handles中,供響應(yīng)函數(shù)調(diào)用。該函數(shù)中包含三行語句,如下。handles.output=hObject,向結(jié)構(gòu)體handles中添加新元素output,并將其值賦為輸入?yún)?shù)hObject,即GUI的句柄。該句柄供output函數(shù)調(diào)用。guidata(hObject,handles),保存handles。用戶必須通過guidata保存結(jié)構(gòu)體handles的任何改變。uiwait(handles.mygui),在初始情況下,該語句并不執(zhí)行。該語句用于中斷GUI執(zhí)行等待用戶反應(yīng)或GUI被刪除。如果需要該語句運(yùn)行,刪除前面的“%”即可。GUI代碼說明其中文件名為mygui,函數(shù)名為mygui37GUI代碼說明output函數(shù)用于向命令行返回GUI運(yùn)行過程中產(chǎn)生的輸出結(jié)果。該函數(shù)在opening函數(shù)返回控制權(quán)和控制權(quán)返回至命令行之間運(yùn)行。因此,輸出參數(shù)必須在opening函數(shù)中生成,或者在opening函數(shù)中調(diào)用uiwait函數(shù)中斷output的執(zhí)行,等待其他響應(yīng)函數(shù)生成輸出參數(shù)。GUI代碼說明output函數(shù)用于向命令行返回GUI運(yùn)38數(shù)據(jù)采集軟件開發(fā)數(shù)據(jù)采集簡介數(shù)據(jù)采集軟件開發(fā)流程數(shù)據(jù)采集軟件例程數(shù)據(jù)采集軟件開發(fā)數(shù)據(jù)采集簡介39二、數(shù)據(jù)采集軟件開發(fā)數(shù)據(jù)采集簡介數(shù)據(jù)采集軟件開發(fā)流程數(shù)據(jù)采集軟件例程二、數(shù)據(jù)采集軟件開發(fā)數(shù)據(jù)采集簡介40數(shù)據(jù)采集軟件開發(fā)數(shù)據(jù)采集器RBH8305數(shù)據(jù)采集軟件開發(fā)數(shù)據(jù)采集器RBH830541數(shù)據(jù)采集軟件開發(fā)程序主要文件數(shù)據(jù)采集軟件開發(fā)程序主要文件42數(shù)據(jù)采集軟件開發(fā)程序主要文件第一類:北京瑞博華公司提供的接口程序:ADCARD.H:這是瑞博華公司專為Matlab提供的頭文件,通過該文件,就可以實(shí)現(xiàn)對(duì)瑞博華公司提供的函數(shù)庫進(jìn)行操作。第二類:設(shè)計(jì)文件:r8271.fig:用戶界面文件,實(shí)現(xiàn)主要功能r8271.m:應(yīng)用軟件源程序,實(shí)現(xiàn)主要功能r8271.asv:程序運(yùn)行時(shí)的文件第三類:說明文件:說明.txt:該文件記錄軟件的基本情況數(shù)據(jù)采集軟件開發(fā)程序主要文件43數(shù)據(jù)采集軟件開發(fā)軟件開發(fā)流程開發(fā)本軟件的關(guān)鍵是在程序中調(diào)用瑞博華公司提供的DLL文件,然后就可以如同正常的Matlab軟件的開發(fā)。在matlab中利用動(dòng)態(tài)鏈接庫接口技術(shù)通常需要完成以下4個(gè)步驟:1、打開動(dòng)態(tài)鏈接庫文件。2、為調(diào)用函數(shù)準(zhǔn)備數(shù)據(jù)。3、調(diào)用動(dòng)態(tài)鏈接庫文件中導(dǎo)出的函數(shù)。4、關(guān)閉動(dòng)態(tài)鏈接庫文件。數(shù)據(jù)采集軟件開發(fā)軟件開發(fā)流程44數(shù)據(jù)采集軟件開發(fā)打開動(dòng)態(tài)鏈接庫函數(shù):Loadlibrary(‘mydll’,‘hfile’);其中mydll是字符串變量,代表所要使用的DLL文件的名稱。hfile也是字符串變量,代表包含該DLL文件中所導(dǎo)出的函數(shù)定義的頭文件名。hfile包含以C語言定義的函數(shù)特征,對(duì)于本來就是以C/C++開發(fā)的DLL文件,可以直接使用原來的頭文件。對(duì)于其他語言開發(fā)的DLL文件,需要手工編寫相應(yīng)的C語言頭文件。數(shù)據(jù)采集軟件開發(fā)打開動(dòng)態(tài)鏈接庫函數(shù):45數(shù)據(jù)采集軟件開發(fā)調(diào)用動(dòng)態(tài)鏈接庫文件中導(dǎo)出的函數(shù):Calllib(’libname’,‘funcname’,arg1,arg2,…..argN)其中l(wèi)ibname是字符串變量,表示載入的DLL文件,它通常是載入的DLL文件名;funcname也是字符串變量,代表需要調(diào)用的函數(shù)名;arg1,arg2….argN則是調(diào)用函數(shù)funcname所需要的所有參數(shù)。數(shù)據(jù)采集軟件開發(fā)調(diào)用動(dòng)態(tài)鏈接庫文件中導(dǎo)出的函數(shù):46數(shù)據(jù)采集軟件開發(fā)動(dòng)態(tài)鏈接庫文件的卸載:Unloadlibrary(’libname’);其中l(wèi)ibname為字符串變量,表示要卸載的DLL文件。數(shù)據(jù)采集軟件開發(fā)動(dòng)態(tài)鏈接庫文件的卸載:47數(shù)據(jù)采集軟件開發(fā)Adcard動(dòng)態(tài)鏈接庫中所包含的函數(shù)名稱、返回值類型以及參數(shù)類型數(shù)據(jù)采集軟件開發(fā)Adcard動(dòng)態(tài)鏈接庫中所包含的函數(shù)名稱、返48數(shù)據(jù)采集軟件開發(fā)實(shí)例說明數(shù)據(jù)采集軟件開發(fā)實(shí)例說明49數(shù)據(jù)采集軟件開發(fā)實(shí)例說明 紅色區(qū)域同時(shí)顯示各個(gè)通道的電壓值,本例程以4個(gè)通道為例。 綠色區(qū)域顯示當(dāng)前采集的數(shù)據(jù)塊數(shù)。該數(shù)據(jù)不應(yīng)該達(dá)到用戶軟件設(shè)定的內(nèi)存緩沖區(qū)數(shù),如果達(dá)到了用戶設(shè)定的緩沖區(qū)數(shù),表明可能產(chǎn)生數(shù)據(jù)丟失,解決的方法是增加內(nèi)存緩沖區(qū)塊數(shù)NumBuf這個(gè)變量的值,或增大NumSamp這個(gè)參數(shù)。數(shù)據(jù)采集軟件開發(fā)實(shí)例說明50數(shù)據(jù)采集軟件開發(fā)實(shí)例說明 黃色區(qū)域表示保存數(shù)據(jù)功能,在用戶采集過程中,當(dāng)選中這個(gè)選項(xiàng)時(shí),可以自動(dòng)將采集到的數(shù)據(jù)保存在文件當(dāng)中,文件名以日期時(shí)間默認(rèn)命名,用戶可以在保存后自行修改。 五個(gè)按鈕分別代表開始采集、停止采集、關(guān)閉程序、讀取保存的數(shù)據(jù)以及配置信息。該例程的一個(gè)功能就是可以保存、讀取數(shù)據(jù),方便用戶記錄。數(shù)據(jù)采集軟件開發(fā)實(shí)例說明51數(shù)據(jù)采集軟件開發(fā)實(shí)例說明 波形的曲線顯示,將采集到的AD值以波形的方式表現(xiàn)出來,直觀而且容易理解。 Matlab具有強(qiáng)大的畫圖的功能,在示例的開發(fā)中利用圖形功能可以很形象地表現(xiàn)采集的數(shù)值。數(shù)據(jù)采集軟件開發(fā)實(shí)例說明52數(shù)據(jù)采集軟件開發(fā)實(shí)例說明 配置信息對(duì)話框,可以在停止采集后打開此對(duì)話框?qū)Σ杉绦蜻M(jìn)行信息配置,主要包括所用采集卡的AD位數(shù),作用采集卡的通道數(shù),在主界面畫圖的通道號(hào)以及采樣頻率。配置信息對(duì)話框數(shù)據(jù)采集軟件開發(fā)實(shí)例說明配置信息對(duì)話框53數(shù)據(jù)采集軟件開發(fā)實(shí)例說明數(shù)組與變量的定義globalNumBufglobalNumSampglobalbegchnglobalNumChnglobalFrqSampglobalFrqFilterglobalAmpGain 其中,NumBuf為緩沖區(qū)個(gè)數(shù),NumSamp為每個(gè)緩沖區(qū)采樣點(diǎn)數(shù),一個(gè)采樣點(diǎn)是指所有的通道采樣一次,begchn為起始通道,NumChn為通道數(shù),F(xiàn)rqSamp為采樣頻率,F(xiàn)rqFilter為濾波器頻率,AmpGain為放大器增益,本程序借用這個(gè)產(chǎn)生控制采集模式,當(dāng)該參數(shù)=0時(shí),表示AD結(jié)果為未校準(zhǔn)結(jié)果,否則為校準(zhǔn)結(jié)果.正常使用時(shí)應(yīng)該為1。數(shù)據(jù)采集軟件開發(fā)實(shí)例說明54數(shù)據(jù)采集軟件開發(fā)實(shí)例說明數(shù)組與變量的定義定義數(shù)據(jù)緩沖區(qū),handles.lp為指向緩沖區(qū)數(shù)組的指針。handles.ADBuf=1:6000;shortdata=uint16(handles.ADBuf);handles.lp=libpointer('uint16Ptr',shortdata);數(shù)據(jù)采集軟件開發(fā)實(shí)例說明55數(shù)據(jù)采集軟件開發(fā)實(shí)例說明調(diào)用adcard.dllh=['F:\ProgramFiles\MATLAB\R2007b\work\adcard.h'];%頭文件所在的地址loadlibrary('adcard',h);%調(diào)用adcard.dll,將dll文件包含到程序中。數(shù)據(jù)采集軟件開發(fā)實(shí)例說明56數(shù)據(jù)采集軟件開發(fā)實(shí)例說明定義定時(shí)器由于Matlab的gui編程組件中沒有現(xiàn)成的定時(shí)器空間,所以在使用定時(shí)器之前要先定義定時(shí)器。handles.timer=timer('Period',0.2,'ExecutionMode','FixedRate','TimerFcn',{@Msgupdate,handles});handles.timer1=timer('Period',0.2,'ExecutionMode','FixedRate','TimerFcn',{@Draw,handles});這兩個(gè)定時(shí)器一個(gè)負(fù)責(zé)采集數(shù)據(jù)的讀取,第二個(gè)負(fù)責(zé)讀取已存數(shù)據(jù)時(shí)的畫圖。數(shù)據(jù)采集軟件開發(fā)實(shí)例說明57數(shù)據(jù)采集軟件開發(fā)實(shí)例說明定時(shí)器程序定時(shí)器程序是高速連續(xù)采集的關(guān)鍵程序。ChnNum=2;%要畫在面板上的通道號(hào)shortdata=1:6000;%定義臨時(shí)緩沖區(qū)shortdata(1:6000)=0;NumFill=calllib('adcard','QueryBuf');%填充滿的緩沖區(qū)數(shù)數(shù)據(jù)采集軟件開發(fā)實(shí)例說明58數(shù)據(jù)采集軟件開發(fā)實(shí)例說明定時(shí)器程序j=calllib('adcard','ADResult',handles.lp);%獲得采集數(shù)據(jù)shortdata=get(handles.lp,'value');%將采集數(shù)據(jù)放入臨時(shí)數(shù)組中RecordBuf(1:NumSamp*NumChn)=shortdata(1:NumSamp*NumChn);%將采集數(shù)據(jù)放入大緩沖區(qū)數(shù)組RecordPtr=RecordPtr+NumSamp*NumChn;%數(shù)據(jù)指針ifRecordPtr>=RecordBlock*NumSamp*NumChnRecordPtr=0;end數(shù)據(jù)采集軟件開發(fā)實(shí)例說明59數(shù)據(jù)采集軟件開發(fā)實(shí)例說明畫圖fori=1:NumSampDrawBuf(i)=RecordBuf(1+NumChn*(i-1)+ChnNum);%ChnNum是要畫的通道號(hào)DrawBuf(i)=(DrawBuf(i)-VZero)/VMax*SpainV;iffFlag==1count=fwrite(fid,DrawBuf(i),'double');endend %將數(shù)據(jù)畫在面板上plot(DrawBuf(901:1000));axis([0100-55]);gridon數(shù)據(jù)采集軟件開發(fā)實(shí)例說明60數(shù)據(jù)采集軟件開發(fā)實(shí)例說明開始采集的命令calllib('adcard','StopIntr');%先停止采集卡i=calllib('adcard','Initial',0,0,0,0);%初始化采集卡ifi~=1return;end%開始采集i=calllib('adcard','StartIntr',NumBuf,NumSamp,begchn,NumChn,FrqSamp,FrqFilter,AmpGain);start(handles.timer);%開啟定時(shí)器數(shù)據(jù)采集軟件開發(fā)實(shí)例說明61數(shù)據(jù)采集軟件開發(fā)實(shí)例說明停止采集的命令set(handles.StopButton,'enable','off');i=calllib('adcard','StopIntr');%停止采集卡ifi~=1return;endstop(handles.timer);%關(guān)閉定時(shí)器數(shù)據(jù)采集軟件開發(fā)實(shí)例說明62注意事項(xiàng)1、采用Matlab編程時(shí),一定要先調(diào)用adcard.dll文件,結(jié)束程序時(shí),要卸載adcard.dll文件。2、配置參數(shù)NumBuf,NumSamp時(shí),要考慮采樣頻率FrqSamp,當(dāng)FrqSamp很大時(shí),NumSamp就應(yīng)該增大,當(dāng)FrqSamp很小時(shí),NumSamp就應(yīng)該變小。NumBuf的要求是每次定時(shí)器讀取得到的緩沖區(qū)數(shù)要小于NumBuf,并且還有一定的余量。注意事項(xiàng)63MATLAB數(shù)據(jù)處理軟件1、從數(shù)據(jù)采集軟件將數(shù)據(jù)寫入WorkSpaceq=DrawBuf(901:1000);WaveSampNum=DrawBuf(1:1000);d=linspace(0,100/20000,100);e=[d;q];

assignin('base','Signal2Workspace',e); %D′2workspaceMATLAB數(shù)據(jù)處理軟件1、從數(shù)據(jù)采集軟件將數(shù)據(jù)寫入Work64MATLAB數(shù)據(jù)處理軟件2、加噪處理MATLAB數(shù)據(jù)處理軟件2、加噪處理65MATLAB數(shù)據(jù)處理軟件3加噪信號(hào)輸出到WorkSpaceMATLAB數(shù)據(jù)處理軟件3加噪信號(hào)輸出到WorkSpace66MATLAB數(shù)據(jù)處理軟件MATLAB數(shù)據(jù)處理軟件67MATLAB數(shù)據(jù)處理軟件信號(hào)情況MATLAB數(shù)據(jù)處理軟件信號(hào)情況68MATLAB數(shù)據(jù)處理軟件4、讀取加噪信號(hào)、進(jìn)行處理functionWavePro(obj,events,handles)globalWaveSampNum;[c,l]=wavedec(WaveSampNum(1:1000),5,'db2');x=wrcoef('a',c,l,'db2',1);plot(handles.plot2,x);axis(handles.plot2,[0200-55]);sim('Signal2Wave');wavelet(ScopeData(:,2))MATLAB數(shù)據(jù)處理軟件4、讀取加噪信號(hào)、進(jìn)行處理69MATLAB數(shù)據(jù)處理軟件functiony=wavelet(u)globalFlagF;FlagF=0;[c,l]=wavedec(u,5,'db8');x=wrcoef('a',c,l,'db8',5);if(FlagF==0)figure(1);FlagF=1;endplot(x);axis([0500-55]);MATLAB數(shù)據(jù)處理軟件functiony=wavelet70MATLAB數(shù)據(jù)處理軟件信號(hào)沒有加噪的處理MATLAB數(shù)據(jù)處理軟件信號(hào)沒有加噪的處理71謝謝!謝謝!72北京理工大學(xué)交通工程系姚國仲

MATLAB數(shù)據(jù)采集和處理軟件開發(fā)北京理工大學(xué)交通工程系MATLAB數(shù)據(jù)采集和處理軟件開發(fā)73學(xué)習(xí)目標(biāo)了解Matlab語言的開發(fā)環(huán)境及開發(fā)方法掌握Matlab語言的基本操作學(xué)習(xí)數(shù)據(jù)采集和數(shù)據(jù)處理的編程思路掌握Matlab的數(shù)據(jù)采集和處理軟件的開發(fā)方法學(xué)習(xí)目標(biāo)了解Matlab語言的開發(fā)環(huán)境及開發(fā)方法74MATLAB的功能用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計(jì)算Matlab可以進(jìn)行矩陣運(yùn)算、繪制函數(shù)和數(shù)據(jù)、實(shí)現(xiàn)算法、創(chuàng)建用戶界面、連接其他編程語言的程序等,主要應(yīng)用于工程計(jì)算、控制設(shè)計(jì)、信號(hào)處理與通訊、圖像處理、信號(hào)檢測、金融建模設(shè)計(jì)與分析等領(lǐng)域。MATLAB的功能用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值75認(rèn)識(shí)一下MATLAB認(rèn)識(shí)一下MATLAB76MATLAB的GUI編程GUI簡介通過向?qū)?chuàng)建GUI界面編寫GUI代碼通過程序創(chuàng)建GUIMATLAB的GUI編程GUI簡介77GUI簡介MATLAB中的GUI程序?yàn)槭录?qū)動(dòng)的程序。事件包括按下按鈕,鼠標(biāo)單擊等。GUI中的每個(gè)控件與用戶定義的語句相關(guān)。當(dāng)在界面上執(zhí)行某項(xiàng)操作時(shí),則開始執(zhí)行相關(guān)的語句。MATLAB提供了兩種創(chuàng)建圖形用戶接口的方法:通過GUI向?qū)?chuàng)建的方法和編程創(chuàng)建GUI的方法。GUI簡介MATLAB中的GUI程序?yàn)槭录?qū)動(dòng)的程序。78GUI控件PushButton:按鈕ToggleButton:開關(guān)按鈕RadioButton:單選按鈕CheckBox:復(fù)選框EditText:文本編輯框Panel:面板GUI控件PushButton:按鈕79Slider:滑動(dòng)條ListBox:列表框Pop-UpMenu:彈出式菜單Axes:坐標(biāo)系ButtonGroup:按鈕組Slider:滑動(dòng)條80GUI界面GUI界面81GUI界面GUI界面82GUI控件功能簡介PushButton:按鈕,當(dāng)按鈕按下時(shí)則產(chǎn)生操作,如按下OK按鈕時(shí)進(jìn)行相應(yīng)操作并關(guān)閉對(duì)話框。ToggleButton:開關(guān)按鈕,該按鈕包含兩個(gè)狀態(tài),第一次按下按鈕時(shí)按鈕狀態(tài)為“開”,再次按下時(shí)將其狀態(tài)改變?yōu)椤瓣P(guān)”。狀態(tài)為“開”時(shí)進(jìn)行相應(yīng)的操作。RadioButton:單選按鈕,用于在一組選項(xiàng)中選擇一個(gè)并且每次只能選擇一個(gè)。用鼠標(biāo)點(diǎn)擊選項(xiàng)即可選中相應(yīng)的選項(xiàng),選擇新的選項(xiàng)時(shí)原來的選項(xiàng)自動(dòng)取消。GUI控件功能簡介PushButton:按鈕,當(dāng)按鈕按下時(shí)83GUI控件功能簡介CheckBox:復(fù)選框,用于同時(shí)選中多個(gè)選項(xiàng)。當(dāng)需要向用戶提供多個(gè)互相獨(dú)立的選項(xiàng)時(shí),可以使用復(fù)選框。EditText:文本編輯框,用戶可以在其中輸入或修改文本字符串。程序以文本輸入時(shí)使用該工具。StaticText:靜態(tài)文本。靜態(tài)文本控制文本行的顯示,用于向用戶顯示程序使用說明、顯示滑動(dòng)條的相關(guān)數(shù)據(jù)等。用戶不能修改靜態(tài)文本的內(nèi)容。GUI控件功能簡介CheckBox:復(fù)選框,用于同時(shí)選中多84GUI控件功能簡介Slider:滑動(dòng)條,通過滑動(dòng)條的方式指定參數(shù)。指定數(shù)據(jù)的方式可以拖動(dòng)滑動(dòng)條、點(diǎn)擊滑動(dòng)槽的空白處,或者點(diǎn)擊按鈕?;瑒?dòng)條的位置顯示的為指定數(shù)據(jù)范圍的百分比。ListBox:列表框,列表框顯示選項(xiàng)列表,用戶可以選擇一個(gè)或多個(gè)。Pop-UpMenu:彈出式菜單,當(dāng)用戶點(diǎn)擊箭頭時(shí)彈出選項(xiàng)列表。Axes:坐標(biāo)系,用于在GUI中添加圖形或圖像。GUI控件功能簡介Slider:滑動(dòng)條,通過滑動(dòng)條的方式指定85GUI控件功能簡介Panel:面板,用于將GUI中的控件分組管理和顯示。使用面板將相關(guān)控件分組顯示可以使軟件更易于理解。面板可以包含各種控件,包括按鈕、坐標(biāo)系及其他面板等。面板包含標(biāo)題和邊框等用戶顯示面板的屬性和邊界。面板中的控件與面板之間的位置為相對(duì)位置,當(dāng)移動(dòng)面板時(shí),這些控件在面板中的位置不改變。GUI控件功能簡介Panel:面板,用于將GUI中的控件86GUI控件功能簡介ButtonGroup:按鈕組,按鈕組類似于面板,但是按鈕組的控件只包括單選按鈕或者開關(guān)按鈕。按鈕中的所有控件,其控制代碼必須寫在按鈕組的SelectionChangeFcn響應(yīng)函數(shù)中,而不是用戶接口控制響應(yīng)函數(shù)中。按鈕組會(huì)忽略其中控件的原有屬性。ActiveXComponent:ActiveX控件,用于在GUI中顯示控件,該功能只有在Windows操作系統(tǒng)下可用。GUI控件功能簡介ButtonGroup:按鈕組,按鈕組類87創(chuàng)建GUI應(yīng)用程序創(chuàng)建一個(gè)GUI,實(shí)現(xiàn)三維圖形繪制。 界面中應(yīng)包含一個(gè)繪圖區(qū)域; 一個(gè)面板,其中包含三個(gè)繪圖按鈕,分別實(shí)現(xiàn)表面圖、網(wǎng)格圖和等值線的繪制; 一個(gè)彈出菜單,用以選擇數(shù)據(jù)類型,并且用靜態(tài)文本進(jìn)行說明。其草圖如圖所示。創(chuàng)建GUI應(yīng)用程序創(chuàng)建一個(gè)GUI,實(shí)現(xiàn)三維圖形繪制。88創(chuàng)建GUI應(yīng)用程序點(diǎn)擊工具欄中的GUIDE圖標(biāo),啟動(dòng)GUIDE,系統(tǒng)打開界面如圖所示。選擇新建GUI標(biāo)簽,并選擇新建空的GUI,選中下面的保存選項(xiàng),輸入文件名,得到結(jié)果如圖所示。該窗口中包括菜單欄、控制工具欄、GUI控件面板、GUI編輯區(qū)域等,在GUI編輯區(qū)域右下腳,可以通過鼠標(biāo)拖曳的方式改變GUI界面的大小。創(chuàng)建GUI應(yīng)用程序點(diǎn)擊工具欄中的GUIDE圖標(biāo),啟動(dòng)G89創(chuàng)建GUI應(yīng)用程序向界面中添加按鈕。創(chuàng)建GUI應(yīng)用程序向界面中添加按鈕。90創(chuàng)建GUI應(yīng)用程序?qū)傩跃庉嬈鲃?chuàng)建GUI應(yīng)用程序?qū)傩跃庉嬈?1創(chuàng)建GUI應(yīng)用程序編寫數(shù)據(jù)生成函數(shù)M-fileEditorGUIPlot_OpeningFcn函數(shù)創(chuàng)建GUI應(yīng)用程序編寫數(shù)據(jù)生成函數(shù)92創(chuàng)建GUI應(yīng)用程序該函數(shù)中已有部分內(nèi)容,現(xiàn)在其中添加數(shù)據(jù)生成函數(shù)。添加后該函數(shù)的內(nèi)容為:%---ExecutesjustbeforeGUIPlotismadevisible.functionGUIPlot_OpeningFcn(hObject,eventdata,handles,varargin)%Thisfunctionhasnooutputargs,seeOutputFcn.%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%varargincommandlineargumentstoGUIPlot(seeVARARGIN)%Createthedatatoplot.handles.peaks=peaks(35);handles.membrane=membrane;[x,y]=meshgrid(-8:.5:8);創(chuàng)建GUI應(yīng)用程序該函數(shù)中已有部分內(nèi)容,現(xiàn)在其中添加數(shù)據(jù)生成93創(chuàng)建GUI應(yīng)用程序r=sqrt(x.^2+y.^2)+eps;sinc=sin(r)./r;handles.sinc=sinc;%Setthecurrentdatavalue.handles.current_data=handles.peaks;contour(handles.current_data)%ChoosedefaultcommandlineoutputforGUIPlothandles.output=hObject;%Updatehandlesstructureguidata(hObject,handles);%UIWAITmakesGUIPlotwaitforuserresponse(seeUIRESUME)%uiwait(handles.figure1);該函數(shù)首先生成三組數(shù)據(jù),并設(shè)置初始數(shù)據(jù)為peaks數(shù)據(jù),且初始圖形為等值線。修改該函數(shù)后再次運(yùn)行GUI,得到結(jié)果如圖。創(chuàng)建GUI應(yīng)用程序r=sqrt(x.^2+y.^2)+94創(chuàng)建GUI應(yīng)用程序在GUI編輯器中右鍵點(diǎn)擊相應(yīng)控件,選擇ViewCallbacks中的Callback,系統(tǒng)自動(dòng)打開M文件編輯器,并且光標(biāo)位于相應(yīng)的函數(shù)處其他控件的Callback。創(chuàng)建GUI應(yīng)用程序在GUI編輯器中右鍵點(diǎn)擊相應(yīng)控件,選擇95創(chuàng)建GUI應(yīng)用程序彈出菜單的響應(yīng)函數(shù):%---Executesonselectionchangeindata_pop_up.functiondata_pop_up_Callback(hObject,eventdata,handles)%hObjecthandletodata_pop_up(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%Determinetheselecteddataset.str=get(hObject,'String');val=get(hObject,'Value');%Setcurrentdatatotheselecteddataset.switchstr{val};創(chuàng)建GUI應(yīng)用程序彈出菜單的響應(yīng)函數(shù):96創(chuàng)建GUI應(yīng)用程序case'Peaks'%Userselectspeakshandles.current_data=handles.peaks;case'Membrane'%Userselectsmembranehandles.current_data=handles.membrane;case'Sinc'%Userselectssinchandles.current_data=handles.sinc;end%Savethehandlesstructure.guidata(hObject,handles)%Hints:contents=get(hObject,'String')returnsdata_pop_upcontentsascellarray%contents{get(hObject,'Value')}returnsselecteditemfromdata_pop_up該函數(shù)首先取得彈出菜單的String屬性和Value屬性,后通過分支語句選擇數(shù)據(jù)。創(chuàng)建GUI應(yīng)用程序case'Peaks'%Users97創(chuàng)建GUI應(yīng)用程序三個(gè)按鈕的響應(yīng)函數(shù)分別為:functionbtnSurf_Callback(hObject,eventdata,handles)surf(handles.current_data);functionbtnMesh_Callback(hObject,eventdata,handles)mesh(handles.current_data);創(chuàng)建GUI應(yīng)用程序三個(gè)按鈕的響應(yīng)函數(shù)分別為:98創(chuàng)建GUI應(yīng)用程序functionbtnContour_Callback(hObject,eventdata,handles)contour(handles.current_data);創(chuàng)建GUI應(yīng)用程序functionbtnContour_C99創(chuàng)建GUI應(yīng)用程序創(chuàng)建GUI應(yīng)用程序100GUI代碼說明在創(chuàng)建GUI界面后,需要為界面中的控件編寫響應(yīng)函數(shù),這些函數(shù)決定當(dāng)事件發(fā)生時(shí)的具體操作。通常情況下,GUI包含兩個(gè)文件:FIG文件和M文件。FIG文件的擴(kuò)展名為.fig,是一種MATLAB文件,其中包含GUI的布局及其中包含的所有控件的相關(guān)信息。FIG文件為二進(jìn)制文件,只能通過GUI向?qū)нM(jìn)行修改。內(nèi)容描述注釋程序注釋。當(dāng)在命令行調(diào)用help時(shí)顯示初始化代碼GUI向?qū)У某跏既蝿?wù)。Opening函數(shù)在用戶訪問GUI之前進(jìn)行初始化任務(wù)Output函數(shù)在控制權(quán)由Opening函數(shù)向命令行轉(zhuǎn)移過程中向命令行返回輸出結(jié)果響應(yīng)函數(shù)這些函數(shù)決定控件的操作的結(jié)果。GUI為事件驅(qū)動(dòng)的程序,當(dāng)事件發(fā)生時(shí),系統(tǒng)調(diào)用相應(yīng)的函數(shù)進(jìn)行執(zhí)行GUI代碼說明在創(chuàng)建GUI界面后,需要為界面中的控件編寫101GUI代碼說明M文件擴(kuò)展名為.m,其中包含GUI的初始代碼及相關(guān)響應(yīng)函數(shù)的模板。用戶需要在該文件中添加響應(yīng)函數(shù)的具體內(nèi)容。M文件通常包含一個(gè)與文件同名的主函數(shù),各個(gè)控件對(duì)應(yīng)的響應(yīng)函數(shù),這些響應(yīng)函數(shù)為主函數(shù)的子函數(shù)。其內(nèi)容如表所示。內(nèi)容描述注釋程序注釋。當(dāng)在命令行調(diào)用help時(shí)顯示初始化代碼GUI向?qū)У某跏既蝿?wù)。Opening函數(shù)在用戶訪問GUI之前進(jìn)行初始化任務(wù)Output函數(shù)在控制權(quán)由Opening函數(shù)向命令行轉(zhuǎn)移過程中向命令行返回輸出結(jié)果響應(yīng)函數(shù)這些函數(shù)決定控件的操作的結(jié)果。GUI為事件驅(qū)動(dòng)的程序,當(dāng)事件發(fā)生時(shí),系統(tǒng)調(diào)用相應(yīng)的函數(shù)進(jìn)行執(zhí)行GUI代碼說明M文件擴(kuò)展名為.m,其中包含GUI的初102GUI代碼說明響應(yīng)函數(shù)屬性觸發(fā)事件可用控件ButtonDownFcn用戶在其對(duì)應(yīng)控件5個(gè)象素范圍內(nèi)按下鼠標(biāo)坐標(biāo)系、圖形、按鈕組、面板、用戶接口控件Callback控制操作,用戶按下按鈕或選中一個(gè)菜單項(xiàng)右鍵菜單、菜單、用戶接口控件CloseRequestFcn關(guān)閉圖形時(shí)執(zhí)行圖形CreateFcn創(chuàng)建控件時(shí)初始化控件,初始化后顯示該控件坐標(biāo)系、圖形、按鈕組、右鍵菜單、菜單、面板、用戶接口控件DeleteFcn在控件圖形關(guān)閉前清除該對(duì)象坐標(biāo)系、圖形、按鈕組、右鍵菜單、菜單、面板、用戶接口控件KeyPressFcn用戶按下控件或圖形對(duì)應(yīng)的鍵盤圖形、用戶接口控件ResizeFcn用戶改變面板、按鈕組或圖形的大小,這些控件的Resize屬性需處于On狀態(tài)按鈕組、面板、圖形SelectionChangeFcn用戶在一個(gè)按鈕組內(nèi)部選擇不同的按鈕,或改變開關(guān)按鈕的狀態(tài)按鈕組WindowButtonDownFcn在圖形窗口內(nèi)部按下鼠標(biāo)圖形WindowButtonMotionFcn在圖形窗口內(nèi)部移動(dòng)鼠標(biāo)圖形WindowButtonUpFcn松開鼠標(biāo)按鈕圖形GUI代碼說明響應(yīng)函數(shù)屬性觸發(fā)事件可用控件ButtonDow103GUI代碼說明一個(gè)GUI中包含多個(gè)控件,GUIDE中提供了一種方法,用于指定每個(gè)控件所對(duì)應(yīng)的響應(yīng)函數(shù)。GUIDE通過每個(gè)控件的響應(yīng)屬性將控件與對(duì)應(yīng)的響應(yīng)函數(shù)相關(guān)聯(lián)。在默認(rèn)情況下,GUIDE將每個(gè)控件的最常用的響應(yīng)屬性設(shè)置為%automatic,如圖所示。如每個(gè)按鈕有五個(gè)響應(yīng)屬性,ButtonDownFcn、Callback、CreateFcn、DeleteFcn和KeyPressFcn,GUIDE將其Callback屬性設(shè)置為%automatic。用戶可以通過屬性編輯器將其他響應(yīng)屬性設(shè)置為%automatic。GUI代碼說明一個(gè)GUI中包含多個(gè)控件,GUIDE中提104GUI代碼說明當(dāng)再次保存GUI時(shí),GUIDE將%automatic替換為響應(yīng)函數(shù)的名稱,該函數(shù)的名稱由該控件Tag屬性及響應(yīng)函數(shù)的名稱組成,如圖所示。其中two_axes是該GUI的名稱,同時(shí)是該GUI主調(diào)函數(shù)的名稱。其他參數(shù)為plotpushbutton_Callback函數(shù)的輸入?yún)?shù),其意義分別為:gcbo:用于返回響應(yīng)對(duì)象的句柄;[]:用于存放事件數(shù)據(jù);guidata(gcbo):返回該GUI的句柄結(jié)構(gòu)體。GUI代碼說明當(dāng)再次保存GUI時(shí),GUIDE將%au105GUI代碼說明響應(yīng)函數(shù)的語法與參數(shù)MATLAB中對(duì)響應(yīng)函數(shù)的語法和參數(shù)有一些約定,在GUI向?qū)?chuàng)建響應(yīng)函數(shù)并寫入M文件時(shí)便遵守這些約定。如下面為按鈕的響應(yīng)函數(shù)模板:%---Executesonbuttonpressinpushbutton1.functionpushbutton1_Callback(hObject,eventdata,handles)%#ok%hObjecthandletopushbutton1(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)用戶可以在這里輸入函數(shù)的其他內(nèi)容說明該函數(shù)的觸發(fā)事件函數(shù)定義行對(duì)輸入?yún)?shù)進(jìn)行說明GUI代碼說明響應(yīng)函數(shù)的語法與參數(shù)說明該函數(shù)的觸發(fā)事件函數(shù)定106GUI代碼說明初始化響應(yīng)函數(shù)GUI的初始化函數(shù)包括Opening函數(shù)和Output函數(shù)。在每個(gè)GUIM文件中opening函數(shù)是第一個(gè)調(diào)用的函數(shù)。該函數(shù)在所有控件創(chuàng)建完成后,GUI顯示之前運(yùn)行。用戶可以通過opening函數(shù)設(shè)置程序的初始任務(wù),如創(chuàng)建數(shù)據(jù)、讀入數(shù)據(jù)等。通常opening函數(shù)的名稱為“M文件名+_OpeningFcn”,如下面的初始模板:GUI代碼說明初始化響應(yīng)函數(shù)107GUI代碼說明%---Executesjustbeforemyguiismadevisible.functionmygui_OpeningFcn(hObject,eventdata,handles,varargin)%Thisfunctionhasnooutputargs,seeOutputFcn.%hObjecthandletofigure%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%varargincommandlineargumentstomygui(seeVARARGIN)

%Choosedefaultcommandlineoutputformyguihandles.output=hObject;

%Updatehandlesstructureguidata(hObject,handles);

%UIWAITmakesmyguiwaitforuserresponse(seeUIRESUME)%uiwait(handles.mygui);GUI代碼說明%---Executesjustbef108GUI代碼說明其中文件名為mygui,函數(shù)名為mygui_OpeningFcn。該函數(shù)包含四個(gè)參數(shù),第四個(gè)參數(shù)varargin允許用戶通過命令行向opening函數(shù)傳遞參數(shù)。opening函數(shù)將這些參數(shù)添加到結(jié)構(gòu)體handles中,供響應(yīng)函數(shù)調(diào)用。該函數(shù)中包含三行語句,如下。handles.output=hObject,向結(jié)構(gòu)體handles中添加新元素output,并將其值賦為輸入?yún)?shù)hObject,即GUI的句柄。該句柄供output函數(shù)調(diào)用。guidata(hObject,handles),保存handles。用戶必須通過guidata保存結(jié)構(gòu)體handles的任何改變。uiwait(handles.mygui),在初始情況下,該語句并不執(zhí)行。該語句用于中斷GUI執(zhí)行等待用戶反應(yīng)或GUI被刪除。如果需要該語句運(yùn)行,刪除前面的“%”即可。GUI代碼說明其中文件名為mygui,函數(shù)名為mygui109GUI代碼說明output函數(shù)用于向命令行返回GUI運(yùn)行過程中產(chǎn)生的輸出結(jié)果。該函數(shù)在opening函數(shù)返回控制權(quán)和控制權(quán)返回至命令行之間運(yùn)行。因此,輸出參數(shù)必須在opening函數(shù)中生成,或者在opening函數(shù)中調(diào)用uiwait函數(shù)中斷output的執(zhí)行,等待其他響應(yīng)函數(shù)生成輸出參數(shù)。GUI代碼說明output函數(shù)用于向命令行返回GUI運(yùn)110數(shù)據(jù)采集軟件開發(fā)數(shù)據(jù)采集簡介數(shù)據(jù)采集軟件開發(fā)流程數(shù)據(jù)采集軟件例程數(shù)據(jù)采集軟件開發(fā)數(shù)據(jù)采集簡介111二、數(shù)據(jù)采集軟件開發(fā)數(shù)據(jù)采集簡介數(shù)據(jù)采集軟件開發(fā)流程數(shù)據(jù)采集軟件例程二、數(shù)據(jù)采集軟件開發(fā)數(shù)據(jù)采集簡介112數(shù)據(jù)采集軟件開發(fā)數(shù)據(jù)采集器RBH8305數(shù)據(jù)采集軟件開發(fā)數(shù)據(jù)采集器RBH8305113數(shù)據(jù)采集軟件開發(fā)程序主要文件數(shù)據(jù)采集軟件開發(fā)程序主要文件114數(shù)據(jù)采集軟件開發(fā)程序主要文件第一類:北京瑞博華公司提供的接口程序:ADCARD.H:這是瑞博華公司專為Matlab提供的頭文件,通過該文件,就可以實(shí)現(xiàn)對(duì)瑞博華公司提供的函數(shù)庫進(jìn)行操作。第二類:設(shè)計(jì)文件:r8271.fig:用戶界面文件,實(shí)現(xiàn)主要功能r8271.m:應(yīng)用軟件源程序,實(shí)現(xiàn)主要功能r8271.asv:程序運(yùn)行時(shí)的文件第三類:說明文件:說明.txt:該文件記錄軟件的基本情況數(shù)據(jù)采集軟件開發(fā)程序主要文件115數(shù)據(jù)采集軟件開發(fā)軟件開發(fā)流程開發(fā)本軟件的關(guān)鍵是在程序中調(diào)用瑞博華公司提供的DLL文件,然后就可以如同正常的Matlab軟件的開發(fā)。在matlab中利用動(dòng)態(tài)鏈接庫接口技術(shù)通常需要完成以下4個(gè)步驟:1、打開動(dòng)態(tài)鏈接庫文件。2、為調(diào)用函數(shù)準(zhǔn)備數(shù)據(jù)。3、調(diào)用動(dòng)態(tài)鏈接庫文件中導(dǎo)出的函數(shù)。4、關(guān)閉動(dòng)態(tài)鏈接庫文件。數(shù)據(jù)采集軟件開發(fā)軟件開發(fā)流程116數(shù)據(jù)采集軟件開發(fā)打開動(dòng)態(tài)鏈接庫函數(shù):Loadlibrary(‘mydll’,‘hfile’);其中mydll是字符串變量,代表所要使用的DLL文件的名稱。hfile也是字符串變量,代表包含該DLL文件中所導(dǎo)出的函數(shù)定義的頭文件名。hfile包含以C語言定義的函數(shù)特征,對(duì)于本來就是以C/C++開發(fā)的DLL文件,可以直接使用原來的頭文件。對(duì)于其他語言開發(fā)的DLL文件,需要手工編寫相應(yīng)的C語言頭文件。數(shù)據(jù)采集軟件開發(fā)打開動(dòng)態(tài)鏈接庫函數(shù):117數(shù)據(jù)采集軟件開發(fā)調(diào)用動(dòng)態(tài)鏈接庫文件中導(dǎo)出的函數(shù):Calllib(’libname’,‘funcname’,arg1,arg2,…..argN)其中l(wèi)ibname是字符串變量,表示載入的DLL文件,它通常是載入的DLL文件名;funcname也是字符串變量,代表需要調(diào)用的函數(shù)名;arg1,arg2….argN則是調(diào)用函數(shù)funcname所需要的所有參數(shù)。數(shù)據(jù)采集軟件開發(fā)調(diào)用動(dòng)態(tài)鏈接庫文件中導(dǎo)出的函數(shù):118數(shù)據(jù)采集軟件開發(fā)動(dòng)態(tài)鏈接庫文件的卸載:Unloadlibrary(’libname’);其中l(wèi)ibname為字符串變量,表示要卸載的DLL文件。數(shù)據(jù)采集軟件開發(fā)動(dòng)態(tài)鏈接庫文件的卸載:119數(shù)據(jù)采集軟件開發(fā)Adcard動(dòng)態(tài)鏈接庫中所包含的函數(shù)名稱、返回值類型以及參數(shù)類型數(shù)據(jù)采集軟件開發(fā)Adcard動(dòng)態(tài)鏈接庫中所包含的函數(shù)名稱、返120數(shù)據(jù)采集軟件開發(fā)實(shí)例說明數(shù)據(jù)采集軟件開發(fā)實(shí)例說明121數(shù)據(jù)采集軟件開發(fā)實(shí)例說明 紅色區(qū)域同時(shí)顯示各個(gè)通道的電壓值,本例程以4個(gè)通道為例。 綠色區(qū)域顯示當(dāng)前采集的數(shù)據(jù)塊數(shù)。該數(shù)據(jù)不應(yīng)該達(dá)到用戶軟件設(shè)定的內(nèi)存緩沖區(qū)數(shù),如果達(dá)到了用戶設(shè)定的緩沖區(qū)數(shù),表明可能產(chǎn)生數(shù)據(jù)丟失,解決的方法是增加內(nèi)存緩沖區(qū)塊數(shù)NumBuf這個(gè)變量的值,或增大NumSamp這個(gè)參數(shù)。數(shù)據(jù)采集軟件開發(fā)實(shí)例說明122數(shù)據(jù)采集軟件開發(fā)實(shí)例說明 黃色區(qū)域表示保存數(shù)據(jù)功能,在用戶采集過程中,當(dāng)選中這個(gè)選項(xiàng)時(shí),可以自動(dòng)將采集到的數(shù)據(jù)保存在文件當(dāng)中,文件名以日期時(shí)間默認(rèn)命名,用戶可以在保存后自行修改。 五個(gè)按鈕分別代表開始采集、停止采集、關(guān)閉程序、讀取保存的數(shù)據(jù)以及配置信息。該例程的一個(gè)功能就是可以保存、讀取數(shù)據(jù),方便用戶記錄。數(shù)據(jù)采集軟件開發(fā)實(shí)例說明123數(shù)據(jù)采集軟件開發(fā)實(shí)例說明 波形的曲線顯示,將采集到的AD值以波形的方式表現(xiàn)出來,直觀而且容易理解。 Matlab具有強(qiáng)大的畫圖的功能,在示例的開發(fā)中利用圖形功能可以很形象地表現(xiàn)采集的數(shù)值。數(shù)據(jù)采集軟件開發(fā)實(shí)例說明124數(shù)據(jù)采集軟件開發(fā)實(shí)例說明 配置信息對(duì)話框,可以在停止采集后打開此對(duì)話框?qū)Σ杉绦蜻M(jìn)行信息配置,主要包括所用采集卡的AD位數(shù),作用采集卡的通道數(shù),在主界面畫圖的通道號(hào)以及采樣頻率。配置信息對(duì)話框數(shù)據(jù)采集軟件開發(fā)實(shí)例說明配置信息對(duì)話框125數(shù)據(jù)采集軟件開發(fā)實(shí)例說明數(shù)組與變量的定義globalNumBufglobalNumSampglobalbegchnglobalNumChnglobalFrqSampglobalFrqFilterglobalAmpGain 其中,NumBuf為緩沖區(qū)個(gè)數(shù),NumSamp為每個(gè)緩沖區(qū)采樣點(diǎn)數(shù),一個(gè)采樣點(diǎn)是指所有的通道采樣一次,begchn為起始通道,NumChn為通道數(shù),F(xiàn)rqSamp為采樣頻率,F(xiàn)rqFilter為濾波器頻率,AmpGain為放大器增益,本程序借用這個(gè)產(chǎn)生控制采集模式,當(dāng)該參數(shù)=0時(shí),表示AD結(jié)果為未校準(zhǔn)結(jié)果,否則為校準(zhǔn)結(jié)果.正常使用時(shí)應(yīng)該為1。數(shù)據(jù)采集軟件開發(fā)實(shí)例說明126數(shù)據(jù)采集軟件開發(fā)實(shí)例說明數(shù)組與變量的定義定義數(shù)據(jù)緩沖區(qū),handles.lp為指向緩沖區(qū)數(shù)組的指針。handles.ADBuf=1:6000;shortdata=uint16(handles.ADBuf);handles.lp=libpointer('uint16Ptr',shortdata);數(shù)據(jù)采集軟件開發(fā)實(shí)例說明127數(shù)據(jù)采集軟件開發(fā)實(shí)例說明調(diào)用adcard.dllh=['F:\ProgramFiles\MATLAB\R2007b\work\adcard.h'];%頭文件所在的地址loadlibrary('adcard',h);%調(diào)用adcard.dll,將dll文件包含到程序中。數(shù)據(jù)采集軟件開發(fā)實(shí)例說明128數(shù)據(jù)采集軟件開發(fā)實(shí)例說明定義定時(shí)器由于Matlab的gui編程組件中沒有現(xiàn)成的定時(shí)器空間,所以在使用定時(shí)器之前要先定義定時(shí)器。han

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論