From 759f772976caa660418e6ae621a97651f257090a Mon Sep 17 00:00:00 2001 From: Gao Date: Fri, 19 May 2023 17:17:57 +0200 Subject: [PATCH] implentment FFT function --- Analyser/FFTAnalyser.py | 55 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Analyser/FFTAnalyser.py diff --git a/Analyser/FFTAnalyser.py b/Analyser/FFTAnalyser.py new file mode 100644 index 0000000..55c3217 --- /dev/null +++ b/Analyser/FFTAnalyser.py @@ -0,0 +1,55 @@ +import xarray as xr +import pandas as pd +import numpy as np + +from datetime import datetime + +import xrft +import finufft + + +class FFTAnalyser(): + + def __init__(self) -> None: + pass + + def fft(self, dataArray, **kwargs): + return xrft.fft(dataArray, **kwargs) + + def ifft(self, dataArray, **kwargs): + return xrft.ifft(dataArray, **kwargs) + + def fft_nutou(self, dataArray, modeNum): + + data = dataArray.to_numpy() + data = data.astype('complex128') + + time = dataArray[dataArray.dims[0]].to_numpy() + + if isinstance(time[0], type(np.datetime64(500,'s'))): + time = time.astype(float) + time = time - time[0] + freqUpLim = 1 / np.min(np.abs(time - np.roll(time, 1))) * 1e9 + else: + time = time.astype(float) + time = time - time[0] + freqUpLim = 1 / np.min(np.abs(time - np.roll(time, 1))) + + print(freqUpLim) + + time = time / time.max() * 2 * np.pi + + # calculate the transform + res = xr.DataArray( + data=finufft.nufft1d1(time, data, modeNum), + dims=['freq'], + coords={ + "freq":np.linspace(-freqUpLim/2, freqUpLim/2, modeNum) + } + ) + + return res + + def ifft_nutou(self, dataArray, modeNum): + pass + \ No newline at end of file