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 277com.mathworks.toolbox.javabuilder.MWException: An error occurred while initializing the component.

解决方案 »

  1.   

    好像是调用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调用就出现错误
      

  2.   

    上面的问题终于解决了。是matlab wavelet toolbox自带的wtbxmngr.m文件的问题。替换成新的文件即可。
    不知道怎么在回帖中插入附件,把新的wtbxmngr.m文件放在下载页了,标题:wavelet文件wtbxmngr