作者:桂。
時間:2017-03-01 18:43:35
鏈接:http://www.cnblogs.com/xingshansi/articles/6485688.html
聲明:轉載請注明出處,謝謝。
前言
本文為MATLAB系列第三篇,主要是自己學習GUI界面設計的記錄,此文后續會不定期更新。寫本文的初衷是: 如何讓一個不懂MATLAB的人員,可以進行一些操作,或者設定一些參數? 文章內容主要為自己的學習筆記,內容多有借鑒他人,最后把鏈接一並附上。 |
一、搭建最基本的GUI
本節通過兩個例子進行論述,分別介紹GUI基本操作,即數值運算、數據導入、圖形繪制等功能的GUI實現。
A-加法器
首先上效果圖:
輸入兩個數值,點擊Add!,便可顯示結果,下面開始逐步介紹。
- GUI新建
常用的新建GUI方法有兩個:
-
- Command Window輸入guide—>Create New GUI;
- Home—>New—>Graphical User Interface;
注意:勾選“Sace new figure as:”,可選擇存儲路徑,並對文件命名。
這里我們選擇默認的“Blank GUI(Default)”,點擊“OK”,便可進入, 本文主要用到以下幾個選框:
- GUI框架搭建
本文為基礎內容,框架內修改的主要是
點擊需要添加的選框至面板中,雙擊選框,特性中:
其中
String:顯示的名稱;
Tag:標簽,主要用於程序編寫時,對變量進行定位;
常用:
position:指示空間在figure中的位置
font**:字體相關屬性
string:相當如VB中的caption,就是顯示在控件上的文字
tag:控件的唯一標識符,相當於ID,我們需要tag來指定某一個空間
因此,我們只需要設定參與操作的選框tag;對於不涉及操作、僅僅作為顯示的選框,其tag我們可以默認。
分析加法器,我們總共需要的選框:
其中,涉及操作的有:
兩個輸入(兩個編輯文本框) + 一個執行加法運算的開關(一個確定按鈕)+結果顯示(一個靜態文本框)。
設置完成的效果圖:
點擊“保存”,此時便出現.m和.fig兩個文件,加法器的GUI框架搭建完畢。
- GUI對應代碼完善
步驟一:設定tag、String等參數;
首先是回調函數的定位(如果已經退出GUI編輯框,可Command Window輸入guilde進入):
選中並右鍵—>Viwe Callbacks—>Callback,即可打開對應的函數模塊。
對應提取數據的代碼(提出為字符,需要進行str2num的轉換)
a = get(handles.input_a,'String');%String的S大寫
假設兩個輸入框的String分別設為0(無輸入默認顯示0),tag分別設定為:
-
- input1_editText,input2_editText
OK按鈕重命名:String設置為:Add! 對應tag為:
-
- add_pushbutton
結果的String設為0,對應tag設為:
-
- answer_staticText
步驟二:讀取輸入參數
打開第一個輸入框,函數模塊初始為
function input1_editText_Callback(hObject, eventdata, handles) % hObject handle to input1_editText (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'String') returns contents of input1_editText as text % str2double(get(hObject,'String')) returns contents of % input1_editText as a double
編輯回調函數,修改為:
% handles 包含figure中所有圖形對象句柄的結構體,如果我們想引用tag為mytag的控件,使用handles.mytag % set/get 函數是用來設置/獲取某個控件屬性 % 使用get命令獲取第一個加數,並將它轉換成數值 input = str2num(get(hObject,'String')); % string屬性是字符串,所以必須轉換成數值 % 檢驗輸入是否為空,是則將它置為0 if (isempty(input)) set(hObject,'String','0') end % 保存handles結構體,只要在handles結構體有改變時,才需要保存 guidata(hObject, handles); % 這里由於handles沒有改變,故這里其實沒有必要,建議在所有Callback最后都添加該命令,此處為將參數設定為GUI變量,可全局調用。
第二個輸入框同第一個輸入框的操作相同;
步驟三:輸出結果的顯示
關聯控制鍵,並將結果賦給對應的tag,初始的回調函數:
% --- Executes on button press in add_pushbutton. function add_pushbutton_Callback(hObject, eventdata, handles) % hObject handle to add_pushbutton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
修改后:
a = get(handles.input1_editText,'String'); b = get(handles.input2_editText,'String'); % a和b是字符串變量,我們需要使用str2double函數將其轉換為數值 % 然后才能相加,否則字符串是沒法相加的 total = str2num(a) + str2num(b); % 格式轉換,轉換為數值 % 由於string屬性是字符串,所以必須將兩個數的和轉換為字符串 c = num2str(total); % 轉換為字符串 % 將結果賦值給answer_staticText空間的string屬性,於是就可以顯示結果了 set(handles.answer_staticText,'String',c); guidata(hObject, handles); % 更新結構體
至此,完成了GUI代碼的完善。
- GUI運行
GUI的運行主要分為三種方式。
方式一:Current Directory運行.m文件
同普通程序運行一致,運行結束即彈出GUI畫框,按要求操作即可。
方式二:GUI界面run
Command Window輸入guide,進入GUI編輯界面,點擊右上角的,即彈出GUI界面。
方式三:Command Window運行GUI文件名
例如有GUI程序:example.fig,切換到該文件的目錄下,在Command Window輸入example,回車運行,即彈出GUI界面。
自己實現了GUI零的突破,希望后面掌握相關技巧后,來一個加法器的GUI升級。 ——記錄此處,提醒自己 |
B-語音增強
學習GUI,實現最基本的功能,讀取一段語音信號(co-channel),並對帶噪信號進行歸一化自適應濾波(NLMS),實現語音信號增強。這里給出讀取文件的指令,
降噪以及NLMS等算法的實現,具體參考自適應濾波。本文不再展開論述,感興趣的朋友,可以拿這個作為小練習(●'◡'●)。
實現功能描述:
1)點擊“load”,加載需要處理的語音信號;
2)讀取並對帶噪信號進行自適應濾波;
3)繪制處理前后語音信號的時域波形圖、時頻能量圖;
%==============加載文件指令======================= [FileName,PathName] = uigetfile('*.wav'); %打開對話框 fle = [PathName FileName]; % 構成完整的路徑和文件名 [s,fs,nbits] = wavread(fle); %新版本MATLAB為audioread %==============繪圖指令========================== %需要在GUI界面插入axes框 axes(handles.axes3); %打開的文件顯示在第一個圖 plot(time,r1./max(abs(r1)),'k'); ylabel('幅度');xlabel('時間(s)'); title('帶噪信號波形圖');
對應效果圖:
感興趣的朋友可以留言交流:Q-441039377。
二、生成.exe可執行文件
GUI界面固然友好,但很多朋友甚至不會操作MATLAB界面,如何讓他們進行一些操作呢?利用程序生成.exe是一個不錯的辦法。
如果計算機已經安裝編譯器,即可直接在Command Window輸入:
mcc -m 文件名;%文件名為*.m的部分
此時,對應文件夾下會出現:文件名.exe 。雙擊運行即可進入GUI界面,無需通過MATLAB打開,對於更小白的人士,可以發送桌面快捷方式。
如果沒有安裝編譯器,則需要如下操作:
-
- 安裝編譯器:
Command Window輸入:mex -setup;
然后根據提示選擇,直到安裝完畢; - 設置編譯器:
Command Window輸入:mbuild -setup;
然后根據提示選擇,直到操作結束; - 將腳本編譯為exe可執行文件:
如文件夾下有:example.m example.fig;
則Command Window輸入:mcc -m example;
- 安裝編譯器:
參考:
加法器設計:http://www.matlabsky.com/thread-5217-1-1.html
exe生成:http://blog.csdn.net/qq_20823641/article/details/51863737