Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
VADIM290692
23 / 23 / 9
Регистрация: 26.02.2013
Сообщений: 132
#1

БПФ - C++

10.04.2014, 09:49. Просмотров 913. Ответов 2
Метки нет (Все метки)

Я учусь на радиотехническом факультете. Для диплома понадобилось использовать технологию CUDA. Пытаюсь выполнить БПФ с помощью библиотеки cuFFT. но результат неправильный.
Заранее спасибо за любую помощь))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include<iostream>
#include <cufft.h>
#include <cuda_runtime.h>
#define SIGNAL_SIZE        8
 
typedef float2 Complex;
using std::cout;
using std::endl;
unsigned int timer=0; 
__host__ int main() 
 
{
    
    // Allocate host memory for the signal
    Complex *h_signal = (Complex *)malloc(sizeof(Complex) * SIGNAL_SIZE);
    Complex *h_result_signal = (Complex *)malloc(sizeof(Complex) * SIGNAL_SIZE);
    // Initalize the memory for the signal
    for (unsigned int i = 0; i < SIGNAL_SIZE; ++i)
    {
        h_signal[i].x = rand()/(float)RAND_MAX;
        h_signal[i].y = rand()/(float)RAND_MAX;
        cout<<"<"<< h_signal[i].x<<","<<h_signal[i].y<<">"<<"\n"; 
    }
    
     for (unsigned int i = 0; i < SIGNAL_SIZE; ++i)
    {
        h_result_signal[i].x = 0;
       h_result_signal[i].y = 0;
        cout<<"<"<< h_result_signal[i].x<<","<<h_result_signal[i].y<<">"<<"\n"; 
    }
 
    // Allocate device memory for signal
    cufftComplex *d_signal;
    cudaError_t cuerr=cudaMalloc((void **)&d_signal,sizeof(float)*SIGNAL_SIZE);
    if(cuerr!=cudaSuccess)
      cout<<"Cannot create GPU memory buffer for d_signal"<<endl;
    
    // Copy host memory to device
    cudaError_t cudaResult=cudaMemcpy(d_signal,h_signal,sizeof(float) *SIGNAL_SIZE,cudaMemcpyHostToDevice);
    if(cudaResult!=cudaSuccess)
                        cout<<"Could not copy data from device to host"<<endl;
    
    // CUFFT plan
    cufftHandle plan;
    cufftPlan1d(&plan,sizeof(float) *SIGNAL_SIZE, CUFFT_C2C, 1);
 
    // Transform signal
    cufftExecC2C(plan, d_signal, d_signal, CUFFT_FORWARD);
 
     // Copy device memory to host
    
     //Хендл event’а 
  cudaEvent_t syncEvent; 
  cudaEventCreate(&syncEvent);    //Создаем event 
  cudaEventRecord(syncEvent, 0);  //Записываем event 
  cudaEventSynchronize(syncEvent);  //Синхронизируем event 
 
    cudaResult=cudaMemcpy(h_result_signal, d_signal, sizeof(float) *SIGNAL_SIZE,cudaMemcpyDeviceToHost);
      if(cudaResult!=cudaSuccess)
         cout<<"Could not copy data from device to host"<<endl;
 
    for (unsigned int i = 0; i < SIGNAL_SIZE; ++i)
    {
        cout<<"<"<< h_result_signal[i].x<<","<<h_result_signal[i].y<<">"<<"\n"; 
    }
 
      //Destroy CUFFT context
    cufftDestroy(plan);
    // cleanup memory
    free(h_signal);
    free(h_result_signal);
    cudaFree(d_signal);
    cudaDeviceReset();
    system("pause");
 
}
Результат работы(причем каждый раз разный, хотя входные данные одинаковы) и правильный результат.
БПФ БПФ
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2014, 09:49     БПФ
Посмотрите здесь:

БПФ на с++ - C++
Заранее прошу прощения, если тема уже существует, а я создаю снова. Дело в том, что понадобилась программа БПФ на с++, моих возможностей...

БПФ - Visual C++
Доброе время суток. Не подскажите, можно ли где-нибудь найти реализацию БПФ на С++? Могу и сам, конечно, написать. Просто не хочется...

БПФ - Assembler
Чтобы не быть многословным,выложу алгоритм БПФ. Писалось по принципу &quot;лишь бы работало&quot; и &quot;лишь бы быстрее сделать&quot;. Поэтому вылаживаю...

БПФ - C++
Добрый день, скажите кто знает, как на С/C++ сосчитать БПФ, какую библиотеку для этого можно использовать?

БПФ на Atmega8A - AVR
Здравствуйте, подскажите пожалуйста, вот в голову пришло сделать гитарный тюнер. Сдуру сразу развел плату, четыре семисегментных...

ДПФ и БПФ - MathCAD
как найти ДПФ и БПФ дискретного сигнала не используя стандартные функции? как записать ДПФ и БПФ?? :wall:

Двумерное БПФ - Алгоритмы
Рассмотрим сначала одномерный случай. Пусть x(t), y(t) две действительные функции. Можно представить представить комплексную функцию...

БПФ и разрядность - Цифровая обработка сигналов
Помогите. Нужно вичеслить розрядность (N) БП, если время преобразования равен 20нс, а частота полосы равна 7 Ггц Добавлено через 10...

БПФ синусоиды - Цифровая обработка сигналов
Делаю БПФ для массива данных (индекс-отсчет, значение массива- значение файла в момент этого отсчета), переделав его под офлайн обработку...

БПФ массива с данными - Delphi
Здравствуйте. Реализовываю преобразование Фурье для массива с данными, извлеченных из wav файла. Ранее общался с этой темой только...

Увеличение точности БПФ - Matlab
Народ помогите, создал сигнал, выполнил БПФ, нашёл точку( спектральный отсчёт) где спектр сигнала максимален. Теперь мне нужно более...

Размазывание при БПФ? - Цифровая обработка сигналов
Приветствую всех. Друзья, снова заезженное БПФ, с которым я совсем недавно связался и до сих пор не могу найти решение к описанной ниже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
10.04.2014, 14:37     БПФ #2
У вас сигнал задается случайными числами (пусть и без инициализации генератора), как вы вообще можете проверить правильность рассчета?
VADIM290692
23 / 23 / 9
Регистрация: 26.02.2013
Сообщений: 132
10.04.2014, 16:05  [ТС]     БПФ #3
Ну во-первых - числа псевдослучайные, а во-вторых - я же отсчеты сигнала (исходного) вывожу на консоль. я прbложил документ mathCAD в котором есть правильный результат
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru