參考:
無意間看到cuda解決fft有乙個cufft函式庫,大體檢視了有關cufft有關知識,寫了乙個解決一維情況的cuda**,據調查知道cufft在解決1d,2d,3d的情況時間複雜度都為o(nlogn),附上解決
一維情況的**,準備後面找一些詳細的資料去學習一下cuda的函式庫。
#include "在linux下執行的這段**:stdio.h
"#include
"cuda_runtime.h
"#include
"cufft.h
"#include
"device_launch_parameters.h
"#define length 4
intmain()
; cufftcomplex *compdata=(cufftcomplex*)malloc(length*sizeof
(cufftcomplex));
inti;
for(i=0;i)
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)
if(compdata[i].y != 0
)
printf("\n
");} cufftdestroy(plan);
free
(compdata);
cudafree(d_fftdata);
}
編譯命令: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庫檔案
離散傅利葉變換 快速傅利葉變換C 實現
傅利葉變換是將時域訊號變換為頻域訊號的一種方式,我主要用它來做兩件事情 1 求一段資料的週期性。2 通過傅利葉變換及其逆變換,進行低通濾波 去躁 首先需要做幾點說明 1.快速傅利葉變換是離散傅利葉變換的快速演算法,當資料來源較大時 大於1000 快速傅利葉變換有明顯優勢。2.快速傅利葉變換的訊號源長...
java實現傅利葉變換
biz.source code.dsp math complex result dft.goertzelspectrum data double valuex dft.synthesizefromspectrum frequencyx,obb t 100si n 10 t 25 sin 30 t x...
傅利葉變換與快速傅利葉變換
作為電子資訊專業的學生老說,這個不知道,或者理解不清楚,是十分不應該的,作為乙個學渣,有時候確實是理解不清楚的 1 首先離散傅利葉變換目的 簡單點說 就是將乙個訊號從時域變換到頻域 標準點說 將以時間為自變數的訊號 與 頻率為自變數的頻譜函式之間的某種關係變換 數學描述 對於 n點序列 其中自然對數...