Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#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