1

「Proceedings of the IEEE」、N. Jeremy Kasdin (page 825) pdfから次のコードを実装します。しかし、私はNumerical Recipesの本を持っていないので、これらの行を理解していません:

/* perform the discrete Fourier transform */  
realft (hfa,n_pts, 1); 
realft (wfa,n_pts, 1);

wfa[1]=wfa[1]*hfa[1]; 
wfa[2]=wfa[2]*hfa[2]; 

for(i=3;i<=nn;i+=2) { 
wr=wfa[i]; 
wi=wfa[i+1]; 
wfa[il=wr*hfa[i]-wi*hfa[i+1]; 
wfa[i+l]=wr*hfa[i+1]+wi*hfa[i];
}

道順を教えてもらえますか?

4

1 に答える 1

3

NRのrealft関数は次のことを行います。N 実数の配列をフィードします。(N は 2 の累乗でなければなりません。) これの離散フーリエ変換は、共役対称関係に従う N 個の複素数で構成されます。F(k) と F(Nk) は共役です。特に、F(0) と F(N/2) は実数です。F(0)、F(N/2)、F(1) の実数部、F(1) の虚数部、F(2) の実数部、 ... realft、虚数 N の実数を返します。 F(N/2-1) の一部。

NR はもともとすべて Fortran であり、(少なくとも古いエディションでは) 0 ベースではなく 1 ベースのインデックスを使用しています。C であっても。そのため、コードは要素 1 の操作から開始しnn、排他的ではなく包括的に実行されます。

これで、 と の FT をそのhfa場で取りましwfaた。コードの残りの部分は、結果の要素ごとの積を計算するだけです。最初の 2 行は単純な実数の乗算で、残りは複素数の乗算です。

realftその後、最後の引数としてwithへの別の呼び出しがあると思い-1ます (逆の操作を行うことを意味します)。したがって、全体は次のとおりhfaですwfa。それらを要素ごとに乗算します。逆FT。言い換えれば、畳み込み。

于 2012-07-04T01:03:31.820 に答える