国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于拍頻現(xiàn)象教學(xué)演示的Matlab Builder JA方法

2019-08-12 01:27:59鐘熙孫祥娥
電腦知識與技術(shù) 2019年16期

鐘熙 孫祥娥

摘要:采用JAVA和MATLAB混合編程技術(shù),解決目前實驗教學(xué)中拍頻現(xiàn)象演示不夠直觀的問題。應(yīng)用混合編程中的Matlab Builder JA技術(shù)將MATLAB中實現(xiàn)拍頻現(xiàn)象的M函數(shù)文件封裝成Java類,再利用JSP中的WebFigure標簽完成拍頻現(xiàn)象的在線演示。MATLAB圖形窗體從網(wǎng)頁中獨立出來,從而可以實現(xiàn)圖形的縮放和旋轉(zhuǎn)、圖形線條上某點對應(yīng)取值的顯示以及線條屬性的編輯等功能。這種方法使得MATLAB控件的豐富性在網(wǎng)頁中得到了最大程度的保留,同時,為MATLAB實驗教學(xué)相關(guān)軟件的開發(fā)提供了一種新的途徑。

關(guān)鍵詞:混合編程;拍頻現(xiàn)象;WebFigure;Matlab Builder JA

中圖法分類號:TP391.7? ? ? ? 文獻標識碼:A

文章編號:1009-3044(2019)16-0124-03

開放科學(xué)(資源服務(wù))標識碼(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 引言

在聲學(xué)中,節(jié)拍是由頻率略微不同的兩個聲波互相干擾所產(chǎn)生的。調(diào)動樂器時往往會伴隨著顫音的產(chǎn)生,這是由于兩個不同的音調(diào)被調(diào)整到極其相近,但卻又不完全相同而造成的,這時兩個音調(diào)之間存在著細微的頻率差異,正是此差異導(dǎo)致了合成音的周期性起伏,從而出現(xiàn)顫音;當(dāng)兩個頻率逐漸接近一致時,顫音現(xiàn)象減弱,直至完全消失。這里的顫音就是兩個音調(diào)相互干擾所產(chǎn)生的拍頻現(xiàn)象。

課堂教學(xué)中傳統(tǒng)的拍頻實驗一般采取的措施是取兩個頻率相同的音叉,敲擊其中一個使其附近的空氣振動,引發(fā)另一個音叉與之共鳴從而振動發(fā)聲[1],然而以這種方式演示的拍頻實驗很難讓學(xué)生真正理解和掌握拍頻現(xiàn)象的內(nèi)涵。

隨著計算機和互聯(lián)網(wǎng)應(yīng)用的普及,基于MATLAB Web 的應(yīng)用越來越受歡迎,。通過互聯(lián)網(wǎng)將數(shù)據(jù)發(fā)送給MATLAB Web服務(wù)器[2],再利用MATLAB豐富的算法庫以及強大的數(shù)值計算和繪圖功能,就可以獲取相應(yīng)直觀準確的圖形結(jié)果[3], 從而能夠解決上述拍頻現(xiàn)象演示不夠直觀的問題。采用MATLAB Web對拍頻現(xiàn)象在線演示的方法,能夠在較短時間內(nèi)增強學(xué)生對拍頻相關(guān)理論和現(xiàn)象的理解,同時,也使得教學(xué)過程更加方便靈活、生動有效。這樣,學(xué)生既理解了實驗內(nèi)容,又鍛煉了實驗操作能力,使得高校的教學(xué)宗旨得以實現(xiàn)。

2 實現(xiàn)方案與應(yīng)用原理

2.1 現(xiàn)有方案的介紹

目前Java調(diào)用MATLAB的方法有如下三種:

第一種是利用CORBA(Common Object Request Broker Architecture)實現(xiàn)訪問。在Java與C++之間可以通過CORBA完成通信, MATLAB也剛好提供了對C++語言編程的接口,Java和MATLAB通過使用相同的IDL接口,能夠完成客戶端對服務(wù)器端對象的方法調(diào)用[4];

第二種是利用JNI(Java Native Interface)技術(shù),JNI指的是本地編程接口,它定義了一種如何使用Java 程序調(diào)用非Java 程序的方法。通過JNI技術(shù)能夠?qū)崿F(xiàn)在Java應(yīng)用程序中調(diào)用MATLAB引擎函數(shù),MATLAB引擎將MATLAB作為一個計算引擎在后臺運行,從而能夠讓用戶使用C/C++或Fortran等語言應(yīng)用程序?qū)ATLAB進行訪問[5];

第三種是利用Matlab的COM Builder進行連接,在Matlab中利用COM Builder來構(gòu)建COM對象,從而使java基于COM+的應(yīng)用程序使用COM對象[6]。

2.2 本文采用的方案

本文采用第三種方案,即利用Matlab的COM Builder實現(xiàn)java與MATLAB的連接。Matlab的COM Builder也可叫作MATLAB Builder JA,它是Mathworks公司的一種面向應(yīng)用發(fā)布的產(chǎn)品[7],MATLAB Builder JA具有數(shù)值運算功能強大、程序設(shè)計方便靈活等優(yōu)點,并且替代了通過CGI 方式工作的傳統(tǒng)MATLAB Web Server組件[8]。

MATLAB Builder JA是將Matlab函數(shù)封裝成Java類,從而形成java組件或包,被封裝的Java 類可以被集成到Java 程序開發(fā)中,因此這些程序可以部署到裝有免費MATLAB Compiler Runtime(MCR)的Web服務(wù)器中,而無須安裝MATLAB軟件[9]。

2.3 應(yīng)用原理

利用Java調(diào)用Matlab函數(shù),Matlab相當(dāng)于服務(wù)器[10]。在Matlab的編輯器中編寫好要使用的函數(shù),Java程序就可以通過Matlab Builder for Java調(diào)用該函數(shù)[11]。在Matlab目錄下有一個WebFigure文件,該文件包含Matlab圖形與網(wǎng)頁端的接口,可以通過調(diào)用該文件在網(wǎng)頁端呈現(xiàn)Matlab的圖形窗體,所以不會存在瀏覽器兼容問題,使用普通的IE瀏覽器即可進行實驗展示。

3 拍頻的應(yīng)用——以兩個簡諧振動的合成為例

3.1 數(shù)學(xué)建模與封裝

3.1.1 建立拍頻信號數(shù)學(xué)模型

在信號處理中對拍頻現(xiàn)象的解釋,可以理解為兩個正弦信號的疊加過程[12]?,F(xiàn)在有兩個正弦信號,假設(shè)其頻率分別為[ωb+ω0]、[ωb-? ω0],根據(jù)拍頻的產(chǎn)生機理,當(dāng)[ωb]接近于零時,拍頻現(xiàn)象就會出現(xiàn)。由兩信號的頻率可知合成的信號為:

假設(shè)兩個正弦信號具有相同的幅度[Α=Α1=Α2],相位為[θ1=Φ+φ],[θ2=Φ-φ]那么可以得出[Φ=(θ1+θ2)/2],[φ=(φ1-φ2)/2],根據(jù)公式可推算出[13]:

這樣的結(jié)果類似于幅度調(diào)制時產(chǎn)生的現(xiàn)象,幅度調(diào)制的波形如圖1所示,疊加信號的最大值和最小值不再恒定,隨著時間的變化而變化[14]。從圖1中的包絡(luò)可以看出拍頻的特征,這里幅度調(diào)制中調(diào)制信號的頻率即為拍頻。

3.1.2將編寫的M文件打包成java類

本實驗使用的是Matlab2016的版本。按照上述數(shù)學(xué)模型編寫M文件,并在Matlab的命令窗口輸入“deploytool”命令,選擇“Library Compiler”選項,啟動Matlab Compiler界面,在Type列表框中選擇編譯類型為Java Package,并添加編寫好的M文件至Exported Functions框中,如下圖2所示。

包名和類名由軟件自動生成,包名默認與M文件名一致,類名默認為Class1。在Matlab Compiler界面的右上角點擊Package按鈕,對M文件進行封裝,封裝完成后,即可在封裝項目所在的目錄中自動生成相關(guān)文件夾,該文件夾包含了三個子文件夾, 其中for_testing子文件夾中存放了封裝好的Java包以及相關(guān)類的代碼文件[15]。

3.2 利用java實現(xiàn)拍頻信號的在線演示

客戶端將對用戶請求的響應(yīng)結(jié)果在Jsp中進行顯示,然后利用Servlet中的session屬性共享來連接Jsp和Servlet之間的通信,而Matlab生成的圖形對象可以通過Servlet訪問得到。具體的實現(xiàn)步驟如下:

1)在Java開發(fā)工具Eclipse 中新建Java web項目以及jsp文件,分別命名為MathPlotBeating和Plot,再為該項目導(dǎo)入javabuilder.jar包和在3.1步驟中生成的PlotBeating.jar包。作為MATLAB builder組件中的一個重要成員,javabuilder.jar包使得在當(dāng)前的項目中能夠成功的使用java包中定義的類。同時,項目中的WEBContent\WEB-INF\lib目錄下也需要導(dǎo)入這兩個包,并將webfigures.tld標簽庫拷貝到WEB-INF下,Webfigures.tld是顯示matlab圖形的必要文件。

2)在jsp文件的頭部聲明引用webfigures.tld文件和WebFigure庫,同時需要引用在3.1步驟中Matlab編譯生成的java類,以及一些必要的類和接口的定義:

3)JSP程序中實現(xiàn)本文方法的核心部分代碼如下:

由于本項目是由java和Matlab混合編程實現(xiàn)的,并且要實現(xiàn)Servlet 和Jsp 之間通信,而Matlab函數(shù)并不能接收Servlet中提供的參數(shù),所以在上述代碼中,不能直接將參數(shù)作為實參傳遞給由Matlab編寫的PlotBeating函數(shù)。但MWNumericArray類可以作為Servlet和Matlab的過渡數(shù)據(jù)類型,這里可以通過將MWNumericArray類對象作為實參來傳遞;在Servlet中將函數(shù)返回的對象強制轉(zhuǎn)化成MWJavaObjectRef 類型;最后通過訪問Session來實現(xiàn)Session 屬性的共享。

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

其中,利用元素為本項目的servlet分配一個名稱MyWF,并列出該servlet的類的完整路徑,再由元素在servlet和url樣式之間定義一個關(guān)系映射,在服務(wù)頁面地址欄輸入該映射路徑就可以訪問到對應(yīng)的servlet,這里要求兩個元素下的名稱相同,以保證關(guān)系映射的成功建立。

3.3 拍頻應(yīng)用的調(diào)試結(jié)果

將做好的項目部署到開源web應(yīng)用服務(wù)器Tomcat上,同時啟動Tomcat,打開瀏覽器,在瀏覽器最上方地址欄中輸入地址http://localhost:8080/MathPlotBeating/Plot.jsp,即可出現(xiàn)理想的拍頻信號顯示結(jié)果?,F(xiàn)為該頁面做超鏈接,在html頁面中添加按鈕,如圖3所示。

點擊拍頻信號的網(wǎng)頁端matlab顯示鏈接,跳轉(zhuǎn)到新的頁面,即為預(yù)期的拍頻現(xiàn)象在線仿真結(jié)果。實驗結(jié)果如圖4所示。MATLAB圖形界面沒有嵌入到網(wǎng)頁里,而是獨立出來,在該界面中能夠?qū)崿F(xiàn)圖形具體點對應(yīng)取值的顯示以及線條屬性的編輯等功能,這點區(qū)別于前人的研究中圖形結(jié)果嵌入在網(wǎng)頁里面,且只能夠?qū)D形進行放大、縮小以及旋轉(zhuǎn)的操作。

4 結(jié)束語

利用MATLAB Builder JA組件實現(xiàn)了拍頻信號的網(wǎng)頁端在線顯示,最關(guān)鍵是實現(xiàn)了將MATLAB圖形窗體與網(wǎng)頁分離,單獨呈現(xiàn)于網(wǎng)頁端之外,這樣就使得MATLAB圖形界面中的控件不會受到網(wǎng)頁端的影響而丟失,從而不僅保留了對圖形進行縮放與旋轉(zhuǎn)操作的控件,而且能夠?qū)崿F(xiàn)圖形中具體點對應(yīng)取值的顯示以及對線條屬性的編輯等功能,具有操作簡單、使用方便等特點,同時,該方法建立了新的可視化環(huán)境,能夠加深學(xué)生對拍頻現(xiàn)象的理解和認識,從而達到理想的教學(xué)目的。

參考文獻:

[1] 宋璐,馮艷平,衛(wèi)亞博.基于MATLAB GUI的拍頻實現(xiàn)方法的研究[J].大學(xué)物理實驗,2012,25(3):98-99.

[2] 高旻,曾一,涂爭光.MATLAB的Web 技術(shù)應(yīng)用與方法探討[J].計算機應(yīng)用,2004,24(6):188-190.

[3] 郭志強,黃燕,吳平.Java-MATLAB集成方法的分析與探討[J].農(nóng)業(yè)網(wǎng)絡(luò)信息,2006,(6):15-17.

[4] 袁林,巴力登,何從坤.VC與MATLAB混合編程在圖像處理中的應(yīng)用[J].微計算機信息,2008,(12):297-299.

[5] 廖云伢.基于Java與Matlab集成的數(shù)字通信原理虛擬實驗平臺的設(shè)計與實現(xiàn)[D].長沙:中南大學(xué),2007:12-14.

[6] 孔慶霞,朱全銀.Matlab在線實驗系統(tǒng)關(guān)鍵技術(shù)的研究與實現(xiàn)[J].實驗技術(shù)與管理,2009,26(4):87-89.

[7] 莊思發(fā).利用MATLAB Web Server實現(xiàn)在線作圖[J].計算機系統(tǒng)應(yīng)用,2010,19(6):223-225.

[8] 蔡云鷺.基于Java Web和Matlab Java Bulider的遠程數(shù)學(xué)實驗教學(xué)系統(tǒng)設(shè)計[J].實驗技術(shù)與管理,2012,29(1):83-85.

[9] 周小娟.Java-Matlab混合編程的研究[J].電子設(shè)計工程, 2013,21(2):16-18.

[10] 羅俊奇,陳偉,廖翔云.MATLAB仿真的遠程實現(xiàn)[J].微計算機信信息,2007,(28):207-209.

[11] 任文杰,王偉,馬松輝.MATLAB和JAVA的混合編程研究與實現(xiàn)[J].測控技術(shù),2009,28(1):77-79.

[12] 鐘可君,張海林.基于Matlab GUI設(shè)計的光學(xué)實驗仿真[J].實驗室研究與探索,2010,29(10):52-54.

[13] 吳迪,孫洪毅,劉軍等.基于Matlab Simulink的物理實驗——簡諧振動仿真研究[J].大學(xué)物理實驗,2010,23(6):72-74.

[14] 肖昭然,王凱.基于Web的虛擬現(xiàn)實仿真設(shè)計[J].系統(tǒng)仿真學(xué)報,2006,27(10):2575-2581.

[15] 金萬根,高汝維,王宇紅.利用Matlab Java Builder開發(fā)Web遠程仿真實驗系統(tǒng)的新思路[J].微計算機信息,2011,27(4):64-66.

【通聯(lián)編輯:王力】

芦山县| 盐源县| 天水市| 塔城市| 墨竹工卡县| 晋州市| 昌邑市| 大化| 阿拉善盟| 兴山县| 纳雍县| 长岭县| 西林县| 寻甸| 南投市| 邯郸县| 法库县| 广宗县| 甘洛县| 广丰县| 醴陵市| 肇州县| 峨边| 定陶县| 明水县| 庆城县| 嘉祥县| 明星| 蓬溪县| 逊克县| 宜君县| 海城市| 偃师市| 宜兰市| 安溪县| 大新县| 隆林| 收藏| 昆明市| 八宿县| 仁怀市|