倪 磊,萬(wàn)再蓮,周 瑋
(四川師范大學(xué)成都學(xué)院 通信工程學(xué)院,四川 成都 611745)
國(guó)內(nèi)眾多學(xué)者都對(duì)Matlab信號(hào)仿真進(jìn)行過(guò)研究,但這些研究都是基于Matlab的數(shù)字信號(hào)或者是模擬信號(hào)的仿真。而在國(guó)內(nèi)的主流教材中,也都未涉及到信號(hào)產(chǎn)生的仿真界面。通信學(xué)科中的信號(hào)繁多復(fù)雜,學(xué)生在學(xué)完某類信號(hào)時(shí),未能對(duì)數(shù)字和模擬信號(hào)進(jìn)行詳細(xì)的區(qū)分。很多高校由于教學(xué)學(xué)時(shí)及實(shí)驗(yàn)室條件的限制,很難達(dá)到讓學(xué)生熟練掌握信號(hào)的教學(xué)要求,將Matlab仿真技術(shù)和GUI界面設(shè)計(jì)引入教學(xué)中[1],可彌補(bǔ)這方面的遺憾。因此,通過(guò)對(duì)通信學(xué)科中的信號(hào)進(jìn)行歸納和總結(jié),借助于現(xiàn)有的Matlab仿真軟件,設(shè)計(jì)和編寫(xiě)出一個(gè)集模擬與數(shù)字信號(hào)調(diào)制于一體的仿真界面系統(tǒng),在這種創(chuàng)新型平臺(tái)上向?qū)W生展示通信系統(tǒng)的各類信號(hào)的處理。該平臺(tái)具有良好的交互性,實(shí)用性和可擴(kuò)展性[2],為學(xué)生提供了一個(gè)實(shí)驗(yàn)平臺(tái),能幫助供學(xué)生熟悉并掌握通信信號(hào)處理的基本理論和基本方法,例如模擬通信系統(tǒng)中的AM、DSB、SSB信號(hào)調(diào)制與解調(diào)信號(hào)的時(shí)域和頻域波形、數(shù)字基帶信號(hào)中的各種碼型時(shí)域波形和PSK、FSK、ASK等數(shù)字調(diào)制信號(hào)等。
隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,人與計(jì)算機(jī)的通信方式也發(fā)生了很大變化,從原來(lái)的命令行通訊方式到現(xiàn)在的圖形界面下的交互方式,而現(xiàn)在多數(shù)的應(yīng)用程序都是在圖形化界面下運(yùn)行的。
Matlab圖形用戶界面開(kāi)發(fā)環(huán)境簡(jiǎn)稱GUIDE(matlab graphical user interface development environment),其主要是一個(gè)界面設(shè)計(jì)工具集。GUI(Graphical User Interface)就是基于數(shù)據(jù)處理軟件Matlab的圖形用戶界面開(kāi)發(fā)環(huán)境。在Matlab7.0中,GUI包含多種圖形對(duì)象的界面,包括圖形顯示區(qū)域、功能按鈕及自定義的功能菜單等。Matlab將GUI所支持的用戶控件都集成起來(lái),同時(shí)提供界面外觀、屬性和行為響應(yīng)方法的設(shè)置方法。為了讓界面實(shí)現(xiàn)各種功能,需要對(duì)各個(gè)圖形對(duì)象進(jìn)行布局。當(dāng)用戶激活對(duì)應(yīng)的GUI對(duì)象時(shí),就能執(zhí)行相應(yīng)的屬性設(shè)置。最后,必須保存和發(fā)布自己創(chuàng)建的GUI,使得用戶可以應(yīng)用GUI對(duì)象[3]。
在Matlab中,可以將所有對(duì)象用M文件進(jìn)行創(chuàng)建及編寫(xiě)。將GUI視為Matlab對(duì)象,可以使用M文件來(lái)創(chuàng)建GUI。通過(guò)GUIDE創(chuàng)建GUI對(duì)象,執(zhí)行效率高,可以交互式地進(jìn)行組件布局,還能生成保存和發(fā)布GUI的對(duì)應(yīng)文件[3]。
GUI將用戶設(shè)計(jì)保存好的界面保存在FIG資源文件中,同時(shí)自動(dòng)生成包含圖形用戶界面初始化和組件界面布局控制代碼的M文件。該M文件為實(shí)現(xiàn)回調(diào)函數(shù)的編寫(xiě)提供了一個(gè)參考框架。而FIG文件是一個(gè)二進(jìn)制文件,主要是對(duì)對(duì)象句柄進(jìn)行保存,保存用戶創(chuàng)建圖形窗口時(shí)設(shè)計(jì)的屬性。M文件中包含GUI設(shè)計(jì)、控制函數(shù)及控件的回調(diào)函數(shù),主要用來(lái)控制界面展開(kāi)時(shí)的各種特征。該文件可以分為GUI初始化和回調(diào)函數(shù)2個(gè)部分,控件的回調(diào)函數(shù)可根據(jù)用戶與GUI的具體交互行為分別調(diào)用。
本平臺(tái)的實(shí)現(xiàn)是在Matlab的圖形用戶界面(GUI)設(shè)計(jì)環(huán)境下完成[4]。通過(guò)GUIDE可以很方便地設(shè)計(jì)出各種符合要求的圖形用戶界面[5],考慮到平臺(tái)的應(yīng)用性,在設(shè)計(jì)時(shí)要遵循簡(jiǎn)單性、習(xí)慣性和直觀性3個(gè)原則。
在界面設(shè)計(jì)的過(guò)程中,首先,分析界面所要求實(shí)現(xiàn)的主要功能,明確設(shè)計(jì)任務(wù);其次,在稿紙上繪出界面草圖,并站在學(xué)生使用的角度上審查該圖;第三,根據(jù)構(gòu)思,利用GUI設(shè)計(jì)出直觀、簡(jiǎn)單的信號(hào)處理界面;最后,編寫(xiě)相關(guān)代碼函數(shù),并對(duì)設(shè)計(jì)中存在的問(wèn)題進(jìn)行修改及優(yōu)化,直至檢查無(wú)誤。
GUI包含許多可以使軟件終端與用戶界面進(jìn)行交互的用戶界面組件,GUI實(shí)現(xiàn)的任務(wù)之一就是控制組件如何響應(yīng)用戶的行為[6]。在Matlab主界面的command window窗口中輸入GUIDE,即彈出圖形用戶界面模板選擇窗口,選擇默認(rèn)的空白(BLANK GUI)選項(xiàng)即可進(jìn)入編輯界面[7]。
圖1 Matlab/GUI開(kāi)發(fā)環(huán)境Fig.1 Main matlab/GUI development
通信類信號(hào)調(diào)制中存在有兩類信號(hào),即模擬信號(hào)與數(shù)字信號(hào)。據(jù)此,將信號(hào)的仿真實(shí)驗(yàn)平臺(tái)中分為模擬信號(hào)波形仿真圖和數(shù)字信號(hào)波形仿真圖兩大模塊。
模擬信號(hào)的調(diào)制包括有調(diào)幅、調(diào)頻和調(diào)相。而調(diào)幅中又包含普通調(diào)制AM信號(hào)、抑制載波的雙邊帶DSB信號(hào)和抑制載波的單邊帶SSB信號(hào)。數(shù)字信號(hào)調(diào)制中則包括幅移鍵控、頻移鍵控和相移鍵控三類。通過(guò)將通信中遇到的數(shù)字信號(hào)調(diào)制進(jìn)行歸納,幅移鍵控ASK是通過(guò)改變載波信號(hào)的振幅大小來(lái)表示數(shù)字信號(hào) “0”和 “1”的,包括有2ASK,四進(jìn)制MASK。頻移鍵控FSK是利用兩個(gè)不同頻率的振蕩信號(hào)來(lái)表示數(shù)字信號(hào)“0”和“1”的,其包括有 2FSK,4FSK,8FSK,最小頻移鍵控MSK,高斯濾波最小頻移鍵控GMSK。相移鍵控PSK是根據(jù)數(shù)字基帶信號(hào)的兩個(gè)電平使載波相位在兩個(gè)不同的數(shù)值之間切換的一種相位調(diào)制方法,包括BPSK,8PSK,16PSK,QPSK,OQPSK,UQPSK。正交幅度調(diào)制是利用正交的載波對(duì)兩路信號(hào)分別進(jìn)行雙邊帶抑制載波調(diào)幅形成的,通常有16進(jìn)制QAM,64QAM,32QAM,128QAM。
將設(shè)計(jì)好的界面文件保存運(yùn)行,就可以看到該平臺(tái)在運(yùn)行時(shí)顯示出的實(shí)際效果,如圖2所示。
通過(guò)文本編輯框控件來(lái)顯示模擬信號(hào)調(diào)制與數(shù)字信號(hào)調(diào)制的定義;使用單選按鈕控件來(lái)實(shí)現(xiàn)信號(hào)類型的選擇;完成控件布局之后,開(kāi)始編制回調(diào)程序。在GUI編輯狀態(tài)下用鼠標(biāo)右鍵單擊需要編寫(xiě)回調(diào)程序的控件,打開(kāi)右鍵快捷菜單,從View Callbacks中選擇一種回調(diào)方式[8]。在每一個(gè)控件的Callbacks函數(shù)里編寫(xiě)相應(yīng)調(diào)制信號(hào)的代碼。
Matlab通過(guò)創(chuàng)建M文件為GUI控制程序提供了一個(gè)框架,即所有代碼(含callback回調(diào)函數(shù))都包含在應(yīng)用程序M文件中。在完成圖形界面的設(shè)計(jì)后,最主要的工作就是對(duì)控件的回調(diào)函數(shù)進(jìn)行代碼設(shè)計(jì)。下面分析程序設(shè)計(jì)流程及控件回調(diào)函數(shù)的編寫(xiě)。
該實(shí)驗(yàn)平臺(tái)在運(yùn)行時(shí),系統(tǒng)先進(jìn)行初始化。彈出GUI界面窗口,判斷點(diǎn)擊的位置是否正確,不正確則重新輸入。正確即可在相應(yīng)信號(hào)的功能菜單中彈出相應(yīng)的時(shí)域頻譜圖。程序流程如圖3所示。
圖3 程序流程圖Fig.3 Program flow picture
該軟件的各控件callback回調(diào)函數(shù)根據(jù)信號(hào)類型的不同而各有不同。如數(shù)字信號(hào)分為幅移鍵控、頻移鍵控和相移鍵控,而每種鍵控又有多種調(diào)制方式。當(dāng)選擇幅移鍵控控件按鈕后,則選擇該控件下的調(diào)制方式,方能彈出所需的信號(hào)頻譜。
對(duì)代碼編寫(xiě)中,首先先統(tǒng)一變量符號(hào),其次進(jìn)行調(diào)制信號(hào)類型的分類編碼,便于輸入輸出變量的傳遞及信號(hào)的擴(kuò)充,通過(guò)定義data_I(表示輸出I路信號(hào))和data_Q(表示輸出Q路信號(hào)),modulate_fre定義信號(hào)碼率,sample_fre表示采樣頻率,sample_num表示采樣點(diǎn)數(shù),調(diào)用統(tǒng)一函數(shù)function[data_Idata_Q]=Singal_modulate(mod_tpye,mod_v,mod_v2,sam_fre,sam_l)使代碼編寫(xiě)更規(guī)范;最后根據(jù)matlab自帶的函數(shù)分別進(jìn)行設(shè)計(jì)。
本設(shè)計(jì)中將所有信號(hào)調(diào)制放置在一個(gè)M文件中,通過(guò)callback函數(shù)調(diào)用該M文件。在完成了各個(gè)空間的callback函數(shù)編寫(xiě)后,對(duì)該軟件功能進(jìn)行調(diào)試,以確保每項(xiàng)功能都能正確的相應(yīng)用戶的操作,彈出正確的頻譜圖。
鑒于篇幅有限,僅提供本實(shí)驗(yàn)平臺(tái)信號(hào)中的DSB信號(hào)和16QAM信號(hào)代碼。
DSB信號(hào)callback函數(shù)部分代碼如下:
time_t=0:1/sample_fre:(sample_num-1)/sample_fre;%時(shí)間坐標(biāo)
num=length(modulate_param1);
su_data=data_I+1j*data_Q;
su_data=su_data.*exp(-1j*2*pi*modulate_param2*time_t);
Bw=modulate_param1;
firOrder=60;
fircomb=sample_fre/(4*Bw);
[yf,tf]=rcosine(1,ceil(fircomb),'fir/sqrt',0.35,
ceil(firOrder/(2*fircomb)));%設(shè)置升余弦濾波器參數(shù)
data=filter(yf,1,su_data);
data_I=real(data);
data_Q=imag(data);
figure;
subplot(211);plot(abs(data_I+1j*data_Q));
xlabel('DSB信號(hào)的幅度譜')
ff=[-2047:2048].*sample_fre/4096;
subplot(212);plot(ff,abs(fftshift(fft(data_I+1j*data_Q,4096))));
xlabel('DSB信號(hào)的頻譜')
end
16QAM callback函數(shù)部分代碼如下:
nsamp=floor(sample_fre/modulate_fre);%采樣率設(shè)置
data_num=floor(sample_num/nsamp)+1;
data=randint(data_num,1,16);
y=modulate(modem.qammod(16),data);%調(diào)制函數(shù)
out_data=rectpulse(y,nsamp);
data_I=real(out_data(1:sample_num));
data_Q=imag(out_data(1:sample_num));
scatterplot(data_I+1j*data_Q);
[yf,tf]=rcosine(1,nsamp,'fir/sqrt',0.25);
data_I=filter(yf,1,data_I);
data_Q=filter(yf,1,data_Q);
data_I=data_I';
data_Q=data_Q';
figure
subplot(211);plot(abs(data_I+1j*data_Q));
ff=[-2048:2047].*sample_fre/4096;
subplot(212);plot(ff,abs(fftshift(fft(data_I+1j*data_Q,4096))));
end
在編寫(xiě)完軟件的各代碼后,應(yīng)對(duì)所設(shè)計(jì)的軟件代碼進(jìn)行優(yōu)化。打開(kāi)軟件中使用次數(shù)較多的程序,利用Matlab的自帶函數(shù)profile程序執(zhí)行耗時(shí)剖析功能函數(shù)對(duì)程序中耗時(shí)情況進(jìn)行分析,完后進(jìn)行改進(jìn),以提高系統(tǒng)的執(zhí)行效率[2]。
通過(guò)編寫(xiě)完全部信號(hào)代碼及調(diào)試后,可以實(shí)現(xiàn)平臺(tái)中所有信號(hào)的波形。因篇幅有限,羅列模擬信號(hào)DSB調(diào)制和數(shù)字信號(hào)中4ASK和64QAM的波形圖,如圖4到圖7所示。
圖4 雙邊帶信號(hào)的頻譜Fig.4 Spectrum of DSB
圖5 4ASK信號(hào)時(shí)域頻域圖Fig.5 Spectrum of 4ASK
該實(shí)驗(yàn)平臺(tái)的搭建,可以讓教師在講授信號(hào)調(diào)制理論的過(guò)程中,通過(guò)結(jié)合該軟件,可增強(qiáng)授課內(nèi)容的豐富性及延展性,拓展了實(shí)踐性教學(xué)環(huán)節(jié)。讓學(xué)生在對(duì)信號(hào)的理論學(xué)習(xí)中,通過(guò)應(yīng)用該仿真平臺(tái),不僅強(qiáng)化模擬信號(hào)和數(shù)字通信理論的基本思想和核心概念,而且為學(xué)生的理解和應(yīng)用提供有力幫助,讓學(xué)生以專業(yè)化的身份進(jìn)入到今后的科研工作中。
圖6 64QAM時(shí)域頻域圖Fig.6 Spectrum of 64QAM
圖7 64QAM星座圖Fig.7 Constellation of 64QAM
本文主要介紹了基于Matlab圖形用戶界面GUI的通信信號(hào)實(shí)驗(yàn)平臺(tái)的設(shè)計(jì),并以DSB信號(hào)和 16QAM信號(hào)為例說(shuō)明回調(diào)函數(shù)與M文件的實(shí)現(xiàn)過(guò)程。學(xué)生可通過(guò)信號(hào)調(diào)制的時(shí)域頻域等仿真結(jié)果的分析,不僅驗(yàn)證了通信系統(tǒng)中的基礎(chǔ)理論,更提高他們對(duì)通信信號(hào)的各方面認(rèn)識(shí),鞏固了所學(xué)內(nèi)容。特別對(duì)缺乏通信硬件實(shí)驗(yàn)設(shè)備的學(xué)校來(lái)說(shuō),該軟件更具有實(shí)驗(yàn)價(jià)值。
[1]王峰,丁金林.基于MATLAB/GUI的數(shù)字通信系統(tǒng)虛擬實(shí)驗(yàn)平臺(tái)的設(shè)計(jì)[J].南通職業(yè)大學(xué)學(xué),2013,3(1):96-99.WANG Feng,DING Jin-lin.Virtual experiment platform design of digital communication system based on MATLAB/GUI[J].Journal of Nnatong Vocational College,2013,3(1):96-99.
[2]王帆,劉慧.基于Matlab GUI的數(shù)字圖像處理實(shí)驗(yàn)平臺(tái)設(shè)計(jì)[J].中國(guó)科技信息,2010(11):124-125.WANG Fan,LIU Hui.Experiment platform Design of Digital Communication system Based on MATLAB/GUI[J],Journal of Information Technology,2010(11):124-125.
[3]邱金蕙,王矞輝,李振全.基于Matlab/GUI的新型界面開(kāi)發(fā)方式[J].河北工業(yè)科技,2008,7(4):234-235.QIU Jin-hui,WANG Yu-hui,LI Zhen-quan.A new way to develop interface based on Matlab/GUI[J].Hebei Journal of Industrial Science and Technology,2008,7(4):234-235.
[4]秦輝,席裕庚.基于Matlab GUI的預(yù)測(cè)控制仿真平臺(tái)設(shè)計(jì)[J].系統(tǒng)仿真學(xué)報(bào),2006,10(10):2778-2779.QIN Hui,XI Yu-geng,Matlab GUI-Based Simulation Platform Design of Predictive Control[J].Journal of System Simulation,2006,10(10):2778-2779.
[5]陳亮,郝衛(wèi)東,喬建華.基于Matlab的濾波器分析界面設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2009(10):39-41.CHEN Liang,HAO Wei-dong,QIAO Jian-hua,Design of filteranalysisinterface based on matlab [J].Modern Electronic Technology,2009(10):39-41.
[6]賈建科,韓團(tuán)軍,朱寧洲.基于Matlab GUI的模擬帶通濾波器的設(shè)計(jì)[J].現(xiàn)代電子技術(shù).2010(10):58-60.JIA Jian-ke,HUAN Tuan-jun,ZHU Ning-zhou,Design of Analog Band-pass Filter Based on Matlab GUI[J].Modern Electronic Technology,2010(10):58-60.
[7]楊華為.基于MATLAB GUI的數(shù)據(jù)處理分析界面的設(shè)計(jì)與應(yīng)用[J].工業(yè)控制計(jì)算機(jī),2011(12):16-18.YANG Hua-wei,Interface of Data Processing and Analyzing Based on MATLAB GUI[J].Industrial Control Computer,2011(12):16-18.
[8]王巧花,葉平,黃民.基于MATLAB的圖形用戶界面(GUI)設(shè)計(jì)[J].煤礦機(jī)械,2005(3):60-62.WANG Qiao-hua,YE Ping,HUANG Min.Theinterface Design of GUI Based on MATLAB [J].Journal of Mine Machinery,2005(3):60-62.