用C +离散傅立叶变换表示复数

时间:2011-09-15 21:13:26

标签: c++ math stl fft complex-numbers

我目前正在编写一个小工具,可以帮助我检查我的手动计算的傅里叶向量是否正确。现在我需要omega = exp(2*pi*i / n)指定的第n个Unity根。有人可以解释一下如何在C ++中将此omega表示为complex吗?

3 个答案:

答案 0 :(得分:4)

使用Euler's formula

exp(2πi/n) = cos(2π/n) + i sin(2π/n)

然后很容易:

complex<double> rootOfUnity(cos(TWOPI/n), sin(TWOPI/n));

(将TWOPI替换为系统中可用的宏,或者只是你认为合适的2π的值。)

答案 1 :(得分:2)

嗯,旋转因子欧米茄的实部和虚部只是:

double angle = 2*pi/n;

double real = cos(angle);
double imaj = sin(angle);

complex<double> omega(real, imaj);

答案 2 :(得分:2)

有一个函数使用极坐标返回一个复数:

#include<complex>
complex polar(const T& rho)
complex polar(const T& rho, const T& theta)

其中rho是幅度,theta是以弧度表示的角度。

在这种情况下,rho始终为1.0。

const double pi = 3.141592653589793238462643383279;
double omega = polar(1.0, 2*pi*i/n);