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

[dennou-ruby:000998] Re: numru_fft



堀之内です。

今度は高橋(北大)君の FFT。

> fftw に対応した numru_fft をリリースしました。
> 複素数の正変換 (fft)、逆変換 (ffti) を使用できます。
> チェックをお願いいたします。
> 
> http://www.ep.sci.hokudai.ac.jp/~kazto/work/
> http://www.ep.sci.hokudai.ac.jp/~kazto/work/product/numru_fft-0.0.2a.tar.gz

基本的に、よさそうに見えるのですが、Segmentation Fault で落ちた
りします:

  % cat test-hori.rb
  require "narray"
  if File.exist?("./fft.so")
    require "fft"
  else
    require "numru/fft"
  end
  na=NArray.scomplex(10,10,10)
  na[1,2,0]=1
  p a = na.fft(1)

  % ruby test-hori.rb
  test-hori.rb:10: [BUG] Bus Error
  ruby 1.6.5 (2001-09-19) [sparc-solaris2.6]
  Abort

付いてきたテストプログラムに、

na=na.fft(0,0,0)

とあって、何じゃこれはと思ったのですが、同じ次元が何個あっても意
味がないのですね。こういうのはむしろチェックして陽に禁止する方が
いいと思います。

ところで、複素にしか対応してませんが、それ以外の場合は cast で対
応出来ます。それ以外の点についても、前に書いたように NArray 付属
の na_fftw.c を参考にしてください。(整合性がとれないと NArray 
に取り込んで貰えないでしょう)

返事が遅くなったのは申し訳ありませんが、ドキュメントがついてない、
付属のテストプログラムだけではテストになりそうにないといったこと
で、簡単には反応できませんでした。大変申し訳ありませんが、多くの
仕事を抱えてますので、高橋君がとりあえずのものを作って、私が頑張っ
てきちんとしたチェックをするというスタイルには出来ませんので、よ
ろしくお願いします。ドキュメンテーションとテストプログラムもお願
いします。テストは結果が分かっている場合を用いて、実際にその通り
になるかを様々な使用パターンで確認出来るものがいいです。

ところで、nd のつかない fft のみを用いていますね。参考までに 
fftnd を使えば、以下のように出来ます。

    例として6次元配列を想定します。例えば fft(1,2,4) と呼ぶと、
    各次元に関し、変換するしないは以下のようになります。

       [ しない, する,  する, しない, する, しない ]

    nd なしだと fft を3回呼ぶことになりますが、fftnd を使うと、
    以下のように2回に出来ます。

       [ しない, する,  する, しない, する, しない ]
                 ^^^^^^^^^^^          ^^^^
                 fftndを2Dで        fftndを1Dで
                                  (またはfftを使う)

まあ、そうしなくてもいいです。

> さて、次は rfftw なのですが、少々悩むところがあります。
> rfftw には rfftw と rfftwnd があり、それぞれ

rfft も rfftwnd も使わない、つまり効率とメモリースペースを犠牲に
して、データ構造のすっきりした fftw/fftwnd のみを使うという手も
あります。機能的には (rのつかない) fft で足りるので、少なくとも 
rfft サポートの優先度が高いとは言えません。以前にも書きましたが、
fft の次は、sine 変換、cosine 変換に進むというのがいいと思います。
DCL に fftpack から流用した一次元版が入ってますが、その多次元対
応ですね

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