ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

fftw

FFTW ライブラリ ランタイム アルゴリズム調整コントロールとのインターフェイス

構文

fftw('planner', method)
method = fftw('planner')
str = fftw('dwisdom')
str = fftw('swisdom')
fftw('dwisdom', str)
fftw('swisdom', str)

説明

関数 fftw では、MATLAB® FFT 関数 (fftifftfft2ifft2fftn、および ifftn) のスピードを最適化できます。関数 fftw を使用すると、ランタイムに特定のサイズと次元の FFT を最も高速に計算するアルゴリズムを実験的に決定する調整アルゴリズムのオプションを設定できます。MATLAB ソフトウェアは、最適なアルゴリズムを内部データベースに記録し、現在のセッションを通じて同じサイズの FFT の計算に使用します。調整アルゴリズムは、MATLAB ソフトウェアが FFT の計算に使用する FFTW ライブラリの一部です。

fftw('planner', method) は、FFT の次元が 2 のべき乗以外の場合に、調整アルゴリズムが優れた FFT アルゴリズムを探すためのメソッドを設定します。method には、次のいずれかを指定できます。既定のメソッドは、estimate です。

  • 'estimate'

  • 'measure'

  • 'patient'

  • 'exhaustive'

  • 'hybrid'

関数 fftw('planner', method) を呼び出すと、次回に FFT 関数のいずれか (関数 fft など) を呼び出す際、指定したメソッドが調整アルゴリズムで選択され、FFT 計算の最適化が行われます。調整には異なるアルゴリズムの試行錯誤が伴うため、FFT 関数を最初に呼び出したときには、関数 fftw を呼び出さなかった場合よりも実行速度が遅くなることがあります。ただし、任意の FFT 関数を呼び出した後の FFT 関数の呼び出しでは、サイズが同一であれば、関数 fftw を使用しない場合よりも実行速度が高速になるのが普通です。

    メモ:   FFT 関数は、現在の MATLAB セッション中に最適な FFT アルゴリズムのみを使用します。将来の MATLAB セッションで最適なアルゴリズムを再使用する方法は、最適な FFT アルゴリズムの再利用を参照してください。

メソッドとして 'estimate' を設定した場合、FFTW ライブラリは、ランタイム調整を使用せずに、アルゴリズムを選択します。そのため、選択されたアルゴリズムが最適ではない可能性もあります。

メソッドとして 'measure' を設定した場合、FFTW ライブラリは、与えられたサイズの FFT の計算で複数のアルゴリズムを実験して、最速のアルゴリズムを選択します。メソッドとして 'patient' または 'exhaustive' を設定した場合も同様の結果になりますが、大幅に多数のアルゴリズムがライブラリで実験されるため、最初に FFT 関数を呼び出したときの調整時間が長くなります。ただし、それ以降の FFT 関数の呼び出しでは、'measure' の場合より速い速度が得られます。

'planner''hybrid' に設定すると、MATLAB は以下のように動作します。

  • FFT の次元が 8192 以下の場合、メソッドを 'measure' に設定します。

  • FFT の次元が 8192 より大きい場合、メソッドを 'estimate' に設定します。

method = fftw('planner') は、現在の planner メソッドを返します。

str = fftw('dwisdom') は、FFTW ライブラリ内部の倍精度データベースに情報を文字列として返します。文字列は保存することができ、その後で、次の構文を使って、後続の MATLAB セッションに再利用できます。

str = fftw('swisdom') は、FFTW ライブラリ内部の単精度データベースに情報を文字列として返します。

fftw('dwisdom', str) は、文字列 str で表される関数 fftw wisdom を FFTW ライブラリ内部の倍精度 wisdom データベースに読み取ります。fftw('dwisdom','') または fftw('dwisdom',[]) は、内部 wisdom データベースをクリアします。

fftw('swisdom', str) は、文字列 str で表される関数 fftw wisdom を FFTW ライブラリ内部の単精度 wisdom データベースに読み取ります。fftw('swisdom','') または fftw('swisdom',[]) は、内部 wisdom データベースをクリアします。

    大きな 2 のべき乗に関するメモ   FFT の次元が 2 のべき乗数であり、214 から 222 までの間の場合、MATLAB ソフトウェアは、内部データベースに事前に読み込んだ特殊な情報を使用して FFT 計算の最適を行います。FTT の次元が 2 のべき乗の場合には、コマンド fftw('wisdom', []) を使用してデータベースをクリアしないかぎり、調整は実行されません。

FFTW ライブラリの詳細は、http://www.fftw.org を参照してください。

各種 Planner メソッドの速度比較

以下の例では、各種 planner 設定における実行時間を示します。まず、適当なデータを作成し、既定のメソッドの estimate を使用して関数 fft を求めます。

t=0:.001:5;
x = sin(2*pi*50*t)+sin(2*pi*120*t);
y = x + 2*randn(size(t));

tic; Y = fft(y,1458); toc
Elapsed time is 0.000521 seconds.

次のコマンドを 2 回実行します。

tic; Y = fft(y,1458); toc
Elapsed time is 0.000151 seconds.

2 回目には、MATLAB ソフトウェアからは、経過時間がほどんど 0 と出力されます。より正確に経過時間を測定するには、コマンド Y = fft(y,1458) をループで 1000 回実行します。

tic; for k=1:1000
Y = fft(y,1458);
end; toc
Elapsed time is 0.056532 seconds.

その結果、fft(y, 1458) の 1 回の実行時間が約 1/10000 秒であると求められます。

比較のために、plannerpatient に設定します。この planner では、hybrid の場合より入念にアルゴリズム候補が調べられるため、関数 fft を最初に実行するときの計算時間も長くなります。

fftw('planner','patient')
tic;Y = fft(y,1458);toc
Elapsed time is 0.100637 seconds.

ただし、次回の関数 fft の呼び出しでは、メソッド patient を使用した場合とほぼ同じ速度で実行されます。

tic;for k=1:1000
Y=fft(y,1458);
end;toc
Elapsed time is 0.057209 seconds.

最適な FFT アルゴリズムの再利用

最適化された FFT アルゴリズムを将来的な MATLAB セッションでも使用するには、まず、次のコマンドを使って "wisdom" を保存します。

str = fftw('wisdom')

次のコマンドを使用して、将来のセッション用に str を保存することができます。

save str

次回の MATLAB セッションの開始時に、次のコマンドを使用して str を読み込みます。

load str

その後、次のコマンドを使用して、“wisdom” を FFTW データベースに再読み込みします。

fftw('wisdom', str)

参考

| | | | | |

R2006a より前に導入

この情報は役に立ちましたか?