メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

複数の MATLAB 関数を使用した Java アプリケーションの作成

R2026a

この例では、複数の MATLAB® 関数を使用して信号を解析し、結果をグラフ化する Java® アプリケーションを作成する方法を説明します。

この例では、以下の手順を実行します。

  1. MATLAB Compiler SDK™ を使用して、プライベート メソッドが自動的にカプセル化されるクラスを含むパッケージを作成します。

  2. Java アプリケーションで MATLAB 関数にアクセスします。これには、MWArray クラス階層を使用してデータを表現することが含まれます。

  3. アプリケーションをビルドして実行します。

spectralanalysis アプリケーション

spectralanalysis アプリケーションは信号を解析し、その結果をグラフ化します。クラス fourier は、入力データ配列に対して高速フーリエ変換 (FFT) を実行します。このクラスのメソッド computefft は、この FFT の結果を 2 つの出力配列 (周波数点の配列とパワー スペクトル密度) として返します。

2 番目のメソッド plotfft は、返されたデータをグラフ化します。これらの 2 つのメソッド computefft と plotfft で、MATLAB 関数をカプセル化します。

ファイル

MATLAB 関数computefft.m
plotfft.m
MATLAB 関数の場所matlabroot\toolbox\javabuilder\Examples\SpectraExample\SpectraDemoComp
Java コードの場所matlabroot\toolbox\javabuilder\Examples\SpectraExample\SpectraDemoJavaApp\powerspect.java

手順

  1. MATLAB に付属している SpectraExample フォルダーを作業フォルダーにコピーします。

    copyfile(fullfile(matlabroot,'toolbox','javabuilder','Examples','SpectraExample'),'SpectraExample')

    MATLAB コマンド プロンプトで、作業フォルダー内の新しい SpectraExample\SpectraDemoComp サブフォルダーに移動します。

  2. MATLAB 関数 computefft.m および plotfft.m を確認します。

    function [fftdata, freq, powerspect] = computefft(data, interval)
    if (isempty(data))
       fftdata = [];
       freq = [];
       powerspect = [];
       return;
    end
    
    if (interval <= 0)
       error('BuilderJA:Examples:samplingInterval','Sampling interval must be greater then zero');
       return;
    end
    
    fftdata = fft(data);
    freq = (0:length(fftdata)-1)/(length(fftdata)*interval);
    powerspect = abs(fftdata)/(sqrt(length(fftdata)));
    function [fftdata, freq, powerspect] = plotfft(data, interval)
    [fftdata, freq, powerspect] = computefft(data, interval);
    len = length(fftdata);
    if (len <= 0)
       return;
    end
    
    t = 0:interval:(len-1)*interval;
    subplot(2,1,1), plot(t, data)
    xlabel('Time'), grid on
    title('Time domain signal')
    subplot(2,1,2), plot(freq(1:len/2), powerspect(1:len/2))
    xlabel('Frequency (Hz)'), grid on
    title('Power spectral density')
  3. Java パッケージ コンパイラ アプリまたは compiler.build.javaPackage で Java パッケージをビルドします。

    以下の情報をプロジェクトに使用します。

    プロジェクト名spectralanalysis
    クラス名fourier
    コンパイルするファイルplotfft.m

    メモ

    この例において、fourier クラスを使用するアプリケーションは computefft を直接呼び出しません。computefft メソッドは、plotfft メソッドでのみ必要とされます。computefft 関数は、依存関係の分析中にコンパイラによって自動的に組み込まれるため、パッケージに手動で追加する必要はありません。

    たとえば、compiler.build.javaPackage を使用している場合は、以下を入力します。

    buildResults = compiler.build.javaPackage('plotfft.m', ...
    'PackageName','spectralanalysis', ...
    'ClassName','fourier');

    詳細については、Java パッケージの生成と Java アプリケーションのビルドの手順を参照してください。

  4. MATLAB 関数にアクセスする Java アプリケーションのソース コードを作成します。

    この例のサンプル アプリケーションは SpectraExample\SpectraDemoJavaApp\powerspect.java にあります。

    /* Necessary package imports */
    import com.mathworks.toolbox.javabuilder.*;
    import spectralanalysis.*;
    
    /*
     * powerspect class computes and plots the power
     * spectral density of an input signal.
     */
    class powerspect
    {
       public static void main(String[] args)
       {
          double interval = 0.01;     /* Sampling interval */
          int nSamples = 1001;        /* Number of samples */
          MWNumericArray data = null; /* Stores input data */
          Object[] result = null;     /* Stores result */
          fourier theFourier = null;  /* Fourier class instance */
    
          try
          {
             /*
              * Construct input data as sin(2*PI*15*t) + 
              * sin(2*PI*40*t) plus a random signal.
              *    Duration = 10
              *    Sampling interval = 0.01
              */
             int[] dims = {1, nSamples};
             data = MWNumericArray.newInstance(dims, MWClassID.DOUBLE,
                                                  MWComplexity.REAL);
             for (int i = 1; i <= nSamples; i++)
             {
                double t = (i-1)*interval;
                double x = Math.sin(2.0*Math.PI*15.0*t) +
                   Math.sin(2.0*Math.PI*40.0*t) + 
                   Math.random();
                data.set(i, x);
             }
    
             /* Create new fourier object */
             theFourier = new fourier();          
    
             /* Compute power spectral density and plot result */
             result = theFourier.plotfft(3, data, 
                Double.valueOf(interval));
             theFourier.waitForFigures(); 
          }
    
          catch (Exception e)
          {
             System.out.println("Exception: " + e.toString());
          }
    
          finally
          {
             /* Free native resources */
             MWArray.disposeArray(data);
             MWArray.disposeArray(result);
             if (theFourier != null)
                theFourier.dispose();
          }
       }
    }

    プログラムにより次が実行されます。

    • 15 Hz と 40 Hz の 2 つの正弦波を内包するランダム信号を表す値をもつ入力配列を作成する

    • データを格納する MWNumericArray 配列を作成する

      data = MWNumericArray.newInstance(dims, MWClassID.DOUBLE, MWComplexity.REAL);
      
    • fourier オブジェクトをインスタンス化する

    • plotfft メソッドを呼び出す。これは、computeftt を呼び出し、データをプロットします。

    • try-catch ブロックを使用して例外を処理する

    • MWArray メソッドを使用してネイティブ リソースを解放する

  5. MATLAB で、SpectraDemoJavaApp フォルダーに移動します。

  6. 生成された spectralanalysis.jar パッケージをこのフォルダーにコピーします。たとえば、compiler.build.javaPackage を使用した場合は、以下を入力します。

    copyfile(fullfile('..','SpectraDemoComp','spectralanalysisjavaPackage','spectralanalysis.jar'))
  7. コマンド プロンプト ウィンドウを開き、SpectraDemoJavaApp フォルダーに移動します。

  8. javac を使用して powerspect.java アプリケーションをコンパイルします。

    • Windows® の場合、次のコマンドを実行します。

      javac -classpath "<matlabroot>\toolbox\javabuilder\jar\javabuilder.jar";.\spectralanalysis.jar powerspect.java
    • UNIX® の場合、次のコマンドを実行します。

      javac -classpath "<matlabroot>/toolbox/javabuilder/jar/javabuilder.jar":./spectralanalysis.jar powerspect.java

    matlabroot は、MATLAB または MATLAB Runtime のインストール フォルダーへのパスに置き換えてください。たとえば、Windows でのパスは C:\Program Files\MATLAB\R2026a のようになります。

  9. powerspect アプリケーションを実行します。

    • Windows の場合、次のコマンドを実行します。

      java -classpath .;"matlabroot\toolbox\javabuilder\jar\javabuilder.jar";.\spectralanalysis.jar powerspect
    • UNIX の場合、次のコマンドを実行します。

      java -classpath .:"matlabroot/toolbox/javabuilder/jar/javabuilder.jar":./spectralanalysis.jar powerspect
      

    メモ

    アプリケーションを Mac 64 ビット プラットフォームで実行する場合は、Java コマンドに -d64 フラグを追加する必要があります。

    powerspect プログラムにより、次の出力が表示されます。

    Time domain signal plotted above the power spectral density plot that reveals signals at 16 and 40 Hz

参考

|

トピック