离散傅里叶变换中复数的c++表示

Representation of complex numbers in C++ for Discrete Fourier Transformation

本文关键字:c++ 表示 傅里叶 变换      更新时间:2023-10-16

我目前正在编写一个小工具,它应该可以帮助我检查我手动计算的傅里叶向量是否正确。现在我需要由omega = exp(2*pi*i / n)指定的Unity的n次根。有人能告诉我怎么用c++把omega表示成complex吗?

使用欧拉公式:

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

那就简单了:

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

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

那么,中间因子的实部和虚部就是:

double angle = 2*pi/n;
double real = cos(angle);
double imaj = sin(angle);
complex<double> omega(real, imaj);

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

#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);