#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
// Include CUDA runtime and CUFFT
#include <cuda_runtime.h>
#include <cufft.h> // Helper functions for CUDA
#include <helper_functions.h>
#include <helper_cuda.h>
#include "device_launch_parameters.h" #define pi 3.1415926535
#define LENGTH 100 //signal sampling points
int main()
{
// data gen
float Data[LENGTH] = {,,,};
float fs = 1000000.000;//sampling frequency
float f0 = 200000.00;// signal frequency
for(int i=;i<LENGTH;i++)
{
Data[i] = 1.35*cos(*pi*f0*i/fs);//signal gen, } cufftComplex *CompData=(cufftComplex*)malloc(LENGTH*sizeof(cufftComplex));//allocate memory for the data in host
int i;
for(i=;i<LENGTH;i++)
{
CompData[i].x=Data[i];
CompData[i].y=;
} cufftComplex *d_fftData;
cudaMalloc((void**)&d_fftData,LENGTH*sizeof(cufftComplex));// allocate memory for the data in device
cudaMemcpy(d_fftData,CompData,LENGTH*sizeof(cufftComplex),cudaMemcpyHostToDevice);// copy data from host to device cufftHandle plan;// cuda library function handle
cufftPlan1d(&plan,LENGTH,CUFFT_C2C,);//declaration
cufftExecC2C(plan,(cufftComplex*)d_fftData,(cufftComplex*)d_fftData,CUFFT_FORWARD);//execute
cudaDeviceSynchronize();//wait to be done
cudaMemcpy(CompData,d_fftData,LENGTH*sizeof(cufftComplex),cudaMemcpyDeviceToHost);// copy the result from device to host for(i=;i<LENGTH/;i++)
{
//if(CompData[i].x != 0)
//{
printf("i=%d\tf= %6.1fHz\tRealAmp=%3.1f\t",i,fs*i/LENGTH,CompData[i].x*2.0/LENGTH);//print the result:
//}
//if(CompData[i].y != 0 )
//{
printf("ImagAmp=+%3.1fi",CompData[i].y*2.0/LENGTH);
// }
printf("\n");
}
cufftDestroy(plan);
free(CompData);
cudaFree(d_fftData); }

i=0 f= 0.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=1 f= 10000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=2 f= 20000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=3 f= 30000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=4 f= 40000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=5 f= 50000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=6 f= 60000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=7 f= 70000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=8 f= 80000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=9 f= 90000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=10 f= 100000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=11 f= 110000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=12 f= 120000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=13 f= 130000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=14 f= 140000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=15 f= 150000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=16 f= 160000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=17 f= 170000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=18 f= 180000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=19 f= 190000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=20 f= 200000.0Hz RealAmp=1.4 ImagAmp=+0.0i
i=21 f= 210000.0Hz RealAmp=0.0 ImagAmp=+-0.0i
i=22 f= 220000.0Hz RealAmp=0.0 ImagAmp=+-0.0i
i=23 f= 230000.0Hz RealAmp=-0.0 ImagAmp=+-0.0i
i=24 f= 240000.0Hz RealAmp=-0.0 ImagAmp=+-0.0i
i=25 f= 250000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=26 f= 260000.0Hz RealAmp=0.0 ImagAmp=+-0.0i
i=27 f= 270000.0Hz RealAmp=-0.0 ImagAmp=+-0.0i
i=28 f= 280000.0Hz RealAmp=-0.0 ImagAmp=+-0.0i
i=29 f= 290000.0Hz RealAmp=-0.0 ImagAmp=+-0.0i
i=30 f= 300000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=31 f= 310000.0Hz RealAmp=0.0 ImagAmp=+-0.0i
i=32 f= 320000.0Hz RealAmp=-0.0 ImagAmp=+-0.0i
i=33 f= 330000.0Hz RealAmp=-0.0 ImagAmp=+-0.0i
i=34 f= 340000.0Hz RealAmp=-0.0 ImagAmp=+-0.0i
i=35 f= 350000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=36 f= 360000.0Hz RealAmp=0.0 ImagAmp=+-0.0i
i=37 f= 370000.0Hz RealAmp=-0.0 ImagAmp=+-0.0i
i=38 f= 380000.0Hz RealAmp=-0.0 ImagAmp=+-0.0i
i=39 f= 390000.0Hz RealAmp=-0.0 ImagAmp=+-0.0i
i=40 f= 400000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=41 f= 410000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=42 f= 420000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=43 f= 430000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=44 f= 440000.0Hz RealAmp=0.0 ImagAmp=+-0.0i
i=45 f= 450000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=46 f= 460000.0Hz RealAmp=0.0 ImagAmp=+0.0i
i=47 f= 470000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=48 f= 480000.0Hz RealAmp=-0.0 ImagAmp=+0.0i
i=49 f= 490000.0Hz RealAmp=0.0 ImagAmp=+-0.0i
请按任意键继续. . .

cuda fft 计算的更多相关文章

  1. 利用FFT 计算生成离散解析信号

    通常我们用到的信号都是实值信号,但是我们可以根据这个实信号构造出一个复信号,使得这个复信号只包含正频率部分,而且这个复信号的实部正好就是我们原来的实值信号.简单的推导可知,复信号的虚部是原信号的希尔伯 ...

  2. 并行计算提升32K*32K点(32位浮点数) FFT计算速度(4核八线程E3处理器)

    对32K*32K的随机数矩阵进行FFT变换,数的格式是32位浮点数.将产生的数据存放在堆上,对每一行数据进行N=32K的FFT,记录32K次fft的时间. 比较串行for循环和并行for循环的运行时间 ...

  3. 使用 CUDA 进行计算优化的两种思路

    前言 本文讨论如何使用 CUDA 对代码进行并行优化,并给出不同并行思路对均值滤波的实现. 并行优化的两种思路 思路1: global 函数 在 global 函数中创建出多个块多个线程对矩阵每个元素 ...

  4. 第七篇:使用 CUDA 进行计算优化的两种思路

    前言 本文讨论如何使用 CUDA 对代码进行并行优化,并给出不同并行思路对均值滤波的实现. 并行优化的两种思路 思路1: global 函数 在 global 函数中创建出多个块多个线程对矩阵每个元素 ...

  5. 安装fftw到window(vs2010)及使用fftw库函数实现4096点fft变换计算

    Windows下FFTW库的安装: 1. 从网站http://www.fftw.org/install/windows.html上下载最新的预编译文件:    32-bit version: fftw ...

  6. 两通道实信号使用一个FFT同时计算算法

    前言 在工程的实际应用场景中,往往是需要最省资源量.而DSP资源和BRAM资源对FPGA来说弥足珍贵. 对于同时存在多个通道的实信号需要做FFT而言,常规做法是每个通道用一个FFT IP,FFT IP ...

  7. CUDA刷新:GPU计算生态系统

    CUDA刷新:GPU计算生态系统 CUDA Refresher: The GPU Computing Ecosystem 这是CUDA Refresher系列的第三篇文章,其目标是刷新CUDA中的关键 ...

  8. OpenCL与CUDA,CPU与GPU

    OpenCL OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式.免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计 ...

  9. CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第一节

    原文链接 第一节 CUDA 让你可以一边使用熟悉的编程概念,一边开发可在GPU上运行的软件. Rob Farber 是西北太平洋国家实验室(Pacific Northwest National Lab ...

随机推荐

  1. Squire – 简洁的 HTML5 富文本编辑器

    Squire 是一个简洁的 HTML5 富文本编辑器,它提供了强大的跨浏览器的标准化,超级轻巧灵活.它是建立在现在和未来并作为研究,因此并不支持那些古老的浏览器. 在线演示      源码下载 您可能 ...

  2. HTML中表单提交数据GET、POST的区别

    表单提交数据Get和Post的区别: GET和POST是表单提交数据其中的两种方式,除此之外还有PUT.DELETE等. GET: GET的请求起因于正常的URL请求,或是没有指定METHOD的HTM ...

  3. Sublime Text 3汉化中文版

    Sublime Text 3汉化中文版是Sublime Text2的升级版.Sublime Text 是一款流行的文本编辑器软件,有点类似于TextMate,跨平台,可运行在Linux,Windows ...

  4. git 设置 key 到服务器,同步代码不需要输入用户名和密码

    1  ssh-keygen -t rsa 2  vim ~/.ssh/id_rsa.pub 3. 添加到git 服务器,这样同步代码就不需要输入密码

  5. CAGradientLayer渐变效果

    属性 startPoint和endPoint 决定渐变方向,以单位坐标系定义.左上角{0,0},右下角{1,1} colors 渐变的颜色,是一个CGColorRef的数组. locations 定义 ...

  6. Android 中的编码与解码

    前言:今天遇到一个问题,一个用户在登录的时候,出现登录失败.但是其他用户登录都是正常的,经过调试发现登录失败的用户的密码中有两个特殊字符: * .#  . 特殊符号在提交表单的时候,出现了编码不一样的 ...

  7. Android ANR产生的原理和如何避免

    在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框.用户可以选择 ...

  8. 什么是java path环境变量

    参考:https://docs.oracle.com/javase/tutorial/essential/environment/paths.html 从orcle官网的文档中可以看到java pat ...

  9. 浅谈Java五大设计原则之观察者模式

    定义一下观察者模式: 观察者模式又叫  发布-订阅  模式,定义的两个对象之间是一种一对多的强依赖关系,当一个对象的状态发生改变,所有依赖它的对象 将得到通知并自动更新(摘自Hand First). ...

  10. 【Android】中兴ZTE sdcard路径的问题

    测试机: ZTE U950 现象: 用Environment.getExternalStorageDirectory()取到的路径是/mnt/sdcard 真相: /mnt/sdcard/是一个空文件 ...