我正在做一个项目,该项目需要我进行输入,执行 DFT(离散傅立叶变换),然后从这些值中获取零交叉的数量。
我编写了一个算法,但是,它使用复数,我不知道如何对它们进行操作/执行计算。这是代码:
#include <iostream>
#include <complex>
#include <vector>
using namespace std;
const double PI = 3.14159265358979323846;
vector< complex<double> > DFT(vector< complex<double> >& theData)
{
// Define the Size of the read in vector
const int S = theData.size();
// Initalise new vector with size of S
vector< complex<double> > out(S, 0);
for(unsigned i=0; (i < S); i++)
{
out[i] = complex<double>(0.0, 0.0);
for(unsigned j=0; (j < S); j++)
{
out[i] += theData[j] * polar<double>(2, (-2 * PI * i * j / S));
}
}
return out;
}
int main(int argc, char *argv[]) {
vector< complex<double> > numbers;
numbers.push_back(128);
numbers.push_back(127);
vector< complex<double> > testing = DFT(numbers);
for(unsigned i=0; (i < testing.size()); i++)
{
cout << testing[i] << endl;
}
}
现在,如果我想执行例如:
if(testing[i] >= 0)
{
// blah blah
}
然后它会返回一个错误。有什么想法或建议吗?是否可以在不使用复数的情况下创建 DFT?