Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:CUDA_full / P06_Convolution / CUDA_Convolution_completed / convolution
.cpp#include "convolution.h"
// Вычисление циклической свертки по определению.
void convolve(const cufftComplex * a, const cufftComplex * b, int n, cufftComplex * result)
{
// Цикл по элементам результата.
for (int i = 0; i < n; ++i)
{
result[i].x = 0;
result[i].y = 0;
// Вычисляем result[i] = sum(a[j] * b[i - j], 0 <= j <= n - 1),
// сигналы являются периодическими: b[-k] = b[n - k].
for (int j = 0; j < n; ++j)
{
int idx = ((j <= i) ? (i - j) : (n + i - j)); // учитываем периодичность
result[i].x += a[j].x * b[idx].x - a[j].y * b[idx].y;
result[i].y += a[j].x * b[idx].y + a[j].y * b[idx].x;
}
}
}