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

?

Java和Matlab混合編程及其應(yīng)用

2012-09-21 07:14:10楊麗萍
長春大學(xué)學(xué)報(bào) 2012年10期
關(guān)鍵詞:語譜調(diào)用分辨率

王 薇,楊麗萍

(長春大學(xué) 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,長春 130022)

0 引 言

隨著人工智能技術(shù)、信息技術(shù)的飛速發(fā)展和人類與計(jì)算機(jī)關(guān)系的日益密切,人們已經(jīng)不在滿足于計(jì)算機(jī)能播放和識(shí)別人類的語音信號(hào),而且還希望計(jì)算機(jī)能夠識(shí)別人類的語音情感信息,對(duì)人類情感的變化給出一定的判別。目前較多的語音情感研究都是從語音信號(hào)中提取出一些聲學(xué)特征,然后將特征化簡提取出一些更有效的特征,再用模式識(shí)別中的一些方法嘗試去識(shí)別語音信號(hào)中的情感[1]。語音情感特征值的提取與分析是語音情感識(shí)別的基礎(chǔ),而語音情感識(shí)別是一門綜合性的多領(lǐng)域的交叉學(xué)科,具有一定的難度,所以對(duì)情感語音信號(hào)的分析需要有一個(gè)十分方便且功能強(qiáng)大的工具。

MATLAB是matrix laboratory(矩陣實(shí)驗(yàn)室)的縮寫,它自1984年由美國MathWorks公司推出后,經(jīng)過不斷地改進(jìn)和發(fā)展,現(xiàn)已成為國際公認(rèn)的優(yōu)秀的工程應(yīng)用環(huán)境,已被廣泛的應(yīng)用到教學(xué)、工程計(jì)算、通信、圖像處理、自動(dòng)化控制等領(lǐng)域[2]。該軟件主要包括MATLAB和Simulink兩大部分。MATLAB語句書寫簡單,功能強(qiáng)大,一條語句往往相當(dāng)于其它高級(jí)語言中的幾十條、幾百條甚至幾千條語句[3]。在很大程度上,MATLAB擺脫了傳統(tǒng)非交互式程序設(shè)計(jì)語言(如C、Fortran)的編輯模式,為工程設(shè)計(jì)、科學(xué)研究以及必須進(jìn)行有效數(shù)值計(jì)算的眾多科學(xué)領(lǐng)域提供了一種全面的解決方案,成為國際科學(xué)計(jì)算軟件的先進(jìn)代表。

Java是由Sun公司發(fā)布的一種純面向?qū)ο蟪绦蛟O(shè)計(jì)語言。目前Sun公司已被Oracle公司收購。Java語言具有跨平臺(tái)性、可移植性、多線程、分布式、安全可靠等優(yōu)點(diǎn)。但Java程序設(shè)計(jì)語言對(duì)一些較為復(fù)雜的數(shù)值計(jì)算的編程較繁瑣,編程效率較低。對(duì)于情感語音特征值的分析與處理可以采用Java及Matlab的混合編程,實(shí)現(xiàn)二者的優(yōu)勢互補(bǔ)。

1 Java與Matlab混合編程的方法

Java與Matlab的混合編程可以是Java程序調(diào)用Matlab,也可以采用Matlab調(diào)用Java程序。

1.1 Matlab訪問Java程序

從Matlab 5.3版本起,在Matlab的安裝程序中集成了Java虛擬機(jī)JVM(Java Virtual Machine),這樣用戶就可以通過Matlab的命令訪問Java命令解釋器,完成對(duì)象的創(chuàng)建和訪問過程。Matlab訪問Java程序具有以下優(yōu)點(diǎn):

(1)通過訪問Java API擴(kuò)展Matlab功能,例如一些輸入輸出功能及網(wǎng)絡(luò)功能,Matlab完全可以通過Java中的URL類訪問網(wǎng)絡(luò)上的資源;

(2)通過訪問第三方提供的Java類庫提高編程的重用率;

(3)在Matlab中較容易地構(gòu)建Java對(duì)象,可以用Java或是Matlab的語法訪問Java對(duì)象中的方法;

(4)較容易地完成Matlab及Java之間的對(duì)象傳遞或是數(shù)值傳遞。

Matlab訪問Java中的類主要有三個(gè)來源:一是Java類庫中的類;二是第三方軟件提供者提供的類;三是用戶根據(jù)需求自己創(chuàng)建的類。Matlab加載類時(shí)在類路徑中查找所需要的類,因此Java類要加載到Matlab中首先要在Matlab中設(shè)置類所在的路徑。Matlab中的Java類路徑有靜態(tài)路徑與動(dòng)態(tài)路徑兩種:靜態(tài)路徑是在Matlab啟動(dòng)時(shí)加載的,在Matlab運(yùn)行期間不能更改的路徑;動(dòng)態(tài)路徑則可以在任何時(shí)間進(jìn)行加載和修改。在Matlab提示符狀態(tài)下可使用javaclasspath查看當(dāng)前的靜態(tài)路徑與動(dòng)態(tài)路徑設(shè)置,若要修改靜態(tài)路徑的設(shè)置內(nèi)容可先使用witch classpath.txt命令查看classpath.txt靜態(tài)類路徑文件所在的位置,再進(jìn)一步用edit classpath.txt修改文件內(nèi)容。定義動(dòng)態(tài)路徑時(shí)使用javaclasspath命令,修改動(dòng)態(tài)路徑時(shí)可使用javaaddpath和javarmpath完成。

當(dāng)確定Matlab中所要用的Java類存在后,可用在Matlab程序中使用import命令將Java類或Java類所在的包完全導(dǎo)入到Matlab程序中,以便于在Matlab程序中使用。例如:

import java.lang.String;

import java.util.*;

import java.aut.*;

import java.util.Enumeration;

而在Matlab中使用類中的方法與Java中類似,同樣是點(diǎn)分隔符完全對(duì)類中方法的訪問。但是應(yīng)注意的是要在MATLAB中調(diào)用的變量或方法必須要聲明為public類型[2]。

1.2 Java程序訪問Matlab

Java程序訪問Matlab主要有三種方式:

(1)利用COM對(duì)象實(shí)現(xiàn)訪問

COM是指通用對(duì)象模型(Common Object Model),是Microsoft推出的一個(gè)二進(jìn)制代碼標(biāo)準(zhǔn)。此標(biāo)準(zhǔn)包括規(guī)范和實(shí)現(xiàn)兩大部分,這些規(guī)范不依賴于任何的語言和操作系統(tǒng)。在Matlab中構(gòu)建COM對(duì)象需要使用ComBuilder完成Matlab算法到COM對(duì)象的轉(zhuǎn)換,從而使Java、C/C++、VB等基于COM+的應(yīng)用程序使用COM對(duì)象。

(2)利用CORBA實(shí)現(xiàn)訪問

CORBA是指公共對(duì)象請(qǐng)求代理結(jié)構(gòu)(Common Object Request Broker Architecture),它是體系結(jié)構(gòu)最完整、最清晰,跨越平臺(tái)最多的構(gòu)件模型[4]。使用CORBA連接Matlab十分復(fù)雜,開發(fā)效率低[5]。

(3)利用JNI技術(shù)實(shí)現(xiàn)訪問

JNI是指本地編程接口(Java Native Interface),Matlab向C/C++語言提供了Matlab Engine函數(shù),Java通過JNI技術(shù)調(diào)用這些函數(shù)實(shí)現(xiàn)對(duì)Matlab的訪問。Matlab Engine是指Matlab提供的一種面向C/C++和Fortran語言的接口函數(shù),應(yīng)用程序的前端程序是用C或Java實(shí)現(xiàn)的GUI,而應(yīng)用程序的后端采用Matlab編程,這樣可以提高編程效率,縮短編程時(shí)間。用戶應(yīng)用程序使用Matlab的Engine函數(shù)時(shí),一個(gè)新的Matlab進(jìn)程會(huì)產(chǎn)生,通過控制該進(jìn)程完成計(jì)算及繪圖任務(wù)。

2 COM技術(shù)實(shí)現(xiàn)語譜圖讀取

情感語音分析中常用的特征值分為兩類:一是韻律特征;另一是音質(zhì)特征。而各分類中又包含著多個(gè)特征值的選取,如短時(shí)能量、基音、強(qiáng)度、共振峰、語譜圖分析等。

2.1 語譜圖

語譜圖主要用于反映語音信號(hào)動(dòng)態(tài)頻率特征,在語音分析中具有極其重要的實(shí)用價(jià)值。有時(shí)也可以把語譜圖看作是可視語言。語譜圖的水平方向表示時(shí)間軸,垂直方向表示頻率軸,圖上的灰度條紋則可表示各個(gè)時(shí)間點(diǎn)的語音短時(shí)譜。語譜圖上因其不同的灰度,形成不同的紋路,稱之為“聲紋”。聲紋因人而異,所以語譜圖在司法、安全等場合得到廣泛應(yīng)用。

語譜圖包括時(shí)間分辨率和頻率分辨率,這兩個(gè)分辨率均由窗函數(shù)決定。時(shí)間分辨率越高,則時(shí)間波形的每個(gè)周期及共振峰隨時(shí)間的變化可以觀察得越明顯。但若頻率分辨率低,在語譜圖上則不足以分辨出由于激勵(lì)所形成的細(xì)微結(jié)構(gòu),此時(shí)可稱為寬帶語譜圖,而窄帶語譜圖正好與之相反。寬帶語譜圖由于可獲得較高的時(shí)間分辨率,則可以反映頻譜的快速時(shí)變過程;窄帶語譜圖可以獲得較高的頻率分辨率,所以可以反映頻譜的精細(xì)結(jié)構(gòu)。兩者之間相結(jié)合,就可以提供帶寬與語音特性相關(guān)的信息。

2.2 使用COM技術(shù)的條件

在Matlab的安裝目錄下查找toolbox文件夾,在該文件夾中如果看到存在javabuilder文件夾,則說明已經(jīng)安裝了Matlab Builder for Java。Matlab Builder for Java也可稱為Java Builder,它是對(duì)Matlab Compiler的一個(gè)擴(kuò)展。用Matlab的Java Builder可以將Matlab函數(shù)包裝成一個(gè)或多個(gè)Java類,從而形成一個(gè)Java組件或者包被Java程序調(diào)用。

本實(shí)驗(yàn)所采用的開發(fā)環(huán)境為jdk1.6.0_16、MyEclipse10和MATLAB R2012a,主要進(jìn)行情感語音信號(hào)語譜圖的讀取和顯示。

2.3 將.m文件生成.jar文件

將Matlab中的.m文件生成Java環(huán)境中的.jar文件的操作步驟如下:

(1)在Matlab的command窗口輸入deploytool命令,彈出一個(gè)新窗口Deployment Project。

(2)在Deployment Project窗口中單擊new按鈕創(chuàng)建新工程,輸入新工程名MyPro并在Type列表框中選擇Java Package選項(xiàng)。

(3)在Matlab的編輯器中編寫yupu.m文件,代碼如下:

代碼中wavread函數(shù)支持多通道數(shù)據(jù),最多可支持32位采樣并支持讀取24位和32位的.wav文件。該函數(shù)讀取的情感語音文件是來源于北京航空航天大學(xué)電子信息工程學(xué)院毛峽教授課程組所建立的情感語音數(shù)據(jù)庫[6]。該語音數(shù)據(jù)庫為雙聲道的wav格式文件,樣本語句采樣頻率為11025Hz,量化精度為16bit。代碼中采用的函數(shù)格式是[y,F(xiàn)s,bits]=wavread('filename'),該函數(shù)的返回值是以赫茲為單位的采樣率(Fs),以及用于文件數(shù)據(jù)編碼的每樣點(diǎn)比特?cái)?shù)(bits)。上述程序執(zhí)行結(jié)果如圖1所示。

圖1 語譜圖

specgram函數(shù)使用滑動(dòng)窗計(jì)算信號(hào)的短時(shí)傅立葉變換,語譜圖是該函數(shù)的幅度值。代碼中采用的函數(shù)格式為specgram(a,nfft,fs,window),該函數(shù)參數(shù)指定了窗函數(shù)和矢量a每個(gè)窗口分區(qū)的樣點(diǎn)數(shù)。如果用戶提供了窗口尺寸,specgram函數(shù)則使用該尺寸的漢寧窗計(jì)算矢量a所表示信號(hào)的短時(shí)傅立葉變換。參數(shù)nfft指定specgram函數(shù)所用FFT長度,該值決定了計(jì)算短時(shí)傅立葉變換的各頻點(diǎn);參數(shù)fs是指定采樣頻率的一個(gè)標(biāo)量。

(4)在右側(cè)的Java Package中單擊Add Class創(chuàng)建新類,該類的名字為以后在Java所調(diào)用的類名,然后將該文件加入到類中。

(5)單擊build按鈕,即可在Matlab的當(dāng)前工作路徑下,生成一個(gè)與工程名同名的文件夾,并生成一個(gè).jar文件和一個(gè).ctf文件,將這兩個(gè)文件復(fù)制到Java的.classpath所在文件夾中。

2.4 在Java中調(diào)用生成的.jar文件

在MyEclipse中新建Java項(xiàng)目,并將Matlab中創(chuàng)建的jar包加入項(xiàng)目的build path,并且要把Matlab安裝目錄下的toolboxjavabuilderjarjavabuilder.jar文件加入項(xiàng)目的build path中。新建一個(gè)Java類VoiceTest,并引入相關(guān)的包,具體如下:

以上兩條引入了Matlab相關(guān)包及建立的包和類,這樣即可在Java類文件中使用Matlab中創(chuàng)建的.jar包。實(shí)驗(yàn)經(jīng)過以上設(shè)置后,通過構(gòu)建Java GUI用戶界面,則可以在指定的菜單中選擇語譜圖進(jìn)行顯示。

3 結(jié)語

Matlab具有較好的數(shù)值計(jì)算功能,而Java具有較強(qiáng)的多線程、GUI設(shè)計(jì)等功能,將Matlab與Java進(jìn)行結(jié)合應(yīng)用在語音情感特征值研究過程中,不僅可以獲取用戶所需要的研究數(shù)據(jù),還可以在更加友好的圖形界面中進(jìn)行操作,簡化了操作方式,為用戶提供了友好的操作界面。而Matlab與Java的相互調(diào)用具有各自的方式和特點(diǎn),用戶可以在研究過程中,結(jié)合具體需要采用Matlab調(diào)用Java程序或是Java程序調(diào)用Matlab方式。

[1]曾光菊.基于粗神經(jīng)網(wǎng)絡(luò)的語音情感識(shí)別[J].四川理工學(xué)院學(xué)報(bào),2011,24(4):472-476.

[2]王薇,楊麗萍.MATLAB在數(shù)據(jù)可視化中的應(yīng)用[J].長春大學(xué)學(xué)報(bào),2008,10:52-54.

[3]王薇.MATLAB的循環(huán)向量化編程方法研究[J].長春大學(xué)學(xué)報(bào),2010,2:57-59.

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

[5]夏榆濱.軟件構(gòu)件技術(shù)[M].北京:清華大學(xué)出版社,2011:12-13.

[6]李文趨.Java與Matlab混合編程在圖像處理中的應(yīng)用[J].信息與電腦,2009,10:108.

[7]毛峽,陳立江.語音情感信息的提取及建模方法[P].中國專利:CN101261832,2008.

猜你喜歡
語譜調(diào)用分辨率
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
HR-DCGAN方法的帕金森聲紋樣本擴(kuò)充及識(shí)別研究
EM算法的參數(shù)分辨率
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
原生VS最大那些混淆視聽的“分辨率”概念
基于時(shí)頻域特征的場景音頻研究
語譜圖二次傅里葉變換特定人二字漢語詞匯識(shí)別
基于深度特征學(xué)習(xí)的圖像超分辨率重建
一種改進(jìn)的基于邊緣加強(qiáng)超分辨率算法
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
邻水| 英吉沙县| 鹰潭市| 厦门市| 平泉县| 神木县| 龙山县| 清苑县| 凤台县| 牟定县| 黑龙江省| 安塞县| 内丘县| 余干县| 茶陵县| 南川市| 宜兰市| 伊通| 望奎县| 郧西县| 金阳县| 威远县| 保靖县| 蚌埠市| 五原县| 永昌县| 石门县| 孟津县| 漠河县| 东乌| 江油市| 穆棱市| 房产| 浦北县| 沁源县| 博爱县| 景泰县| 南阳市| 九江县| 四会市| 恩平市|