12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- """
- 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
|