cuda fft 计算

 1 #include <assert.h>
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <string.h>
 5 #include <math.h>
 6 // Include CUDA runtime and CUFFT
 7 #include <cuda_runtime.h>
 8 #include <cufft.h>
 9
10 // Helper functions for CUDA
11 #include <helper_functions.h>
12 #include <helper_cuda.h>
13 #include "device_launch_parameters.h"
14
15 #define pi 3.1415926535
16 #define LENGTH 100 //signal sampling points
17 int main()
18 {
19     // data gen
20     float Data[LENGTH] = {1,2,3,4};
21     float fs = 1000000.000;//sampling frequency
22     float f0 = 200000.00;// signal frequency
23     for(int i=0;i<LENGTH;i++)
24     {
25       Data[i] = 1.35*cos(2*pi*f0*i/fs);//signal gen,
26
27     }
28
29     cufftComplex *CompData=(cufftComplex*)malloc(LENGTH*sizeof(cufftComplex));//allocate memory for the data in host
30     int i;
31     for(i=0;i<LENGTH;i++)
32     {
33         CompData[i].x=Data[i];
34         CompData[i].y=0;
35     }
36
37     cufftComplex *d_fftData;
38     cudaMalloc((void**)&d_fftData,LENGTH*sizeof(cufftComplex));// allocate memory for the data in device
39     cudaMemcpy(d_fftData,CompData,LENGTH*sizeof(cufftComplex),cudaMemcpyHostToDevice);// copy data from host to device
40
41     cufftHandle plan;// cuda library function handle
42     cufftPlan1d(&plan,LENGTH,CUFFT_C2C,1);//declaration
43     cufftExecC2C(plan,(cufftComplex*)d_fftData,(cufftComplex*)d_fftData,CUFFT_FORWARD);//execute
44     cudaDeviceSynchronize();//wait to be done
45     cudaMemcpy(CompData,d_fftData,LENGTH*sizeof(cufftComplex),cudaMemcpyDeviceToHost);// copy the result from device to host
46
47   for(i=0;i<LENGTH/2;i++)
48   {
49     //if(CompData[i].x != 0)
50     //{
51       printf("i=%d\tf= %6.1fHz\tRealAmp=%3.1f\t",i,fs*i/LENGTH,CompData[i].x*2.0/LENGTH);//print the result:
52     //}
53     //if(CompData[i].y != 0 )
54     //{
55       printf("ImagAmp=+%3.1fi",CompData[i].y*2.0/LENGTH);
56    // }
57     printf("\n");
58   }
59      cufftDestroy(plan);
60      free(CompData);
61      cudaFree(d_fftData);
62
63 }

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
请按任意键继续. . .

时间: 2024-11-05 02:27:31

cuda fft 计算的相关文章

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

Windows下FFTW库的安装: 1. 从网站http://www.fftw.org/install/windows.html上下载最新的预编译文件:    32-bit version: fftw-3.2.2.pl1-dll32.zip (1.8MB)    64-bit version: fftw-3.2.2-dll64.zip (2.2MB) (这里建议下载32位机文件/64位向下兼容) 2.使用Lib.exe生成相应的Lib文件: lib命令是vs2010自带的工具,在vs2010安装

【CUDA并行编程之五】计算向量的欧式距离

本文将介绍如何用cuda来计算两个向量之间的欧式距离,其中涉及到了如果将二维矩阵传入到核函数进行计算的问题,并且介绍两个内存分配和拷贝的API:cudaMallocPitch以及cudaMemcpy2D. 一.需求分析 现在我们要解决这么一个问题:计算一个D维的向量A[D]到二维矩阵B[N][D]的每一行的欧式距离,并且将每一组距离保存在一个向量dis[N]中并返回.我们还是通过串行和并行两种方式来进行实现. 二.串行实现 实现方法就是用一个二重循环进行相乘,然后将结果保存.上代码: dis_c

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

原文链接 第一节 CUDA 让你可以一边使用熟悉的编程概念,一边开发可在GPU上运行的软件. Rob Farber 是西北太平洋国家实验室(Pacific Northwest National Laboratory)的高级科研人员.他在多个国家级的实验室进行大型并行运算的研究,并且是几个新创企业的合伙人.大家可以发邮件到[email protected]与他沟通和交流. 您是否有兴趣在使用高级语言(比如C编程语言)编程时,通过标准多核处理器将性能提升几个数量级?您是否期待拥有跨多个设备的伸缩能力

FFT造成的频谱混叠,栅栏效应,频谱泄露,谱间干扰

fft在分析频谱分析的时候,会有下面四个方面的误差: (1)频谱混叠: 奈奎斯特定理已被众所周知了,所以几乎所有人的都知道为了不让频谱混叠,理论上采样频谱大于 等于信号的最高频率.那和时域上联系起来的关系是什么呢? 采样周期的倒数是频谱分辨率,最高频率的倒数是采样周期. 设定采样点数为N,采样频率fs,最高频率fh,故频谱分辨率f=fs/N,而fs>=2fh,所以可以看出最 高频率与频谱分辨率是相互矛盾的,提高频谱分辨率f的同时,在N确定的情况下必定会导致最高频 率fh的减小:同样的,提高最高频

离散时间序列的内插算法(利用fft)

有些时候,为了后续处理更方便,我们需要对采集到的数据点进行内插处理,也就是所谓的增采样.本文就来讨论一下常用的几种内插算法. 利用FFT实现信号内插 我们的信号 x(t) 是个实信号,带宽有限,能量有限.x[n] =x(nΔ)和 x'[n]  =x(nΔ')是对这个信号的两种采样,并且都满足采样定理的要求,也就是说信息并没有丢失.两次采样的采样率满足如下关系. 也就是说第二种采样的采样率是第一种采样的采样率的M 倍.如果我们有了x'[n],那么很容易获得x[n]: 但是反过来就不是那么容易了.下

CUDA基本概念

CUDA计算模型 CUDA中计算分为两部分,串行部分在Host上执行,即CPU,而并行部分在Device上执行,即GPU. 相比传统的C语言,CUDA增加了一些扩展,包括了库和关键字. CUDA代码提交给NVCC编译器,该编译器将代码分为Host代码和Device代码两部分. Host代码即为原本的C语言,交由GCC,ICC或其他的编译器处理: Device代码部分交给一个称为实时(Just in time)编译器的组件,在给代码运行之前编译.Device code编译成类似java的字节码文件

详解CUDA编程

CUDA 是 NVIDIA 的 GPGPU 模型,它使用 C 语言为基础,可以直接以大多数人熟悉的 C 语言,写出在显示芯片上执行的程序,而不需要去学习特定的显示芯片的指令或是特殊的结构." 编者注:NVIDIA的GeFoce 8800GTX发布后,它的通用计算架构CUDA经过一年多的推广后,现在已经在有相当多的论文发表,在商业应用软件等方面也初步出现了视频编解码.金融.地质勘探.科学计算等领域的产品,是时候让我们对其作更深一步的了解.为了让大家更容易了解CUDA,我们征得Hotball的本人同

FFT快速傅立叶变换的工作原理

实数DFT,复数DFT,FFT FFT是计算DFT的快速算法,但是它是基于复数的,所以计算实数DFT的时候需要将其转换为复数的格式,下图展示了实数DFT和虚数DFT的情况,实数DFT将时域中N点信号转换成2个(N/2+1)点的频域信号,其中1个(N/2+1)点的信号称之为实部,另一个(N/2+1)点的信号称之为虚部,实部和虚部分别是正弦和余弦信号的幅度. 相比较而言,复数DFT将2个N点的时域信号转换为2个N点的频域信号.时域和频域中,1个N点信号是实部,另1个N点信号是虚部. 如果要计算N点实

信号功率计算和测量

1 FFT 频谱分析的频率分辨率和幅度精度 1.1 FFT频谱分析是周期信号谱分析的快速算法.如何统一分析结果的频谱幅度与已知信号的每个频率分量的幅度? 一般的,对实信号的FFT分析结果乘以因子2/N得到其实际频率功率. 这里有两个定义的问题,第一,分析是信号是实信号还是复信号,第二所求功率是其实际物理功率(无负频率))还是数学上定义的功率(包括负频率). 首先摆出FFT的计算公式 计算的原理是原信号与不同频率的信号e-j2pi/N*kn的信号进行相关,相关的结果做为该频率2*pi/k分量的幅度