孫 明
(佛山科學(xué)技術(shù)學(xué)院 電子信息工程系,廣東 佛山 528000)
信號(hào)與系統(tǒng)課程知識(shí)體系完整,理論嚴(yán)謹(jǐn),邏輯性強(qiáng),以高等數(shù)學(xué)、工程數(shù)學(xué)及電路分析基礎(chǔ)等課程為先導(dǎo),涉及了大量的數(shù)學(xué)知識(shí);其理論結(jié)果往往來(lái)源于復(fù)雜的數(shù)學(xué)運(yùn)算及推導(dǎo),不僅要求學(xué)生理解數(shù)學(xué)概念,還要求對(duì)物理概念及工程概念有較為深刻的理解。如果在學(xué)習(xí)時(shí)僅僅只記憶數(shù)學(xué)公式,不清楚其中的物理含義及工程概念,很難將信號(hào)與系統(tǒng)理論應(yīng)用于系統(tǒng)設(shè)計(jì)中,從而在一定程度上會(huì)制約學(xué)生學(xué)習(xí)的主動(dòng)性和創(chuàng)造性,難以達(dá)到培養(yǎng)綜合能力的目的[1]。
將MATLAB的GUI編程技術(shù)引入到信號(hào)與系統(tǒng)課程中,可以使抽象的信號(hào)變得更加直觀,易于理解[2-5]。
周期信號(hào)的傅里葉級(jí)數(shù)展開是信號(hào)與系統(tǒng)課程中最基本的理論知識(shí),如果不能很好地理解這一重要概念,不僅影響本課程的學(xué)習(xí),還會(huì)影響到后續(xù)相關(guān)課程的學(xué)習(xí)。本文設(shè)計(jì)開發(fā)了基于圖形用戶界面(graphical user interfaces,GUI)的周期信號(hào)傅里葉級(jí)數(shù)展開演示系統(tǒng),將抽象的概念形象化,將枯燥的理論可視化,將課程中較難掌握的重要知識(shí)點(diǎn)以動(dòng)態(tài)演示的方式展現(xiàn)出來(lái),直觀易懂,便于分析,使學(xué)生加深了對(duì)物理意義和工程概念的理解,在教學(xué)中取得了較好的效果[6-7]。
經(jīng)典的傅里葉級(jí)數(shù)是當(dāng)滿足狄里赫利(Dirichlet)條件時(shí),可將任一周期時(shí)間信號(hào)分解成許多不同振幅、不同頻率諧波的線性組合,如式(1)所示,傅里葉級(jí)數(shù)展開形式為:
(1)
式(1)中,a0,ak,bk分別為傅里葉級(jí)數(shù)的系數(shù),決定了不同分量的幅度。其中:
當(dāng)用有限項(xiàng)傅里葉級(jí)數(shù)表示具有不連續(xù)點(diǎn)的周期信號(hào)f(t)時(shí),若滿足Dirichlet條件,所取項(xiàng)數(shù)N越大,越接近該信號(hào),其傅里葉級(jí)數(shù)一致收斂[8]。當(dāng)項(xiàng)數(shù)N→∞,即完全逼近,于是有:
(2)
用有限項(xiàng)傅里葉級(jí)數(shù)表示有間斷點(diǎn)的信號(hào)時(shí),在間斷點(diǎn)處不可避免地會(huì)出現(xiàn)振蕩和超量,不僅存在誤差且在不連續(xù)點(diǎn)的兩側(cè)還會(huì)出現(xiàn)振蕩現(xiàn)象,其高頻起伏的最大值將趨近于一個(gè)常數(shù),且無(wú)論N
的取值如何,約等于不連續(xù)點(diǎn)跳變值的8.95%,這種現(xiàn)象即所謂的吉伯斯現(xiàn)象(Gibbsphenomenon)[9-10]。
演示系統(tǒng)選取傅里葉級(jí)數(shù)展開、頻譜分析和吉伯斯現(xiàn)象演示這三個(gè)重要的知識(shí)點(diǎn)進(jìn)行分析設(shè)計(jì),如圖1所示。
圖1 知識(shí)點(diǎn)組成
界面模塊包括輸入、分析和圖形顯示三個(gè)模塊,如圖2所示。
輸入模塊包括方波、三角波、鋸齒波、全波整流正弦波、全波整流余弦波、半波整流正弦波和半波整流余弦波七個(gè)典型信號(hào);分析模塊是對(duì)這些典型周期信號(hào)進(jìn)行時(shí)域分析和頻域分析,即分解與合成,同時(shí)在這個(gè)模塊中進(jìn)行吉伯斯現(xiàn)象的演示;圖形顯示模塊主要是對(duì)時(shí)域分解合成波形和頻譜圖(幅度譜和相位譜)的顯示。
圖2 模塊組成
在MATLAB中創(chuàng)建圖形用戶界面的方法有圖形句柄和GUIDE(graphicuserinterfacedevelopmentenvironment)兩種,都需要使用M語(yǔ)言編程。利用圖形句柄創(chuàng)建的GUI只有一個(gè)M文件,而利用GUIDE創(chuàng)建的GUI包括M文件和保存外觀設(shè)計(jì)信息的fig文件兩個(gè)[11-12]。
本系統(tǒng)無(wú)須實(shí)現(xiàn)復(fù)雜的功能,顯然采用操作簡(jiǎn)單方便的GUIDE開發(fā)環(huán)境更適合。
基本圖形對(duì)象分為控件對(duì)象和用戶界面菜單對(duì)象,簡(jiǎn)稱控件和菜單。GUI創(chuàng)建包括界面設(shè)計(jì)和控件編程兩部分,主要步驟如下。
第一步,通過設(shè)置GUIDE應(yīng)用程序的選項(xiàng)來(lái)運(yùn)行GUIDE。通過命令File/New/GUI,新建一個(gè)GUI文件,進(jìn)入GUI開發(fā)環(huán)境,如圖3和圖4所示。
圖3 GUI創(chuàng)建界面
第二步,使用界面設(shè)計(jì)編輯器進(jìn)行界面設(shè)計(jì)。
分析界面所要實(shí)現(xiàn)的主要功能,使用GUI開發(fā)環(huán)境提供的一系列工具,制作出演示系統(tǒng)主界面。
圖4 GUI開發(fā)環(huán)境
1)用戶菜單設(shè)計(jì)。
用戶菜單的創(chuàng)建可以通過菜單編輯器完成。根據(jù)需要設(shè)計(jì)出一級(jí)菜單(菜單條)和二級(jí)菜單,點(diǎn)擊更多屬性可設(shè)置、修改菜單的屬性,如圖5所示。
圖5 GUI用戶菜單設(shè)計(jì)界面
激活該圖形用戶界面,可得到如圖6所示GUI用戶菜單。
圖6 GUI用戶菜單
2)圖形界面設(shè)計(jì)。
在布局編輯器中布置控件:本演示系統(tǒng)中使用了7個(gè)靜態(tài)文本框(statictext),分別用來(lái)完成顯示不同信息的功能;2個(gè)滾動(dòng)條(slider),分別用來(lái)完成時(shí)域信號(hào)周期和傅里葉級(jí)數(shù)系數(shù)的選擇;3個(gè)坐標(biāo)軸(axes),分別用來(lái)顯示時(shí)域波形及頻譜圖;一個(gè)彈出式菜單(popupmenu),用來(lái)進(jìn)行時(shí)域信號(hào)的選擇;一個(gè)可編輯文本(edittext),用來(lái)輸入傅里葉級(jí)數(shù)系數(shù)。
使用位置調(diào)整工具(alignmenttool)對(duì)控件的位置進(jìn)行調(diào)整;使用對(duì)象屬性查看器(propertyinspector)查看/修改設(shè)置各對(duì)象屬性,如圖7所示。
圖7 GUI圖形界面設(shè)計(jì)
上述步驟基本完成了圖形界面的設(shè)計(jì),保存并激活GUI,GUI界面布置如圖8所示。
圖8 GUI圖形界面
第三步,編寫控件行為響應(yīng)控制(即回調(diào)函數(shù))代碼。
根據(jù)設(shè)計(jì)好的圖形界面的功能,針對(duì)各個(gè)不同圖形對(duì)象編寫能夠?qū)崿F(xiàn)該功能的回調(diào)函數(shù),通過控件響應(yīng)指定行為。GUIDE給添加到應(yīng)用程序fouriergui_callbacks.m文件中的回調(diào)函數(shù)自動(dòng)命名,可直接用這個(gè)框架編寫函數(shù)代碼,并使控件被激活時(shí)該函數(shù)能夠調(diào)用。
回調(diào)函數(shù)的聲明為:
functionobject_CreateFcn(hObject,eventdata,handles)
其中:object為發(fā)生事件的控件的Tag屬性字符串;hObject為發(fā)生事件的控件的句柄;eventData為保留字段;handles為一個(gè)結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)中包含所有界面上控件的Tag屬性值,還可以添加用戶自己的數(shù)據(jù)。
回調(diào)函數(shù)編寫主要是通過get、set語(yǔ)句對(duì)控件的屬性進(jìn)行獲取和設(shè)置,以及完成相關(guān)數(shù)據(jù)的傳遞、保存和獲取。
所有控件布置好后,可以激活按鈕檢查GUIDE的設(shè)計(jì)結(jié)果,激活時(shí)將保存fouriergui_callbacks.fig和fouriergui_callbacks.m文件。
最后激活的圖形用戶界面是對(duì)周期方波信號(hào)的分解與合成,如圖9所示。
圖9 周期方波信號(hào)的分解與合成
可選擇不同的信號(hào)類型實(shí)現(xiàn)時(shí)域波形顯示及對(duì)應(yīng)的幅頻特性和相頻特性的顯示。可以通過鼠標(biāo)拖動(dòng)改變時(shí)域信號(hào)的周期,能同步地觀察到時(shí)域參數(shù)改變后對(duì)應(yīng)幅頻特性和相頻特性的改變??梢酝ㄟ^鍵盤輸入或者鼠標(biāo)拖動(dòng)進(jìn)行傅里葉級(jí)數(shù)系數(shù)選擇,可以同時(shí)觀察信號(hào)的合成與分解,還可以同時(shí)與理論值進(jìn)行比較,觀察吉伯斯現(xiàn)象。
本文從周期信號(hào)的傅里葉級(jí)數(shù)展開出發(fā),結(jié)合周期信號(hào)分解與合成、頻譜分析和吉伯斯現(xiàn)象三個(gè)重要知識(shí)點(diǎn),對(duì)信號(hào)與系統(tǒng)課程中抽象概念的可視化方法進(jìn)行探索。通過應(yīng)用GUI編程技術(shù)設(shè)計(jì)出的圖形用戶界面,能夠很方便地修改信號(hào)時(shí)域及頻域的參數(shù),將抽象的理論公式生動(dòng)化,更加直觀和形象具體地表現(xiàn)出來(lái),該演示系統(tǒng)與理論教學(xué)和實(shí)驗(yàn)相結(jié)合,大大激發(fā)了學(xué)生的學(xué)習(xí)興趣,改善了教學(xué)效果。
[1]孫明.《信號(hào)與系統(tǒng)》課程案例教學(xué)方法研究[J].武漢大學(xué)學(xué)報(bào)(理學(xué)版),2012(S2):173-176.
[2]李秀梅,董文,賈中云.基于Matlab的信號(hào)與系統(tǒng)課程GUI演示系統(tǒng)[J].大學(xué)教育,2014(9):78-79.
[3]陶亮.MATLAB圖形用戶界面在信號(hào)與系統(tǒng)課程教學(xué)中的應(yīng)用[J].電氣電子教學(xué)學(xué)報(bào),2004,26(5):94-96.
[4]李念念,張紅梅.基于MATLABGUI的信號(hào)與系統(tǒng)分析軟件開發(fā)[J].工業(yè)控制計(jì)算機(jī),2011,24(3):19-21.
[5]杜世民,楊潤(rùn)萍.基于MatlabGUI的“信號(hào)與系統(tǒng)”教學(xué)仿真平臺(tái)開發(fā)[J].實(shí)驗(yàn)技術(shù)與管理,2012,29(3):87-90.
[6]金波.基于Matlab的“信號(hào)與系統(tǒng)”實(shí)驗(yàn)演示系統(tǒng)[J].實(shí)驗(yàn)技術(shù)與管理,2010,27(12):104-107.
[7]梁虹,梁潔.信號(hào)與系統(tǒng)分析及MATLAB實(shí)現(xiàn)[M].北京:電子工業(yè)出版社,2002.
[8]鄭君里,應(yīng)啟珩,楊為理.信號(hào)與系統(tǒng)[M].2版.北京:高等教育出版社,2000.
[9]熊元新,劉滌塵.傅里葉級(jí)數(shù)的收斂性與吉伯斯現(xiàn)象[J].武漢大學(xué)學(xué)報(bào)(工學(xué)版),2001,34(1):69-71.
[10]于殿泓,李琳.“信號(hào)與系統(tǒng)”課程中的分解與合成[J].電氣電子教學(xué)學(xué)報(bào),2009,31(2):107-109.
[11]羅華飛.MATLABGUI設(shè)計(jì)學(xué)習(xí)手記[M].2版.北京:北京航空航天大學(xué)出版社,2011.
[12]陳垚光.精通MATLABGUI設(shè)計(jì)(附光盤)[M].北京:電子工業(yè)出版社,2008.