[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000816] Re: numfft



高橋(北大)さん
(Cc: 石岡さん -- 最後の方で質問です)

> この度、とりあえず動くものが出来上がったので、報告致します。
> ただ、本当にとりあえずで、実数(Integer 又は Float 型)の多次元配列に対して
> 正方向にフーリエ変換するだけのものです。
> 
> 詳しい使用方法などは、以下のアドレスのページに報告しています。
> 
> http://www.ep.sci.hokudai.ac.jp/~kazto/work/

お返事が遅くなり申し訳ありません。ちゃくちゃくと進んでいたのです
ね。rubyやら拡張ライブラリープログラミングに慣れると行ったハード
ルを乗り越えて、今の段階で一人でそこまで行けたのはすこぶる上首尾
です。

ただ、先ほど神代さんへのメールに書きましたように、電脳 ruby プロ
ジェクトとしては NumArray を捨てて、NArray
(http://www.ruby-lang.org/en/raa-list.rhtml?name=NArray) を使う
という方針変更をしたいと思います。もっと早くお知らせすべきところ
を誠に申し訳ありません。

NumArray の時の依頼には netlib/fftpack と並んで、fftw のサポート
がありました。NArray は既に大元のパッケージで fftw をサポートし
ています。しかし、fftw の機能の一部しか使っておらず、多次元配列
に関し FFT をどの次元に関してするかを制御することが出来ません。
実は今日初めて fftw をインストールしてマニュアルを見たところでちゃ
んとわかってないかもしれませんが、既に存在する NArray の FFT サ
ポートを充実するというのが、いいんじゃないかと思案してます。既に
例があるので、やりやすいでしょうし。

FFTW には複素と実のFourier変換はあるようですが、sine変換、cosine 
変換はないようです。既に作業してくれた netlib/ftpack にはそれが
あるのがいいです。ただ、実用レベルにするにはきちんと多次元配列に
対応しないとならないので、まず NArray の fftw コードにならって 
fftw のフルサポートをするなかで多次元配列のとり扱い仕様を固めて、
fftpack に戻って sine変換、cosine 変換をラインナップに加えるとい
うのがいいように思います。

fftw のフルサポートについてですが、今の NArray の fftw パッケー
ジでは、多次元配列があればそのすべての次元に関し FFT を施すよう
です。しかし、実際のデータ解析やシミュレーションでは特定の次元に
関しフーリエ変換を施し、残りはそのままにすることが多くあります。
一般には、どの次元に関してフーリエ変換するかを任意に選べると良い
のですが、fftw ではそれが出来るようです。そのためには (NArrayで
使ってる)関数 fftwnd_one でなく、関数 fftwnd を使う必要がありま
す。また、欲を言えば場合に応じて rfftwnd も使うようになって欲し
いところです。

netlib/fftpack のほうは恐らくそれ自体では多次元配列への対応があ
りません。従って C レベルで呼び出すときにループを回して多次元対
応をさせることになります。そうすると最初から多次元を意識したフー
リエ変換より計算効率はかなり落ちるでしょう。でも少々効率が悪くて
もないよりは絶対にましです。

ここは FFT の大家である石岡さんにお聞きしたいのですが、多次元配
列に対応した sine 変換, cosine 変換は石岡さん自身は作ってません
でしたっけ? ispack/ftpack/docには見当たらないようですが。
あればそちらを使う方がいいように思います。


堀之内 武                    horinout@xxxxxx
京都大学宙空電波科学研究センター     611-0011 宇治市五ヶ庄