Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#define _USE_MATH_DEFINES
#include <math.h>
#undef _USE_MATH_DEFINES
#include <assert.h>
#include "utils.h"
#include "mydft.h"
extern double RTable[];
extern double ImTable[];
int DoDFT(const ComplexArray* x, ComplexArray* y, int inverse)
{
unsigned int k, j;
assert(x != 0);
assert(y != 0);
assert(x->count == y->count);
if (BitCount(x->count) != 1)
return 0;
//Is idft ?
inverse = inverse?1:-1;
for (k=0; k<=(x->count - 1); ++k)
{
double yr = 0;
double yi = 0;
double preOmega = 2.0*inverse*M_PI*k/x->count;
for (j=0; j<=(x->count - 1); ++j)
{
double tr = cos(preOmega*j);
double ti = sin(preOmega*j);
yr += tr*x->r[j] - ti*x->i[j];
yi += tr*x->i[j] + ti*x->r[j];
}
y->r[k] = yr;
y->i[k] = yi;
if (inverse == 1)
{
y->r[k] /= x->count;
y->i[k] /= x->count;
}
}
return 1;
}
int mydft(const ComplexArray* x, ComplexArray* y)
{
return DoDFT(x, y, 0);
}
int myidft(const ComplexArray* x, ComplexArray* y)
{
return DoDFT(x, y, 1);
}
Соседние файлы в папке fft