具有不同指数项的方程的FFT

时间:2013-09-22 04:45:35

标签: algorithm fft

我是FFT的新手,所以我对某些概念感到有些困惑。到目前为止,我在方程乘法中看到的FFT示例涉及具有连续指数的方程(即A(x) = 1 + 3x + 5x^2 +...B(x) = 4 + 6x + 9x^2 + ...以及C(x) = A(x)*B(x))。但是,可以在两个没有相同指数的方程上使用FFT吗?例如,是否可以使用FFT乘以:

A(x) = 1 + 3x^2 + 9x^8

B(x) = 5x + 6 x^3 + 10x^8

O(nlogn)时间?

如果没有,是否存在运行时为O(nlogn)的情况?例如,如果产品中的字词数为O(n)而不是O(n^2)

即使运行时间超过O(nlogn),我们如何使用FFT来最小化运行时间呢?

1 个答案:

答案 0 :(得分:0)

是的,可以在非等指数多项式上使用 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),并且对于 DFFT 的使用情况也会向2舍入最接近的幂{x}}原始尺寸为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 = 32 而不是18 !!!因为对于 DFT 的快速算法,n必须是2的强大功能,如果你想要性能改进而不是看 DFFT 权重矩阵 DFFT(A),DFFT(B)它们是相同的,所以不需要计算它们两次......