看板 C_and_CPP 關於我們 聯絡資訊
請問一下大大, 我在對複數矩陣作單軸的IFFT, IFFT的結果與MATLAB, 我覺得這樣子設定並沒有錯, 不曉得是哪邊出了問題, 謝謝 <<輸入資料>> 實數矩陣 271.8933 763.9581 -0.0000 7.3485 -0.0000 0.2827 93.2094 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 1.2247 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.1287 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 虛數矩陣 0.0000 204.7020 -0.0000 7.3485 -0.0000 1.0552 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 <<程式碼>> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <cuda_runtime.h> #include <cutil.h> #include <cufft.h> #include <math.h> #include <cuComplex.h> #include <time.h> #define NNx 6 #define NNy 6 int main( ) { int i; cuComplex *y2; y2 = (cuComplex*) malloc( sizeof(cuComplex)*NNx*NNy ); cuComplex *y3; y3 = (cuComplex*) malloc( sizeof(cuComplex)*NNx*NNy ); FILE *fp1,*fp2; char filename[] = "D:\\gpu_real.txt"; char filename1[] = "D:\\gpu_imag.txt"; fp1= fopen(filename, "r"); fp2= fopen(filename1, "r"); for(int i=0; i<NNx; i++) { for(int j=0; j<NNy; j++) { fscanf( fp1,"%f",&y2[i*NNx+j].x ); fscanf( fp2,"%f",&y2[i*NNx+j].y ); } } fclose(fp1); fclose(fp2); cufftHandle plan; cuComplex *devPtr; cudaMalloc( (void**)&devPtr, sizeof(cufftComplex)*NNx*NNy ); cudaMemcpy( devPtr, y2, sizeof(cufftComplex)*NNx*NNy, cudaMemcpyHostToDevice ); cufftPlan1d( &plan, NNx, CUFFT_C2C, NNy); cufftExecC2C( plan, devPtr, devPtr, CUFFT_INVERSE ); cuComplex *devPtr1; devPtr1 = (cuComplex*) malloc( sizeof(cuComplex)*NNx*NNy ); cudaMemcpy( devPtr1, devPtr, sizeof(cufftComplex)*NNx*NNy, cudaMemcpyDeviceToHost ); printf("y3\n"); for(i = 0; i < NNx*NNy; i++) { if(i % NNy == 0) printf("\n"); else printf(" "); printf("(%8.4f %8.4f)", y2[i].x,y2[i].y); } printf("\n"); printf("devPtr1\n"); for(i = 0; i < NNx*NNy; i++) { if(i % NNy == 0) printf("\n"); else printf(" "); printf("(%8.4f %8.4f)", devPtr1[i].x,devPtr1[i].y); } printf("\n"); system("PAUSE"); return 0; } 輸入資料 y3 (271.8933 0.0000) (763.9581 204.7020) ( -0.0000 -0.0000) ( 7.3485 7.3485) ( -0.0000 -0.0000) ( 0.2827 1.0552) ( 93.2094 0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( 1.2247 0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( 0.1287 0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) ( -0.0000 -0.0000) 輸出結果 devPtr1 (1043.4827 213.1057) (470.3020 756.8921) (-279.2418 565.8319) (-499.6960 -213.1057) ( 73.4846 -756.8921) (823.0284 -565.8319) ( 93.2094 0.0000) ( 93.2094 0.0000) ( 93.2094 0.0000) ( 93.2094 0.0000) ( 93.2094 0.0000) ( 93.2094 0.0000) ( 0.0000 -0.0000) ( -0.0000 0.0000) ( 0.0000 0.0000) ( 0.0000 0.0000) ( 0.0000 0.0000) ( 0.0000 0.0000) ( 1.2247 0.0000) ( 1.2247 0.0000) ( 1.2247 0.0000) ( 1.2247 0.0000) ( 1.2247 0.0000) ( 1.2247 0.0000) ( 0.0000 -0.0000) ( -0.0000 0.0000) ( 0.0000 0.0000) ( 0.0000 0.0000) ( 0.0000 0.0000) ( 0.0000 0.0000) ( 0.1287 0.0000) ( 0.1287 0.0000) ( 0.1287 0.0000) ( 0.1287 0.0000) ( 0.1287 0.0000) ( 0.1287 0.0000) 請按任意鍵繼續 . . . -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.192.147 ※ 編輯: aada 來自: 140.122.192.147 (02/28 07:09)