Скачиваний:
58
Добавлен:
16.04.2013
Размер:
1.06 Кб
Скачать
#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