倪 磊,萬再蓮,周 瑋
(四川師范大學成都學院 通信工程學院,四川 成都 611745)
國內眾多學者都對Matlab信號仿真進行過研究,但這些研究都是基于Matlab的數字信號或者是模擬信號的仿真。而在國內的主流教材中,也都未涉及到信號產生的仿真界面。通信學科中的信號繁多復雜,學生在學完某類信號時,未能對數字和模擬信號進行詳細的區分。很多高校由于教學學時及實驗室條件的限制,很難達到讓學生熟練掌握信號的教學要求,將Matlab仿真技術和GUI界面設計引入教學中[1],可彌補這方面的遺憾。因此,通過對通信學科中的信號進行歸納和總結,借助于現有的Matlab仿真軟件,設計和編寫出一個集模擬與數字信號調制于一體的仿真界面系統,在這種創新型平臺上向學生展示通信系統的各類信號的處理。該平臺具有良好的交互性,實用性和可擴展性[2],為學生提供了一個實驗平臺,能幫助供學生熟悉并掌握通信信號處理的基本理論和基本方法,例如模擬通信系統中的AM、DSB、SSB信號調制與解調信號的時域和頻域波形、數字基帶信號中的各種碼型時域波形和PSK、FSK、ASK等數字調制信號等。
隨著計算機技術的飛速發展,人與計算機的通信方式也發生了很大變化,從原來的命令行通訊方式到現在的圖形界面下的交互方式,而現在多數的應用程序都是在圖形化界面下運行的。
Matlab圖形用戶界面開發環境簡稱GUIDE(matlab graphical user interface development environment),其主要是一個界面設計工具集。GUI(Graphical User Interface)就是基于數據處理軟件Matlab的圖形用戶界面開發環境。在Matlab7.0中,GUI包含多種圖形對象的界面,包括圖形顯示區域、功能按鈕及自定義的功能菜單等。Matlab將GUI所支持的用戶控件都集成起來,同時提供界面外觀、屬性和行為響應方法的設置方法。為了讓界面實現各種功能,需要對各個圖形對象進行布局。當用戶激活對應的GUI對象時,就能執行相應的屬性設置。最后,必須保存和發布自己創建的GUI,使得用戶可以應用GUI對象[3]。
在Matlab中,可以將所有對象用M文件進行創建及編寫。將GUI視為Matlab對象,可以使用M文件來創建GUI。通過GUIDE創建GUI對象,執行效率高,可以交互式地進行組件布局,還能生成保存和發布GUI的對應文件[3]。
GUI將用戶設計保存好的界面保存在FIG資源文件中,同時自動生成包含圖形用戶界面初始化和組件界面布局控制代碼的M文件。該M文件為實現回調函數的編寫提供了一個參考框架。而FIG文件是一個二進制文件,主要是對對象句柄進行保存,保存用戶創建圖形窗口時設計的屬性。M文件中包含GUI設計、控制函數及控件的回調函數,主要用來控制界面展開時的各種特征。該文件可以分為GUI初始化和回調函數2個部分,控件的回調函數可根據用戶與GUI的具體交互行為分別調用。
本平臺的實現是在Matlab的圖形用戶界面(GUI)設計環境下完成[4]。通過GUIDE可以很方便地設計出各種符合要求的圖形用戶界面[5],考慮到平臺的應用性,在設計時要遵循簡單性、習慣性和直觀性3個原則。
在界面設計的過程中,首先,分析界面所要求實現的主要功能,明確設計任務;其次,在稿紙上繪出界面草圖,并站在學生使用的角度上審查該圖;第三,根據構思,利用GUI設計出直觀、簡單的信號處理界面;最后,編寫相關代碼函數,并對設計中存在的問題進行修改及優化,直至檢查無誤。
GUI包含許多可以使軟件終端與用戶界面進行交互的用戶界面組件,GUI實現的任務之一就是控制組件如何響應用戶的行為[6]。在Matlab主界面的command window窗口中輸入GUIDE,即彈出圖形用戶界面模板選擇窗口,選擇默認的空白(BLANK GUI)選項即可進入編輯界面[7]。

圖1 Matlab/GUI開發環境Fig.1 Main matlab/GUI development
通信類信號調制中存在有兩類信號,即模擬信號與數字信號。據此,將信號的仿真實驗平臺中分為模擬信號波形仿真圖和數字信號波形仿真圖兩大模塊。
模擬信號的調制包括有調幅、調頻和調相。而調幅中又包含普通調制AM信號、抑制載波的雙邊帶DSB信號和抑制載波的單邊帶SSB信號。數字信號調制中則包括幅移鍵控、頻移鍵控和相移鍵控三類。通過將通信中遇到的數字信號調制進行歸納,幅移鍵控ASK是通過改變載波信號的振幅大小來表示數字信號 “0”和 “1”的,包括有2ASK,四進制MASK。頻移鍵控FSK是利用兩個不同頻率的振蕩信號來表示數字信號“0”和“1”的,其包括有 2FSK,4FSK,8FSK,最小頻移鍵控MSK,高斯濾波最小頻移鍵控GMSK。相移鍵控PSK是根據數字基帶信號的兩個電平使載波相位在兩個不同的數值之間切換的一種相位調制方法,包括BPSK,8PSK,16PSK,QPSK,OQPSK,UQPSK。正交幅度調制是利用正交的載波對兩路信號分別進行雙邊帶抑制載波調幅形成的,通常有16進制QAM,64QAM,32QAM,128QAM。
將設計好的界面文件保存運行,就可以看到該平臺在運行時顯示出的實際效果,如圖2所示。
通過文本編輯框控件來顯示模擬信號調制與數字信號調制的定義;使用單選按鈕控件來實現信號類型的選擇;完成控件布局之后,開始編制回調程序。在GUI編輯狀態下用鼠標右鍵單擊需要編寫回調程序的控件,打開右鍵快捷菜單,從View Callbacks中選擇一種回調方式[8]。在每一個控件的Callbacks函數里編寫相應調制信號的代碼。
Matlab通過創建M文件為GUI控制程序提供了一個框架,即所有代碼(含callback回調函數)都包含在應用程序M文件中。在完成圖形界面的設計后,最主要的工作就是對控件的回調函數進行代碼設計。下面分析程序設計流程及控件回調函數的編寫。
該實驗平臺在運行時,系統先進行初始化。彈出GUI界面窗口,判斷點擊的位置是否正確,不正確則重新輸入。正確即可在相應信號的功能菜單中彈出相應的時域頻譜圖。程序流程如圖3所示。

圖3 程序流程圖Fig.3 Program flow picture
該軟件的各控件callback回調函數根據信號類型的不同而各有不同。如數字信號分為幅移鍵控、頻移鍵控和相移鍵控,而每種鍵控又有多種調制方式。當選擇幅移鍵控控件按鈕后,則選擇該控件下的調制方式,方能彈出所需的信號頻譜。
對代碼編寫中,首先先統一變量符號,其次進行調制信號類型的分類編碼,便于輸入輸出變量的傳遞及信號的擴充,通過定義data_I(表示輸出I路信號)和data_Q(表示輸出Q路信號),modulate_fre定義信號碼率,sample_fre表示采樣頻率,sample_num表示采樣點數,調用統一函數function[data_Idata_Q]=Singal_modulate(mod_tpye,mod_v,mod_v2,sam_fre,sam_l)使代碼編寫更規范;最后根據matlab自帶的函數分別進行設計。
本設計中將所有信號調制放置在一個M文件中,通過callback函數調用該M文件。在完成了各個空間的callback函數編寫后,對該軟件功能進行調試,以確保每項功能都能正確的相應用戶的操作,彈出正確的頻譜圖。
鑒于篇幅有限,僅提供本實驗平臺信號中的DSB信號和16QAM信號代碼。
DSB信號callback函數部分代碼如下:
time_t=0:1/sample_fre:(sample_num-1)/sample_fre;%時間坐標
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)));%設置升余弦濾波器參數
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信號的幅度譜')
ff=[-2047:2048].*sample_fre/4096;
subplot(212);plot(ff,abs(fftshift(fft(data_I+1j*data_Q,4096))));
xlabel('DSB信號的頻譜')
end
16QAM callback函數部分代碼如下:
nsamp=floor(sample_fre/modulate_fre);%采樣率設置
data_num=floor(sample_num/nsamp)+1;
data=randint(data_num,1,16);
y=modulate(modem.qammod(16),data);%調制函數
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
在編寫完軟件的各代碼后,應對所設計的軟件代碼進行優化。打開軟件中使用次數較多的程序,利用Matlab的自帶函數profile程序執行耗時剖析功能函數對程序中耗時情況進行分析,完后進行改進,以提高系統的執行效率[2]。
通過編寫完全部信號代碼及調試后,可以實現平臺中所有信號的波形。因篇幅有限,羅列模擬信號DSB調制和數字信號中4ASK和64QAM的波形圖,如圖4到圖7所示。

圖4 雙邊帶信號的頻譜Fig.4 Spectrum of DSB

圖5 4ASK信號時域頻域圖Fig.5 Spectrum of 4ASK
該實驗平臺的搭建,可以讓教師在講授信號調制理論的過程中,通過結合該軟件,可增強授課內容的豐富性及延展性,拓展了實踐性教學環節。讓學生在對信號的理論學習中,通過應用該仿真平臺,不僅強化模擬信號和數字通信理論的基本思想和核心概念,而且為學生的理解和應用提供有力幫助,讓學生以專業化的身份進入到今后的科研工作中。

圖6 64QAM時域頻域圖Fig.6 Spectrum of 64QAM

圖7 64QAM星座圖Fig.7 Constellation of 64QAM
本文主要介紹了基于Matlab圖形用戶界面GUI的通信信號實驗平臺的設計,并以DSB信號和 16QAM信號為例說明回調函數與M文件的實現過程。學生可通過信號調制的時域頻域等仿真結果的分析,不僅驗證了通信系統中的基礎理論,更提高他們對通信信號的各方面認識,鞏固了所學內容。特別對缺乏通信硬件實驗設備的學校來說,該軟件更具有實驗價值。
[1]王峰,丁金林.基于MATLAB/GUI的數字通信系統虛擬實驗平臺的設計[J].南通職業大學學,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的數字圖像處理實驗平臺設計[J].中國科技信息,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的新型界面開發方式[J].河北工業科技,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的預測控制仿真平臺設計[J].系統仿真學報,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]陳亮,郝衛東,喬建華.基于Matlab的濾波器分析界面設計[J].現代電子技術,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]賈建科,韓團軍,朱寧洲.基于Matlab GUI的模擬帶通濾波器的設計[J].現代電子技術.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的數據處理分析界面的設計與應用[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)設計[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.