基于Matlab 的通信信号实验平台的设计
2014-01-21万再莲
倪 磊,万再莲,周 玮
(四川师范大学成都学院 通信工程学院,四川 成都 611745)
国内众多学者都对Matlab信号仿真进行过研究,但这些研究都是基于Matlab的数字信号或者是模拟信号的仿真。而在国内的主流教材中,也都未涉及到信号产生的仿真界面。通信学科中的信号繁多复杂,学生在学完某类信号时,未能对数字和模拟信号进行详细的区分。很多高校由于教学学时及实验室条件的限制,很难达到让学生熟练掌握信号的教学要求,将Matlab仿真技术和GUI界面设计引入教学中[1],可弥补这方面的遗憾。因此,通过对通信学科中的信号进行归纳和总结,借助于现有的Matlab仿真软件,设计和编写出一个集模拟与数字信号调制于一体的仿真界面系统,在这种创新型平台上向学生展示通信系统的各类信号的处理。该平台具有良好的交互性,实用性和可扩展性[2],为学生提供了一个实验平台,能帮助供学生熟悉并掌握通信信号处理的基本理论和基本方法,例如模拟通信系统中的AM、DSB、SSB信号调制与解调信号的时域和频域波形、数字基带信号中的各种码型时域波形和PSK、FSK、ASK等数字调制信号等。
1 Matlab GUI设计工具简介
随着计算机技术的飞速发展,人与计算机的通信方式也发生了很大变化,从原来的命令行通讯方式到现在的图形界面下的交互方式,而现在多数的应用程序都是在图形化界面下运行的。
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的具体交互行为分别调用。
2 平台布局与设计
本平台的实现是在Matlab的图形用户界面(GUI)设计环境下完成[4]。通过GUIDE可以很方便地设计出各种符合要求的图形用户界面[5],考虑到平台的应用性,在设计时要遵循简单性、习惯性和直观性3个原则。
在界面设计的过程中,首先,分析界面所要求实现的主要功能,明确设计任务;其次,在稿纸上绘出界面草图,并站在学生使用的角度上审查该图;第三,根据构思,利用GUI设计出直观、简单的信号处理界面;最后,编写相关代码函数,并对设计中存在的问题进行修改及优化,直至检查无误。
2.1 建立GUI对象
GUI包含许多可以使软件终端与用户界面进行交互的用户界面组件,GUI实现的任务之一就是控制组件如何响应用户的行为[6]。在Matlab主界面的command window窗口中输入GUIDE,即弹出图形用户界面模板选择窗口,选择默认的空白(BLANK GUI)选项即可进入编辑界面[7]。
图1 Matlab/GUI开发环境Fig.1 Main matlab/GUI development
2.2 界面布局设计
通信类信号调制中存在有两类信号,即模拟信号与数字信号。据此,将信号的仿真实验平台中分为模拟信号波形仿真图和数字信号波形仿真图两大模块。
模拟信号的调制包括有调幅、调频和调相。而调幅中又包含普通调制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所示。
3 M文件的设计与编写
通过文本编辑框控件来显示模拟信号调制与数字信号调制的定义;使用单选按钮控件来实现信号类型的选择;完成控件布局之后,开始编制回调程序。在GUI编辑状态下用鼠标右键单击需要编写回调程序的控件,打开右键快捷菜单,从View Callbacks中选择一种回调方式[8]。在每一个控件的Callbacks函数里编写相应调制信号的代码。
3.1 M文件的设计
Matlab通过创建M文件为GUI控制程序提供了一个框架,即所有代码(含callback回调函数)都包含在应用程序M文件中。在完成图形界面的设计后,最主要的工作就是对控件的回调函数进行代码设计。下面分析程序设计流程及控件回调函数的编写。
3.2 程序设计流程
该实验平台在运行时,系统先进行初始化。弹出GUI界面窗口,判断点击的位置是否正确,不正确则重新输入。正确即可在相应信号的功能菜单中弹出相应的时域频谱图。程序流程如图3所示。
图3 程序流程图Fig.3 Program flow picture
3.3 回调函数编写
该软件的各控件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]。
4 仿真实例
通过编写完全部信号代码及调试后,可以实现平台中所有信号的波形。因篇幅有限,罗列模拟信号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
5 结束语
本文主要介绍了基于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.