Source code for elasticai.preprocessor.transformation.fft

import numpy as np

from .transformation import Transformation, TransformationSettings, TransformationTargets
from .window_scaler import WindowingTargets


[docs] def do_fft( y: np.ndarray, sampling_rate: float, method_window: str | WindowingTargets = WindowingTargets.Hamming ) -> tuple[np.ndarray, np.ndarray]: """Performing the Discrete Fast Fourier Transformation. :param y: Transient input signal :param sampling_rate: Sampling rate [Hz] :param method_window: Selected window ['ones', 'Hamming', 'hanning', 'guassian', 'bartlett', 'blackman'] :return: Tuple with (1) freq - Frequency and (2) Y - Discrete output """ data = Transformation( settings=TransformationSettings( method=TransformationTargets.FFT, method_window=method_window, sampling_rate=sampling_rate ) )._do_fft(x=y) return data.freq, data.data
[docs] def do_fft_withimag( y: np.ndarray, sampling_rate: float, method_window: str | WindowingTargets = WindowingTargets.Ones ) -> tuple[np.ndarray, np.ndarray]: """Performing the Discrete Fast Fourier Transformation with imaginary part. :param y: Transient input signal :param sampling_rate: Sampling rate [Hz] :param method_window: Selected window ['ones', 'Hamming', 'hanning', 'guassian', 'bartlett', 'blackman'] :return: Tuple with (1) freq - Frequency and (2) Y - Discrete output """ data = Transformation( settings=TransformationSettings( method=TransformationTargets.imagFFT, method_window=method_window, sampling_rate=sampling_rate ) )._do_fft_with_imag(x=y) return data.freq, data.data
[docs] def do_fft_inverse(y: np.ndarray, len_original: int) -> np.ndarray: """Perform inverse real FFT. :param y: Fourier domain signal :param len_original: Length of original time domain signal :return: Time domain signal """ if "complex" not in y.dtype.name: raise ValueError("Only complex numpy arrays numbers are allowed") return np.fft.irfft(y, n=len_original)