Fix fft and add hilbert

This commit is contained in:
kradchen
2023-12-20 15:22:50 +08:00
parent 6b2c612af8
commit 3629a9f08c
2 changed files with 14 additions and 2 deletions

View File

@@ -2,6 +2,7 @@
#include "CudaMatrix.h" #include "CudaMatrix.h"
#include "Function1D.h" #include "Function1D.h"
#include "Function1D.cuh" #include "Function1D.cuh"
#include "Function3D.h"
#include "Matrix.h" #include "Matrix.h"
#include <Function2D.cuh> #include <Function2D.cuh>
#include <cfloat> #include <cfloat>
@@ -1355,9 +1356,7 @@ if (aMatrix.isComplex()){
complexFillKernel<<<aMatrix.getDimSize(1), 256>>>(aMatrix.getData(), data, needCopySize, aMatrix.getDimSize(0),ColEleCount); complexFillKernel<<<aMatrix.getDimSize(1), 256>>>(aMatrix.getData(), data, needCopySize, aMatrix.getDimSize(0),ColEleCount);
} }
auto ret = Aurora::CudaMatrix::fromRawData(data,ColEleCount,aMatrix.getDimSize(1),1,Complex); auto ret = Aurora::CudaMatrix::fromRawData(data,ColEleCount,aMatrix.getDimSize(1),1,Complex);
auto mm = ret.toHostMatrix();
ExecFFT(ret,0); ExecFFT(ret,0);
mm = ret.toHostMatrix();
return ret; return ret;
} }
@@ -1548,3 +1547,14 @@ CudaMatrix Aurora::ifft_symmetric(const CudaMatrix &aMatrix, long aLength)
cudaDeviceSynchronize(); cudaDeviceSynchronize();
return real(ifft(CudaMatrix::fromRawData(data,aLength,1,1,Complex))); 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;
}

View File

@@ -65,6 +65,8 @@ namespace Aurora
CudaMatrix fft(const CudaMatrix &aMatrix, long aFFTSize = -1); CudaMatrix fft(const CudaMatrix &aMatrix, long aFFTSize = -1);
CudaMatrix ifft(const CudaMatrix &aMatrix, long aFFTSize = -1); CudaMatrix ifft(const CudaMatrix &aMatrix, long aFFTSize = -1);
CudaMatrix hilbert(const CudaMatrix &aMatrix);
void fftshift(CudaMatrix &aMatrix); void fftshift(CudaMatrix &aMatrix);
void ifftshift(CudaMatrix &aMatrix); void ifftshift(CudaMatrix &aMatrix);