diff --git a/src/Function2D.cu b/src/Function2D.cu index 2669038..2d64f99 100644 --- a/src/Function2D.cu +++ b/src/Function2D.cu @@ -2,6 +2,7 @@ #include "CudaMatrix.h" #include "Function1D.h" #include "Function1D.cuh" +#include "Function3D.h" #include "Matrix.h" #include #include @@ -1355,9 +1356,7 @@ if (aMatrix.isComplex()){ complexFillKernel<<>>(aMatrix.getData(), data, needCopySize, aMatrix.getDimSize(0),ColEleCount); } auto ret = Aurora::CudaMatrix::fromRawData(data,ColEleCount,aMatrix.getDimSize(1),1,Complex); - auto mm = ret.toHostMatrix(); ExecFFT(ret,0); - mm = ret.toHostMatrix(); return ret; } @@ -1547,4 +1546,15 @@ CudaMatrix Aurora::ifft_symmetric(const CudaMatrix &aMatrix, long aLength) ifft_symmetricKernel<<>>(data, aLength / 2 - 1); cudaDeviceSynchronize(); return real(ifft(CudaMatrix::fromRawData(data,aLength,1,1,Complex))); +} + +CudaMatrix Aurora::hilbert(const CudaMatrix &aMatrix){ + auto x = fft(aMatrix); + auto h = Aurora::zerosCuda(aMatrix.getDimSize(0),1,1); + thrust::fill_n(thrust::device, h.getData(), aMatrix.getDimSize(0) / 2, 2.0f); + h.setValue(aMatrix.getDimSize(0) / 2, ((aMatrix.getDimSize(0) << 31) >> 31) ? 2.0 : 1.0); + h.setValue(0, 1.0f); + x = x*h; + auto result = ifft( x); + return result; } \ No newline at end of file diff --git a/src/Function2D.cuh b/src/Function2D.cuh index 26c8428..4a0fd4c 100644 --- a/src/Function2D.cuh +++ b/src/Function2D.cuh @@ -65,6 +65,8 @@ namespace Aurora CudaMatrix fft(const CudaMatrix &aMatrix, long aFFTSize = -1); CudaMatrix ifft(const CudaMatrix &aMatrix, long aFFTSize = -1); + CudaMatrix hilbert(const CudaMatrix &aMatrix); + void fftshift(CudaMatrix &aMatrix); void ifftshift(CudaMatrix &aMatrix);