声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1285|回复: 2

[综合讨论] 求助:java调用matlab(javabuilder)相关

[复制链接]
发表于 2009-7-27 10:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
jdk1.6+eclipse3.4.2+matlab2007a (matlab builder for java)
在java class中编写以下方法调用voldeno.m文件:
public void invokeMat(ArrayList<Double> alist){
                System.out.println("Begin:invokeMat");
                MWNumericArray x=null;
        Object[] y=null;
        oilvoldenoclass deno=null;
                int len=alist.size();
                System.out.println("oilinputdata length is"+len);
                double[] oilinput=new double[len];
                oiloutput=new double[len];
                for (int i = 0; i < oilinput.length; i++) {
                        oilinput=alist.get(i);
                }
                try {
                        System.out.println("Begin denoise");
                        x = new MWNumericArray(oilinput,MWClassID.DOUBLE);
                        System.out.println("MWNumericArray x  is "+x);
                        System.out.println("output x is over!");
                        deno=new oilvoldenoclass();
                        y=deno.voldeno(1,x);
                        System.out.println("Object[] y length is "+y.length);
                        System.out.println("Object[] y  is "+y);
                        System.out.println("output y is over!");
                        if(y.length==len){
                                for(int i=0;i<len;i++){
                                        oiloutput=((MWNumericArray)y[0]).getDouble(i);
                                }
                        }else{
                                System.out.println("Invoke matlab function 'voldeno.m' error!");
                        }
                        
                }catch (Exception e){
                        System.out.println(e);
                }
                finally{
                 /* Free native resources */
                 MWArray.disposeArray(x);
                 MWArray.disposeArray(y);
                 if (deno!= null)
                    deno.dispose();
            }
                System.out.println("End:invokeMat");
               
        }

voldeno.m文件如下:
function out= voldeno(x)
%VOLDENO 函数对信号x去噪
% x原始信号,为离散电压的数组
% out为降噪信号,为离散电压的数组
% 画出原始信号
subplot(311), plot(x), axis([1 500 0 10]);
title('原始信号');

% 对x使用sym8小波进行5层分解,得到高频系数。使用SURE阈值、软阈值进行降噪
lev = 5;
out = wden(x,'heursure','s','one',lev,'sym8');

subplot(313), plot(out), axis([1 500 0 10]);
title('降噪信号 - heuristic SURE');

java 项目中添加了javabuilder.jar 和voldeno相关的jar包oilvoldeno.jar

运行时出现以下错误,请问为什么。
??? Undefined function or variable 'reporterrorlogs'.

Error in ==> matlabrc at 277

com.mathworks.toolbox.javabuilder.MWException: An error occurred while initializing the component.
回复
分享到:

使用道具 举报

 楼主| 发表于 2009-7-27 11:52 | 显示全部楼层
好像是调用voldeno方法时出现错误:out = wden(x,'heursure','s','one',lev,'sym8');
我把out换成y,y= wden(x,'heursure','s','one',lev,'sym8');
报错:Index exceeds matrix dimensions.
其中x是1x166的数组,请问输出y是不是也是1x166类型的数组呢?
我测试了如果在matlab中直接在voldeno函数中输入数组x,该函数是可以运行的,而用java调用就出现错误。。。
 楼主| 发表于 2009-7-30 10:18 | 显示全部楼层
上面的问题终于解决了。是matlab wavelet toolbox自带的wtbxmngr.m文件的问题。将文件替换成下面的文件即可
wtbxmngr.m (7.21 KB, 下载次数: 7)

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-22 07:27 , Processed in 0.070240 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表