■91933 |
Re[14]: C++からVBへの変換 |
□投稿者/ 魔界の仮面弁士 -(2019/08/10(Sat) 16:23:56)
| 2019/08/10(Sat) 16:26:50 編集(投稿者)
■No91932 (774RR さん) に返信 > FFT なんぞテキトーに探せばいくらでもライブラリが転がっているような気のせいがする。
この辺にありそうな気がします。確認はしていませんけど。 https://www.nuget.org/packages?q=fft
VB.NET に移植済みの実装が欲しいという話なら、こんなのもあります。 http://numeric.world.coocan.jp/computer/vb/mathpack.htm
Excel VBA でも良ければこんなのもありました。 関数化はされていないものの、再帰処理を用いないフラットな実装。 http://tsuyu.cocolog-nifty.com/blog/2007/03/publi.html
真面目に再実装する気があるなら、複素数構造体を併用すると良いかもしれません。 https://docs.microsoft.com/ja-jp/dotnet/api/system.numerics.complex.frompolarcoordinates
複素数構造体を用いた実装例は下記にありました。 F# なので参考にはしにくいかもしれませんが。 http://www.fssnip.net/dC/title/fast-Fourier-transforms-FFT-
■No91927 (えんえん さん) に返信 > For r As Integer = 0 To n - 1 Step n_radix > fft(n_radix, theta * radix, tmpr, tmpi, ar, ai, r_st + r) > Next r > としてみましたが、 > それでも、やはり正しい結果は得られないのですが、なぜでしょうか?
オリジナル版にある fft(n_radix, theta * radix, &tmpr[r], &tmpi[r], ar, ai); ってのは fft(n_radix, theta * radix, &tmpr[r], &tmpi[r], &ar[0], &ai[0]); でもあるわけですし、再帰で tmpX と aX が入れ替わる点が肝かと思います。
すなわち、index の offset は r_st 一つでは足りなくて、 a 系と tmp 系の両方に対して用意すべきかと思います。 |
|