はい、等しくない指数多項式でDFFTを使用することは可能です...
欠落している指数は、0
これも数値で乗算されるだけです...多項式を書き直すだけです:
A(x) = 1 + 3x^2 + 9x^8
B(x) = 5x + 6x^3 + 10x^8
このようなものに:
A(x) = 1x^0 + 0x^1 + 3x^2 + 0x^3 + 0x^4+ 0x^5+ 0x^6+ 0x^7 + 9x^8
B(x) = 0x^0 + 5x^1 + 0x^2 + 6x^3 + 0x^4+ 0x^5+ 0x^6+ 0x^7 + 10x^8
DFFTのベクトルは次のとおりです。
A = (1,0,3,0,0,0,0,0, 9)
B = (0,5,0,6,0,0,0,0,10)
ベクトルが正しい結果サイズ (最大 A 指数 +1 + 最大 B 指数 +1) になるようにゼロを追加し、 DFFT2
を使用するために の最も近い累乗に切り上げると、元のサイズは次のようになります。9,9 -> 9+9 -> 18 -> round up -> 32
A = (1,0,3,0,0,0,0,0, 9,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0)
B = (0,5,0,6,0,0,0,0,10,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0)
// | original | correct result | nearest power of 2 |
必要なDFFTを実行します...次のようなことをしたいと思います:
A' = DFFT(A)
B' = DFFT(B)
C(i)' = A'(i) * B'(i) // i=0..n-1
C= IDFFT(C')
ですO(n*log(n))
。DFFT (DFT ではない)を使用する場合、n = 18 ではなく 32であることを忘れないでください!!! DFFT(A)、DFFT(B)のDFFT重み行列を見るよりもパフォーマンスを向上させたい場合も、 DFTの高速アルゴリズムのべき乗でなければならないため、それらは同じであるため、2回計算する必要はありません...n
2