Скачиваний:
58
Добавлен:
16.04.2013
Размер:
969 б
Скачать
#include <assert.h>
#include "myconv.h"

#define CONV_HEAD \
	u->r[i] = 0.0; \
	u->i[i] = 0.0; \

#define CONV_IMPL \
	unsigned int si = i - j; \
	u->r[i] += sa->r[j]*ba->r[si] - sa->i[j]*ba->i[si]; \
	u->i[i] += sa->r[j]*ba->i[si] + sa->i[j]*ba->r[si]; \

int myconv(const ComplexArray* x, const ComplexArray* y, ComplexArray* u)
{
	unsigned int N, i, j;

	const ComplexArray *sa, *ba;

	assert(x != 0);
	assert(y != 0);
	assert(u != 0);

	N = x->count + y->count - 1;

	if (!ComplexArrayCreate(u, N))
		return 0;

	ba = (x->count > y->count)?x:y;
	sa = (x->count > y->count)?y:x;

	for (i=0; i<sa->count; ++i)
	{
		CONV_HEAD
		for (j=0; j<=i; ++j)
		{
			CONV_IMPL
		}
	}

	for (i=sa->count; i<ba->count; ++i)
	{
		CONV_HEAD
		for (j=0; j<sa->count; ++j)
		{
			CONV_IMPL
		}
	}

	for (i=ba->count; i<N; ++i)
	{
		CONV_HEAD
		for (j=i - ba->count + 1; j<sa->count; ++j)
		{
			CONV_IMPL
		}
	}

	return 1;
}
Соседние файлы в папке fft