搜档网
当前位置:搜档网 › Java和Matlab混合编程及其应用_王薇

Java和Matlab混合编程及其应用_王薇

Java和Matlab混合编程及其应用_王薇
Java和Matlab混合编程及其应用_王薇

第22卷第10期长春大学学报Vol.22No.10 2012年10月JOURNAL OF CHANGCHUN UNIVERSITY Oct.2012

Java和Matlab混合编程及其应用

王薇,杨丽萍

(长春大学计算机科学技术学院,长春130022)

摘要:Java面向对象编程语言和Matlab具有各自的优缺点。将二者结合起来进行混合编程应用到情感语音特征值分析可以充分发挥其各自的优点,弥补单独编程的不足。本文介绍了通过Matlab调用Java及Java调用Matlab 的技术,并简要介绍了在Java中调用Matlab实现情感语音语谱图的显示方法。

关键词:Java;Matlab;混合编程;情感语音

中图分类号:TP311.13文献标志码:A文章编号:1009-3907(2012)10-1186-04

0引言!

随着人工智能技术、信息技术的飞速发展和人类与计算机关系的日益密切,人们已经不在满足于计算机能播放和识别人类的语音信号,而且还希望计算机能够识别人类的语音情感信息,对人类情感的变化给出一定的判别。目前较多的语音情感研究都是从语音信号中提取出一些声学特征,然后将特征化简提取出一些更有效的特征,再用模式识别中的一些方法尝试去识别语音信号中的情感[1]。语音情感特征值的提取与分析是语音情感识别的基础,而语音情感识别是一门综合性的多领域的交叉学科,具有一定的难度,所以对情感语音信号的分析需要有一个十分方便且功能强大的工具。

MATLAB是matrix laboratory(矩阵实验室)的缩写,它自1984年由美国MathWorks公司推出后,经过不断地改进和发展,现已成为国际公认的优秀的工程应用环境,已被广泛的应用到教学、工程计算、通信、图像处理、自动化控制等领域[2]。该软件主要包括MATLAB和Simulink两大部分。MATLAB语句书写简单,功能强大,一条语句往往相当于其它高级语言中的几十条、几百条甚至几千条语句[3]。在很大程度上,MAT-LAB摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,为工程设计、科学研究以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,成为国际科学计算软件的先进代表。

Java是由Sun公司发布的一种纯面向对象程序设计语言。目前Sun公司已被Oracle公司收购。Java语言具有跨平台性、可移植性、多线程、分布式、安全可靠等优点。但Java程序设计语言对一些较为复杂的数值计算的编程较繁琐,编程效率较低。对于情感语音特征值的分析与处理可以采用Java及Matlab的混合编程,实现二者的优势互补。

1Java与Matlab混合编程的方法

Java与Matlab的混合编程可以是Java程序调用Matlab,也可以采用Matlab调用Java程序。

1.1Matlab访问Java程序

从Matlab5.3版本起,在Matlab的安装程序中集成了Java虚拟机JVM(Java Virtual Machine),这样用户就可以通过Matlab的命令访问Java命令解释器,完成对象的创建和访问过程。Matlab访问Java程序具有以下优点:

(1)通过访问Java API扩展Matlab功能,例如一些输入输出功能及网络功能,Matlab完全可以通过Java 中的URL类访问网络上的资源;

(2)通过访问第三方提供的Java类库提高编程的重用率;

(3)在Matlab中较容易地构建Java对象,可以用Java或是Matlab的语法访问Java对象中的方法;

收稿日期:2011-07-26

基金项目:吉林省教育厅科研项目(吉教科合字[2010]第445号)

作者简介:王薇(1975-),女,吉林长春人,副教授,主要从事计算机应用方面的研究。

(4)较容易地完成Matlab 及Java 之间的对象传递或是数值传递。

Matlab 访问Java 中的类主要有三个来源:一是Java 类库中的类;二是第三方软件提供者提供的类;三是用户根据需求自己创建的类。Matlab 加载类时在类路径中查找所需要的类,因此Java 类要加载到Matlab 中首先要在Matlab 中设置类所在的路径。Matlab 中的Java 类路径有静态路径与动态路径两种:静态路径是在Matlab 启动时加载的,在Matlab 运行期间不能更改的路径;动态路径则可以在任何时间进行加载和修改。在Matlab 提示符状态下可使用javaclasspath 查看当前的静态路径与动态路径设置,若要修改静态路径的设置内容可先使用witch classpath.txt 命令查看classpath.txt 静态类路径文件所在的位置,再进一步用edit classpath.txt 修改文件内容。定义动态路径时使用javaclasspath 命令,修改动态路径时可使用javaaddpath 和javarmpath 完成。

当确定Matlab 中所要用的Java 类存在后,可用在Matlab 程序中使用import 命令将Java 类或Java 类所在的包完全导入到Matlab 程序中,以便于在Matlab 程序中使用。例如:

import java.lang.String ;

import java.util.*;

import java.aut.*;

import java.util.Enumeration ;

而在Matlab 中使用类中的方法与Java 中类似,同样是点分隔符完全对类中方法的访问。但是应注意的

是要在MATLAB 中调用的变量或方法必须要声明为public 类型[2]。

1.2Java 程序访问Matlab

Java 程序访问Matlab 主要有三种方式:

(1)利用COM 对象实现访问

COM 是指通用对象模型(Common Object Model ),是Microsoft 推出的一个二进制代码标准。此标准包括规范和实现两大部分,这些规范不依赖于任何的语言和操作系统。在Matlab 中构建COM 对象需要使用ComBuilder 完成Matlab 算法到COM 对象的转换,从而使Java 、

C /C ++、VB 等基于COM +的应用程序使用COM 对象。

(2)利用CORBA 实现访问

CORBA 是指公共对象请求代理结构(Common Object Request Broker Architecture ),它是体系结构最完

整、最清晰,跨越平台最多的构件模型[4]。使用CORBA 连接Matlab 十分复杂,开发效率低[5]。

(3)利用JNI 技术实现访问

JNI 是指本地编程接口(Java Native Interface ),Matlab 向C /C ++语言提供了Matlab Engine 函数,Java 通过JNI 技术调用这些函数实现对Matlab 的访问。Matlab Engine 是指Matlab 提供的一种面向C /C ++和For-tran 语言的接口函数,应用程序的前端程序是用C 或Java 实现的GUI ,而应用程序的后端采用Matlab 编程,这样可以提高编程效率,缩短编程时间。用户应用程序使用Matlab 的Engine 函数时,一个新的Matlab 进程会产生,通过控制该进程完成计算及绘图任务。

2COM 技术实现语谱图读取

情感语音分析中常用的特征值分为两类:一是韵律特征;另一是音质特征。而各分类中又包含着多个特征值的选取,如短时能量、基音、强度、共振峰、语谱图分析等。

2.1语谱图

语谱图主要用于反映语音信号动态频率特征,在语音分析中具有极其重要的实用价值。有时也可以把语谱图看作是可视语言。语谱图的水平方向表示时间轴,垂直方向表示频率轴,图上的灰度条纹则可表示各

个时间点的语音短时谱。语谱图上因其不同的灰度,形成不同的纹路,称之为“声纹”。声纹因人而异,所以

语谱图在司法、安全等场合得到广泛应用。

语谱图包括时间分辨率和频率分辨率,这两个分辨率均由窗函数决定。时间分辨率越高,则时间波形的每个周期及共振峰随时间的变化可以观察得越明显。但若频率分辨率低,在语谱图上则不足以分辨出由于激励所形成的细微结构,此时可称为宽带语谱图,而窄带语谱图正好与之相反。宽带语谱图由于可获得较高

7

811第10期王薇,等:Java 和Matlab 混合编程及其应用

的时间分辨率,则可以反映频谱的快速时变过程;窄带语谱图可以获得较高的频率分辨率,所以可以反映频谱的精细结构。两者之间相结合,就可以提供带宽与语音特性相关的信息。

2.2使用COM 技术的条件

在Matlab 的安装目录下查找toolbox 文件夹,在该文件夹中如果看到存在javabuilder 文件夹,则说明已经安装了Matlab Builder for Java 。Matlab Builder for Java 也可称为Java Builder ,它是对Matlab Compiler 的一个扩展。用Matlab 的Java Builder 可以将Matlab 函数包装成一个或多个Java 类,从而形成一个Java 组件或者包被Java 程序调用。

本实验所采用的开发环境为jdk1.6.0_16、MyEclipse10和MATLAB R2012a ,主要进行情感语音信号语

谱图的读取和显示。

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

将Matlab 中的.m 文件生成Java 环境中的.jar 文件的操作步骤如下:

(1)在Matlab 的command 窗口输入deploytool 命令,弹出一个新窗口Deployment Project 。

(2)在Deployment Project 窗口中单击new 按钮创建新工程,输入新工程名MyPro 并在Type 列表框中选择Java Package 选项。

(3)在Matlab 的编辑器中编写yupu.m 文件,代码如下:

functionyupu ();

clear all

[x ,fs ,nbits ]=wavread ('E :\voice \bM0C26011.wav');

x =x (:,1);

specgram (x ,512,fs ,100);

xlabel ('时间(s )');

ylabel ('频率(Hz )');

title ('语谱图');

end

代码中wavread 函数支持多通道数据,最多可支持32位采样并支持读取24位和32位的.wav 文件。该函数读取的情感语音文件是来源于北京航空航天大学电子信息工程学院毛峡教授课程组所建立的情感语音

数据库[6]。该语音数据库为双声道的wav 格式文件,样本语句采样频率为11025Hz ,量化精度为16bit 。代码

中采用的函数格式是[y ,Fs ,bits ]=wavread ('filename'),该函数的返回值是以赫兹为单位的采样率(Fs ),

以及用于文件数据编码的每样点比特数(bits )。上述程序执行结果如图1所示

图1语谱图

specgram 函数使用滑动窗计算信号的短时傅立叶变换,语谱图是该函数的幅度值。代码中采用的函数

格式为specgram (a ,

nfft ,fs ,window ),该函数参数指定了窗函数和矢量a 每个窗口分区的样点数。如果用户8811长春大学学报第22卷

提供了窗口尺寸,

specgram 函数则使用该尺寸的汉宁窗计算矢量a 所表示信号的短时傅立叶变换。参数nfft 指定specgram 函数所用FFT 长度,该值决定了计算短时傅立叶变换的各频点;参数fs 是指定采样频率的一个标量。

(4)在右侧的Java Package 中单击Add Class 创建新类,该类的名字为以后在Java 所调用的类名,然后将该文件加入到类中。

(5)单击build 按钮,即可在Matlab 的当前工作路径下,生成一个与工程名同名的文件夹,并生成一个.jar 文件和一个.ctf 文件,将这两个文件复制到Java 的.classpath 所在文件夹中。

2.4在Java 中调用生成的.jar 文件

在MyEclipse 中新建Java 项目,并将Matlab 中创建的jar 包加入项目的build path ,并且要把Matlab 安装目录下的toolbox \javabuilder \jar \javabuilder.jar 文件加入项目的build path 中。新建一个Java 类VoiceTest ,并引入相关的包,具体如下:

import com.mathworks.toolbox.javabuilder.*;

import mypro.yupu ;

以上两条引入了Matlab 相关包及建立的包和类,这样即可在Java 类文件中使用Matlab 中创建的.jar 包。实验经过以上设置后,通过构建Java GUI 用户界面,则可以在指定的菜单中选择语谱图进行显示。3结语

Matlab 具有较好的数值计算功能,而Java 具有较强的多线程、GUI 设计等功能,将Matlab 与Java 进行结合应用在语音情感特征值研究过程中,不仅可以获取用户所需要的研究数据,还可以在更加友好的图形界面中进行操作,简化了操作方式,为用户提供了友好的操作界面。而Matlab 与Java 的相互调用具有各自的方式和特点,用户可以在研究过程中,结合具体需要采用Matlab 调用Java 程序或是Java 程序调用Matlab 方式。

参考文献:

[1]曾光菊.基于粗神经网络的语音情感识别[J ].四川理工学院学报,2011,24(4):472-476.

[2]王薇,杨丽萍.MATLAB 在数据可视化中的应用[J ]

.长春大学学报,2008,10:52-54.[3]王薇.MATLAB 的循环向量化编程方法研究[J ].长春大学学报,2010,2:57-59.

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

[5]夏榆滨.软件构件技术[M ].北京:清华大学出版社,2011:12-13.

[6]李文趋.Java 与Matlab 混合编程在图像处理中的应用[J ].信息与电脑,2009,10:108.

[7]毛峡,陈立江.语音情感信息的提取及建模方法[P ].中国专利:CN101261832,

2008.责任编辑:吴旭云

Mixed Programming of Java and Matlab and Its Application

WANG Wei ,YANG Li-ping

(College of Computer Science and Technology ,Changchun University ,Changchun 130022,China )

Abstract :Java object programming language and Matlab have their respective advantages and disadvantages.Applying the mixed pro-gramming of the two into the analysis of emotional speech feature can give full play to their respective advantages ,which makes up the deficiency of the programming alone.This paper introduces the technologies of calling Java by Matlab and calling Matlab by Java ,and it also introduces the displaying method of emotional speech spectrogram briefly by calling Matlab in Java programming.

Keywords :Java ;Matlab ;mixed programming ;emotional speech 9

811第10期王薇,等:Java 和Matlab 混合编程及其应用

相关主题