Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
27.03.2015
Размер:
732 б
Скачать
#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;
        }
    }
}
Соседние файлы в папке CUDA_Convolution_completed