請問一下大大, 我在對複數矩陣作單軸的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)