网站首页  词典首页

请输入您要查询的论文:

 

标题 基于拍频现象教学演示的Matlab Builder JA方法
范文

    钟熙 孙祥娥

    

    

    

    摘要:采用JAVA和MATLAB混合编程技术,解决目前实验教学中拍频现象演示不够直观的问题。应用混合编程中的Matlab Builder JA技术将MATLAB中实现拍频现象的M函数文件封装成Java类,再利用JSP中的WebFigure标签完成拍频现象的在线演示。MATLAB图形窗体从网页中独立出来,从而可以实现图形的缩放和旋转、图形线条上某点对应取值的显示以及线条属性的编辑等功能。这种方法使得MATLAB控件的丰富性在网页中得到了最大程度的保留,同时,为MATLAB实验教学相关软件的开发提供了一种新的途径。

    关键词:混合编程;拍频现象;WebFigure;Matlab Builder JA

    中图法分类号:TP391.7? ? ? ? 文献标识码:A

    文章编号:1009-3044(2019)16-0124-03

    开放科学(资源服务)标识码(OSID):

    Abstract: To solve the nonintuitive demonstration problem of beat phenomenon, the mixed programming technology is used in experimental teaching. The Matlab Builder JA technology of the mixed programming is used to package the M file which produces beat phenomenon into Java class, and the online display of beat phenomenon based on the JSP WebFigure label is completed. In the result, The MATLAB graphics window is presented independently from the web page, which leads the functions that graphics scaling and rotation, corresponding value display and graphics property edit to be achieved. This method preserves the richness of MATLAB control to the greatest extent on the web page, and a new approach to develop the related softwares of MATLAB experimental teaching emerges in the meanwhile.

    Key words: Mixed programming; Beat phenomenon; WebFigure; Matlab Builder JA

    1 引言

    在声学中,节拍是由频率略微不同的两个声波互相干扰所产生的。调动乐器时往往会伴随着颤音的产生,这是由于两个不同的音调被调整到极其相近,但却又不完全相同而造成的,这时两个音调之间存在着细微的频率差异,正是此差异导致了合成音的周期性起伏,从而出现颤音;当两个频率逐渐接近一致时,颤音现象减弱,直至完全消失。这里的颤音就是两个音调相互干扰所产生的拍频现象。

    课堂教学中传统的拍频实验一般采取的措施是取两个频率相同的音叉,敲击其中一个使其附近的空气振动,引发另一个音叉与之共鸣从而振动发声[1],然而以这种方式演示的拍频实验很难让学生真正理解和掌握拍频现象的内涵。

    随着计算机和互联网应用的普及,基于MATLAB Web 的应用越来越受欢迎,。通过互联网将数据发送给MATLAB Web服务器[2],再利用MATLAB丰富的算法库以及强大的数值计算和绘图功能,就可以获取相应直观准确的图形结果[3], 从而能够解决上述拍频现象演示不够直观的问题。采用MATLAB Web對拍频现象在线演示的方法,能够在较短时间内增强学生对拍频相关理论和现象的理解,同时,也使得教学过程更加方便灵活、生动有效。这样,学生既理解了实验内容,又锻炼了实验操作能力,使得高校的教学宗旨得以实现。

    2 实现方案与应用原理

    2.1 现有方案的介绍

    目前Java调用MATLAB的方法有如下三种:

    第一种是利用CORBA(Common Object Request Broker Architecture)实现访问。在Java与C++之间可以通过CORBA完成通信, MATLAB也刚好提供了对C++语言编程的接口,Java和MATLAB通过使用相同的IDL接口,能够完成客户端对服务器端对象的方法调用[4];

    第二种是利用JNI(Java Native Interface)技术,JNI指的是本地编程接口,它定义了一种如何使用Java 程序调用非Java 程序的方法。通过JNI技术能够实现在Java应用程序中调用MATLAB引擎函数,MATLAB引擎将MATLAB作为一个计算引擎在后台运行,从而能够让用户使用C/C++或Fortran等语言应用程序对MATLAB进行访问[5];

    第三种是利用Matlab的COM Builder进行连接,在Matlab中利用COM Builder来构建COM对象,从而使java基于COM+的应用程序使用COM对象[6]。

    2.2 本文采用的方案

    本文采用第三种方案,即利用Matlab的COM Builder实现java与MATLAB的连接。Matlab的COM Builder也可叫作MATLAB Builder JA,它是Mathworks公司的一种面向应用发布的产品[7],MATLAB Builder JA具有数值运算功能强大、程序设计方便灵活等优点,并且替代了通过CGI 方式工作的传统MATLAB Web Server组件[8]。

    MATLAB Builder JA是将Matlab函数封装成Java类,从而形成java组件或包,被封装的Java 类可以被集成到Java 程序开发中,因此这些程序可以部署到装有免费MATLAB Compiler Runtime(MCR)的Web服务器中,而无须安装MATLAB软件[9]。

    2.3 应用原理

    利用Java调用Matlab函数,Matlab相当于服务器[10]。在Matlab的编辑器中编写好要使用的函数,Java程序就可以通过Matlab Builder for Java调用该函数[11]。在Matlab目录下有一个WebFigure文件,该文件包含Matlab图形与网页端的接口,可以通过调用该文件在网页端呈现Matlab的图形窗体,所以不会存在浏览器兼容问题,使用普通的IE浏览器即可进行实验展示。

    3 拍频的应用——以两个简谐振动的合成为例

    3.1 数学建模与封装

    3.1.1 建立拍频信号数学模型

    在信号处理中对拍频现象的解释,可以理解为两个正弦信号的叠加过程[12]。现在有两个正弦信号,假设其频率分别为[ωb+ω0]、[ωb-? ω0],根据拍频的产生机理,当[ωb]接近于零时,拍频现象就会出现。由两信号的频率可知合成的信号为:

    假设两个正弦信号具有相同的幅度[Α=Α1=Α2],相位为[θ1=Φ+φ],[θ2=Φ-φ]那么可以得出[Φ=(θ1+θ2)/2],[φ=(φ1-φ2)/2],根据公式可推算出[13]:

    这样的结果类似于幅度调制时产生的现象,幅度调制的波形如图1所示,叠加信号的最大值和最小值不再恒定,随着时间的变化而变化[14]。从图1中的包络可以看出拍频的特征,这里幅度调制中调制信号的频率即为拍频。

    3.1.2将编写的M文件打包成java类

    本实验使用的是Matlab2016的版本。按照上述数学模型编写M文件,并在Matlab的命令窗口输入“deploytool”命令,选择“Library Compiler”选项,启动Matlab Compiler界面,在Type列表框中选择编译类型为Java Package,并添加编写好的M文件至Exported Functions框中,如下图2所示。

    包名和类名由软件自动生成,包名默认与M文件名一致,类名默认为Class1。在Matlab Compiler界面的右上角点击Package按钮,对M文件进行封装,封装完成后,即可在封装项目所在的目录中自动生成相关文件夹,该文件夹包含了三个子文件夹, 其中for_testing子文件夹中存放了封装好的Java包以及相关类的代码文件[15]。

    3.2 利用java实现拍频信号的在线演示

    客户端将对用户请求的响应结果在Jsp中进行显示,然后利用Servlet中的session属性共享来连接Jsp和Servlet之间的通信,而Matlab生成的图形对象可以通过Servlet访问得到。具体的实现步骤如下:

    1)在Java开发工具Eclipse 中新建Java web项目以及jsp文件,分别命名为MathPlotBeating和Plot,再为该项目导入javabuilder.jar包和在3.1步骤中生成的PlotBeating.jar包。作为MATLAB builder组件中的一个重要成员,javabuilder.jar包使得在当前的项目中能够成功的使用java包中定义的类。同时,项目中的WEBContent\WEB-INF\lib目录下也需要导入这两个包,并将webfigures.tld标签库拷贝到WEB-INF下,Webfigures.tld是显示matlab图形的必要文件。

    2)在jsp文件的头部声明引用webfigures.tld文件和WebFigure库,同时需要引用在3.1步骤中Matlab编译生成的java类,以及一些必要的类和接口的定义:

    3)JSP程序中实现本文方法的核心部分代码如下:

    由于本项目是由java和Matlab混合编程实现的,并且要实现Servlet 和Jsp 之间通信,而Matlab函数并不能接收Servlet中提供的参数,所以在上述代码中,不能直接将参数作为实参传递给由Matlab编写的PlotBeating函数。但MWNumericArray类可以作为Servlet和Matlab的过渡数据类型,这里可以通过将MWNumericArray类对象作为实参来传递;在Servlet中将函数返回的对象强制转化成MWJavaObjectRef 类型;最后通过访问Session来实现Session 属性的共享。

    4)javabuilder.jar包中需要使用到WebFiguresServlet,通过web.xml文件對其进行配置,配置代码如下:

    其中,利用元素为本项目的servlet分配一个名称MyWF,并列出该servlet的类的完整路径,再由元素在servlet和url样式之间定义一个关系映射,在服务页面地址栏输入该映射路径就可以访问到对应的servlet,这里要求两个元素下的名称相同,以保证关系映射的成功建立。

    3.3 拍频应用的调试结果

    将做好的项目部署到开源web应用服务器Tomcat上,同时启动Tomcat,打开浏览器,在浏览器最上方地址栏中输入地址http://localhost:8080/MathPlotBeating/Plot.jsp,即可出现理想的拍频信号显示结果。现为该页面做超链接,在html页面中添加按钮,如图3所示。

    点击拍频信号的网页端matlab显示链接,跳转到新的页面,即为预期的拍频现象在线仿真结果。实验结果如图4所示。MATLAB图形界面没有嵌入到网页里,而是独立出来,在该界面中能够实现图形具体点对应取值的显示以及线条属性的编辑等功能,这点区别于前人的研究中图形结果嵌入在网页里面,且只能够对图形进行放大、缩小以及旋转的操作。

    4 结束语

    利用MATLAB Builder JA组件实现了拍频信号的网页端在线显示,最关键是实现了将MATLAB图形窗体与网页分离,单独呈现于网页端之外,这样就使得MATLAB图形界面中的控件不会受到网页端的影响而丢失,从而不仅保留了对图形进行缩放与旋转操作的控件,而且能够实现图形中具体点对应取值的显示以及对线条属性的编辑等功能,具有操作简单、使用方便等特点,同时,该方法建立了新的可视化环境,能够加深学生对拍频现象的理解和认识,从而达到理想的教学目的。

    参考文献:

    [1] 宋璐,冯艳平,卫亚博.基于MATLAB GUI的拍频实现方法的研究[J].大学物理实验,2012,25(3):98-99.

    [2] 高旻,曾一,涂争光.MATLAB的Web 技术应用与方法探讨[J].计算机应用,2004,24(6):188-190.

    [3] 郭志强,黄燕,吴平.Java-MATLAB集成方法的分析与探讨[J].农业网络信息,2006,(6):15-17.

    [4] 袁林,巴力登,何从坤.VC与MATLAB混合编程在图像处理中的应用[J].微计算机信息,2008,(12):297-299.

    [5] 廖云伢.基于Java与Matlab集成的数字通信原理虚拟实验平台的设计与实现[D].长沙:中南大学,2007:12-14.

    [6] 孔庆霞,朱全银.Matlab在线实验系统关键技术的研究与实现[J].实验技术与管理,2009,26(4):87-89.

    [7] 庄思发.利用MATLAB Web Server实现在线作图[J].计算机系统应用,2010,19(6):223-225.

    [8] 蔡云鹭.基于Java Web和Matlab Java Bulider的远程数学实验教学系统设计[J].实验技术与管理,2012,29(1):83-85.

    [9] 周小娟.Java-Matlab混合编程的研究[J].电子设计工程, 2013,21(2):16-18.

    [10] 罗俊奇,陈伟,廖翔云.MATLAB仿真的远程实现[J].微计算机信信息,2007,(28):207-209.

    [11] 任文杰,王伟,马松辉.MATLAB和JAVA的混合编程研究与实现[J].测控技术,2009,28(1):77-79.

    [12] 钟可君,张海林.基于Matlab GUI设计的光学实验仿真[J].实验室研究与探索,2010,29(10):52-54.

    [13] 吳迪,孙洪毅,刘军等.基于Matlab Simulink的物理实验——简谐振动仿真研究[J].大学物理实验,2010,23(6):72-74.

    [14] 肖昭然,王凯.基于Web的虚拟现实仿真设计[J].系统仿真学报,2006,27(10):2575-2581.

    [15] 金万根,高汝维,王宇红.利用Matlab Java Builder开发Web远程仿真实验系统的新思路[J].微计算机信息,2011,27(4):64-66.

    【通联编辑:王力】

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/3/10 12:30:46