私はこの DFT で壁に頭をぶつけています。8,0,0,0,0,0,0,0 と出力されますが、代わりに 8 と非常に小さな数字が表示されます。これらは丸め誤差ですか? 何か私にできることはありますか?私のRadix2 FFTは正しい結果をもたらします.DFTも機能しないのはばかげているようです.
私は複素数から始めたので、かなりの数が欠けていることがわかっているので、問題を説明するためにそれを取り除いてみました。
#include <cstdlib>
#include <math.h>
#include <iostream>
#include <complex>
#include <cassert>
#define SIZE 8
#define M_PI 3.14159265358979323846
void fft(const double src[], double dst[], const unsigned int n)
{
for(int i=0; i < SIZE; i++)
{
const double ph = -(2*M_PI) / n;
const int gid = i;
double res = 0.0f;
for (int k = 0; k < n; k++) {
double t = src[k];
const double val = ph * k * gid;
double cs = cos(val);
double sn = sin(val);
res += ((t * cs) - (t * sn));
int a = 1;
}
dst[i] = res;
std::cout << dst[i] << std::endl;
}
}
int main(void)
{
double array1[SIZE];
double array2[SIZE];
for(int i=0; i < SIZE; i++){
array1[i] = 1;
array2[i] = 0;
}
fft(array1, array2, SIZE);
return 666;
}