FLImaging 7.8.25.3
BackendFFT.h
1#pragma once
2
3#if _MSC_VER >= 1900 && defined(_M_X64)
4
5#include "BackendBase.h"
6#include "Parameters.h"
7
8namespace FLImaging
9{
10 namespace AI
11 {
12 template <typename T>
13 class FL_EXPORT CTensor;
14
15 template <typename T>
16 class FL_EXPORT CBackendFFT : public CBackendBase<T>
17 {
18 public:
19 CBackendFFT();
20 CBackendFFT(const CBackendFFT<T>& bf);
21 virtual ~CBackendFFT();
22
23 virtual const CResult SetFFTParams();
24
25 virtual bool CheckFFTSize(const std::vector<int64_t>& vctShape) const;
26 virtual T GetNormValue(ENormFFT eNormFFT, bool bFFT, int64_t i64NormBase) const;
27 virtual const CResult FFT(const CTensor<T>* pTsrOperand, CTensor<T>* pTsrResult, const std::vector<int64_t>* pVctResultShape, T tNorm);
28 virtual const CResult IFFT(const CTensor<T>* pTsrOperand, CTensor<T>* pTsrResult, const std::vector<int64_t>* pVctResultShape, T tNorm);
29 virtual const CResult ShiftFourier(const CTensor<T>* pTsrOperand, CTensor<T>* pTsrResult, bool bInverse);
30 virtual int64_t GetRequiredTemporaryMemory(const std::vector<int64_t>& vctShape) const;
31
32 DeclareGetClassType();
33 SupportToDuplicateObjectWithoutCreateNewObject(CBackendFFT<T>, *this);
34
35 protected:
36 virtual bool CheckFirstTwo(int64_t i64Size) const;
37 virtual void CalculateReverseOrder(int64_t* pI64Order, int64_t i64Length, bool bFirstTwo);
38 virtual void CalibrationInterval(T* pTRealVal, T* pTImaginVal, int64_t i64Length, bool bInverse);
39 virtual int64_t GetClosestPowerTwo(int64_t BaseNum);
40 virtual void MakeGBufferWidth(T* pTSource, T* pTRFTG, T* pTRealValWidth, T* pTImaginValWidth, int64_t i64OprWidth, int64_t i64DFTWidth, bool bSrcReal);
41 virtual void MakeHBuffer(T* pTRFTH, T* pTRealValWidth, T* pTImaginValWidth, int64_t i64OprWidth, int64_t i64DFTWidth);
42 virtual void SetRFTTwo(T* pTSource, T* pTRFT, T* pTRFTEnd, int64_t* pI64OrderWidth, bool bSrcReal, T tNorm);
43 virtual void SetRFTFour(T* pTSource, T* pTRFT, T* pTRFTEnd, int64_t* pI64OrderWidth, bool bSrcReal, T tNorm);
44 virtual void SetRFTFourI(T* pTSource, T* pTRFT, T* pTRFTEnd, int64_t* pI64OrderWidth, bool bSrcReal, T tNorm);
45 virtual void RFTCalc(T* pRFTBuffer, T* pTBufEnd, T* pTRealValWidth, T* pTImaginValWidth, int64_t i64CumulN, int64_t i64CycleLength);
46 virtual void RFTCalcI(T* pRFTBuffer, T* pTBufEnd, T* pTRealValWidth, T* pTImaginValWidth, int64_t i64CumulN, int64_t i64CycleLength);
47 virtual void MakeGBufferHeight(T* pTSource, T* pTGBuffer, int64_t* pI64OrderHeight, T* pTRealValHeight, T* pTImaginValHeight, int64_t i64BatchRowCount, int64_t i64OprHeight, int64_t i64OprWidth, int64_t i64DFTHeight);
48 virtual const CResult FFTHeightLoop(T* pTResultMemory, T* pTRealValHeight, T* pTImaginValHeight, int64_t i64BatchRowCount, int64_t i64DFTHeight, int64_t i64OprWidth, bool bHeightFirstTwo);
49 virtual const CResult IFFTHeightLoop(T* pTResultMemory, T* pTRealValHeight, T* pTImaginValHeight, int64_t i64BatchRowCount, int64_t i64DFTHeight, int64_t i64OprWidth, bool bHeightFirstTwo);
50
51 virtual const CResult FFTAssignNorm(T* pTSourceMemory, T* pTResultMemory, int64_t* pI64OrderHeight, int64_t i64BatchRowCount, int64_t i64DFTHeight, int64_t i64DFTWidth, bool bOprReal, bool bOrderHeight, T tNorm);
52 virtual const CResult FFTPowerTwo(T* pTSourceMemory, T* pTRFTBuffer, T* pTResultMemory, int64_t* pI64OrderWidth, int64_t* pI64OrderHeight, T* pTRealValWidth, T* pTImaginValWidth, int64_t i64BatchRowCount, int64_t i64DFTHeight, int64_t i64DFTWidth, bool bWidthFirstTwo, bool bOprReal, bool bOrderHeight, T tNorm);
53 virtual const CResult IFFTPowerTwo(T* pTSourceMemory, T* pTRFTBuffer, T* pTResultMemory, int64_t* pI64OrderWidth, int64_t* pI64OrderHeight, T* pTRealValWidth, T* pTImaginValWidth, int64_t i64BatchRowCount, int64_t i64DFTHeight, int64_t i64DFTWidth, bool bWidthFirstTwo, bool bOprReal, bool bOrderHeight, T tNorm);
54 virtual const CResult FFTChirpWidth(T* pTSourceMemory, T* pTRFTBuffer, T* pTHBuffer, T* pTResultMemory, int64_t* pI64OrderWidth, int64_t* pI64OrderHeight, T* pTRealValWidth, T* pTImaginValWidth, int64_t i64BatchRowCount, int64_t i64OprHeight, int64_t i64OprWidth, int64_t i64DFTWidth, bool bWidthFirstTwo, bool bOprReal, bool bOrderHeight, T tNorm);
55 virtual const CResult IFFTChirpWidth(T* pTSourceMemory, T* pTRFTBuffer, T* pTHBuffer, T* pTResultMemory, int64_t* pI64OrderWidth, int64_t* pI64OrderHeight, T* pTRealValWidth, T* pTImaginValWidth, int64_t i64BatchRowCount, int64_t i64OprHeight, int64_t i64OprWidth, int64_t i64DFTWidth, bool bWidthFirstTwo, bool bOprReal, bool bOrderHeight, T tNorm);
56 virtual const CResult FFTChirpHeight(T* pTResultMemory, int64_t* pI64OrderHeight, T* pTRealValHeight, T* pTImaginValHeight, T* pTHeightGBuffer, T* pTHeightTBuffer, T* pTHBuffer, int64_t i64BatchChannel, int64_t i64OprHeight, int64_t i64OprWidth, int64_t i64DFTHeight, bool bHeightFirstTwo);
57 virtual const CResult IFFTChirpHeight(T* pTResultMemory, int64_t* pI64OrderHeight, T* pTRealValHeight, T* pTImaginValHeight, T* pTHeightGBuffer, T* pTHeightTBuffer, T* pTHBuffer, int64_t i64BatchChannel, int64_t i64OprHeight, int64_t i64OprWidth, int64_t i64DFTHeight, bool bHeightFirstTwo);
58 };
59 }
60}
61
62#endif
Definition AlgorithmAIBase.h:18