傅立叶变换—FFT(cuda实现)

背景:

无意间看到cuda解决FFT有一个cufft函数库,大体查看了有关cufft有关知识,写了一个解决一维情况的cuda代码,据调查知道cufft在解决1D,2D,3D的情况时间复杂度都为O(nlogn),附上解决一维情况的代码,准备后面找一些详细的资料去学习一下cuda的函数库。

#include "stdio.h"
#include "cuda_runtime.h"
#include "cufft.h"
#include "device_launch_parameters.h"

#define LENGTH 4
int main()
{
    float Data[LENGTH] = {1,2,3,4};
    cufftComplex *CompData=(cufftComplex*)malloc(LENGTH*sizeof(cufftComplex));
    int i;
    for(i=0;i<LENGTH;i++)
    {
        CompData[i].x=Data[i];
        CompData[i].y=0;
    }

    cufftComplex *d_fftData;
    cudaMalloc((void**)&d_fftData,LENGTH*sizeof(cufftComplex));
    cudaMemcpy(d_fftData,CompData,LENGTH*sizeof(cufftComplex),cudaMemcpyHostToDevice);

    cufftHandle plan;
    cufftPlan1d(&plan,LENGTH,CUFFT_C2C,1);
    cufftExecC2C(plan,(cufftComplex*)d_fftData,(cufftComplex*)d_fftData,CUFFT_FORWARD);
    cudaDeviceSynchronize();
    cudaMemcpy(CompData,d_fftData,LENGTH*sizeof(cufftComplex),cudaMemcpyDeviceToHost);

  for(i=0;i<LENGTH;i++)
  {
    if(CompData[i].x != 0)
    {
      printf("%3.1f",CompData[i].x);
    }
    if(CompData[i].y != 0 )
    {
      printf("+%3.1fi",CompData[i].y);
    }
    printf("\n");
  }
     cufftDestroy(plan);
     free(CompData);
     cudaFree(d_fftData);

}

在Linux下运行的这段代码:

编译命令:nvcc -o fftcu FFT.cu -I /usr/local/cuda/include  -L /usr/local/cuda/lib64 -lcufft

运行命令:./fftcu

注:/usr/local/cuda/include中有cufft.h头文件,/usr/local/cuda/lib64中有libcufft.so库文件

时间: 2024-10-12 17:38:22

傅立叶变换—FFT(cuda实现)的相关文章

快速傅立叶变换(FFT)相关内容汇总

FFT是近年考察非常频繁的算法,与其相关的知识点也相当多样. 这里主要是资料汇总,内容补充和总结等.具体应用应在各大OJ上做相关题目. 目录: 概述 1. 前置技能:数学基础 1.1 多项式概念与运算. 1.2 微积分初步与泰勒展开 1.3 普通型生成函数与指数型生成函数 1.4 线性代数相关(矩阵,行列式与特征多项式) 1.5 组合数与伯努利数 1.6 常系数齐次线性递推 1.7 初等数论与初等代数 1.8 卷积概念与O(n^2)求法 1.9 拉格朗日插值法 2. FFT:快速傅立叶变换算法总

TOT 傅立叶变换 FFT 入门

HDU 1402,计算很大的两个数相乘. FFT 只要78ms,这里: 一些FFT 入门资料:http://wenku.baidu.com/view/8bfb0bd476a20029bd642d85.html (讲解的很详细 http://blog.csdn.net/iamzky/article/details/22712347 (这个也不错 另外算导的其实也蛮好,只是怕公式的看前面的也可. IDFT只是FFT的逆变换,这里想了很久原来只要在FFT 变换后的结果后/N 即可,算实数部分即可. 前

傅立叶变换的深入理解 转载 数字信号处理

傅立叶变换的深入理解 2007年10月05日 星期五 16:41 专题讨论四:关于傅里叶变换的讨论[精彩] 有奖征集:大家讨论一下傅里叶变换相关的内容: 1 变换的目的,意义,应用. 2 傅里叶级数与傅里叶变换的差别和联系 3 连续傅里叶变换,离散时间傅里叶变换,离散傅里叶变换,序列的傅里叶变换,各自的定义,差别,联系. 3 高速傅里叶变换的实质,经常使用的算法之间的差别和联系,各自的优势. 4 fft的应用讨论: 1.变换是时间变量函数变成相应变换域的某种变量函数,这样使运算简单,处理方便.变

为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换

写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,绝大部分内容非我所原创.在此向多位原创作者致敬!!! 一.傅立叶变换的由来 关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶变换的描述,但是大都是些故弄玄虚的文章,太过抽象,尽是一些让人看了就望而生畏的公式的罗列,让人很难能够从感性上得到理解,最近,我偶尔从网上看到一个关于数字信号处理的电子书籍,是一个叫Steven W. Smith, Ph.D.外国人写的,写得非常浅显,里面有七章由浅入深地专门讲述关于离散信号的傅

Matlab图像处理系列4———图像傅立叶变换与反变换

注:本系列来自于图像处理课程实验,用Matlab实现最基本的图像处理算法 1.Fourier变换 (1)频域增强 除了在空间域内可以加工处理图像以外,我们还可以将图像变换到其他空间后进行处理,这些方法称为变换域方法,最常见的变换域是频域. 使用Fourier变换把图像从空间域变换到频域,在频域内做相应增强处理,再从频域变换到空间域得到处理后的图像. 我们这里主要学习Fourier变换和FFT变换的算法,没有学过通信原理,我对信号.时域分析也不是很清楚. 2.FFT算法 (1)离散Fourier变

傅立叶变换的深入理解(转帖)

傅立叶变换的深入理解 2007年10月05日 星期五 16:41 专题讨论四:关于傅里叶变换的讨论[精彩] 有奖征集:大家讨论一下傅里叶变换相关的内容: 1 变换的目的,意义,应用. 2 傅里叶级数与傅里叶变换的差别和联系 3 连续傅里叶变换,离散时间傅里叶变换,离散傅里叶变换,序列的傅里叶变换,各自的定义,差别,联系. 3 高速傅里叶变换的实质,经常使用的算法之间的差别和联系,各自的优势. 4 fft的应用讨论: 1.变换是时间变量函数变成相应变换域的某种变量函数,这样使运算简单,处理方便.变

快速傅立叶变换

多项式 对于多项式$ f\left(x\right)=\sum_{i=0}^{|f|}{f_ix^i} $,其中|f|表示多项式的阶数,fi表示多项式f中x^i的系数. 多项式的加法定义为$ c\left(x\right)=a\left(x\right)+b\left(x\right)=\sum_{i=0}^{\max\left(|a|,|b|\right)}{\left(a_i+b_i\right)x^i} $,即$ c_k=a_k+b_k $. 多项式的乘法定义为$ c\left(x\rig

hdu 4609 3-idiots 【FFT快(gui)速傅立叶变换】

FFT实现起来挺复杂的,开始用vector,结果发现空间超了,换成数组还是超,删掉了几个后又超时了 sin cos 函数调用次数太多了,改成乘法,还是超时 最后把FFT里的除法运算和模运算优化了一下,终于过了,排的老后面 坑,3843MS,一看时间最少的只有671MS,我都怀疑这是不是同一个算法..为毛差距这么大 #pragma comment(linker, "/STACK:102400000,102400000") #include<iostream> #include

快速傅立叶变换算法FFT——图像处理中的数学原理详解22

欢迎关注我的博客专栏"图像处理中的数学原理详解" 全文目录请见 图像处理中的数学原理详解(总纲) http://blog.csdn.net/baimafujinji/article/details/48467225 图像处理中的数学原理详解(已发布的部分链接整理) http://blog.csdn.net/baimafujinji/article/details/48751037 交流学习可加图像处理研究学习QQ群(529549320) 傅立叶变换以高等数学(微积分)中的傅立叶级数为基