From 8fddd8bb21101bd7d6a83addac85314f77b3f5f7 Mon Sep 17 00:00:00 2001 From: Gao Date: Fri, 19 May 2023 17:23:20 +0200 Subject: [PATCH] update --- Analyser/FFTAnalyser.py | 73 +++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 39 deletions(-) diff --git a/Analyser/FFTAnalyser.py b/Analyser/FFTAnalyser.py index 55c3217..f70243f 100644 --- a/Analyser/FFTAnalyser.py +++ b/Analyser/FFTAnalyser.py @@ -7,49 +7,44 @@ from datetime import datetime import xrft import finufft - -class FFTAnalyser(): - def __init__(self) -> None: - pass +def fft(dataArray, **kwargs): + return xrft.fft(dataArray, **kwargs) + +def ifft(dataArray, **kwargs): + return xrft.ifft(dataArray, **kwargs) + +def fft_nutou(dataArray, modeNum, **kwargs): - def fft(self, dataArray, **kwargs): - return xrft.fft(dataArray, **kwargs) + data = dataArray.to_numpy() + data = data.astype('complex128') - def ifft(self, dataArray, **kwargs): - return xrft.ifft(dataArray, **kwargs) + time = dataArray[dataArray.dims[0]].to_numpy() - 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))) - 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 + print(freqUpLim) - def ifft_nutou(self, dataArray, modeNum): - pass + time = time / time.max() * 2 * np.pi + + # calculate the transform + res = xr.DataArray( + data=finufft.nufft1d1(time, data, modeNum, **kwargs), + dims=['freq'], + coords={ + "freq":np.linspace(-freqUpLim/2, freqUpLim/2, modeNum) + } + ) + + return res + +def ifft_nutou(dataArray, modeNum): + pass \ No newline at end of file