""" Abhängigkeiten: - numpy - scipy.signal (butter, lfilter) - constants (für die Verwendung von 'alpha') Autor: Roberto Gelsinger Datum: 07.12.2023 Version: Modulversion """ import numpy as np from scipy.signal import butter, lfilter from constants import alpha def fft_filter(video, freq_min, freq_max, fps): """ Diese Funktion nimmt Videodaten, eine Frequenzbandbreite und die Bildrate (FPS) des Videos entgegen. Sie filtert das Video, um nur Frequenzen im angegebenen Band zu verstärken. Das verstärkte Video, die FFT-Daten und die Frequenzen werden zurückgegeben. Args: video (ndarray): Die Videodaten als ndarray. freq_min (float): Die untere Grenzfrequenz des zu verstärkenden Frequenzbands. freq_max (float): Die obere Grenzfrequenz des zu verstärkenden Frequenzbands. fps (int): Die Bildrate (Frames pro Sekunde) des Videos. Returns: tuple: Ein Tupel, bestehend aus: - amplified_video (ndarray): Das verstärkte Videodaten als ndarray. - fft (ndarray): Die FFT-Daten des verstärkten Videos. - frequencies (ndarray): Die zugehörigen Frequenzen der FFT. """ nyquist = 0.5 * fps low = freq_min / nyquist high = freq_max / nyquist # Min-Max-Frequenzen filtern b, a = butter(4, [low, high], btype='band') filtered_video = np.zeros_like(video) for i in range(video.shape[2]): filtered_video[:, :, i] = lfilter(b, a, video[:, :, i]) # Verstärkung amplified_video = np.abs(filtered_video) * alpha fft = np.fft.fft(amplified_video, axis=0) frequencies = np.fft.fftfreq(amplified_video.shape[0], d=1.0 / fps) return amplified_video, fft, frequencies