123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- """
- Abhängigkeiten:
- - scipy.signal (find_peaks)
-
- Autor: Ihr Name
- Datum: Erstellungs- oder Änderungsdatum
- Version: Modulversion
- """
-
- from scipy import signal
-
- def find_heart_rate(fft, freqs, freq_min, freq_max):
- """
- Berechnet die Herzfrequenz aus den FFT-Spitzen.
-
- Diese Funktion nimmt FFT-Daten, Frequenzen, sowie minimale und maximale Frequenzgrenzen entgegen. Sie identifiziert die
- Spitzen im FFT-Spektrum, findet die Spitze mit der höchsten Amplitude in einem bestimmten Frequenzband und berechnet
- die Herzfrequenz basierend auf dieser Spitze.
-
- Args:
- fft (ndarray): Die FFT-Daten des Videos.
- freqs (ndarray): Die Frequenzen, die den FFT-Daten zugeordnet sind.
- freq_min (float): Die untere Grenzfrequenz des zu berücksichtigenden Frequenzbands.
- freq_max (float): Die obere Grenzfrequenz des zu berücksichtigenden Frequenzbands.
-
- Returns:
- float: Die berechnete Herzfrequenz in Schlägen pro Minute (bpm).
- """
- fft_maximums = []
- # Bestimme die Amplitude an jedem Frequenzpunkt
- for i in range(fft.shape[0]):
- if freq_min <= freqs[i] <= freq_max:
- fftMap = abs(fft[i])
- fft_maximums.append(fftMap.max())
- else:
- fft_maximums.append(0)
-
-
- print("fft_maximums: "+str(len(fft_maximums)))
- peaks, properties = signal.find_peaks(fft_maximums)
- print("peaks: "+str(len(peaks)))
- # Liste zur Speicherung der Top-10-Peak-Frequenzen
- top_peak_freqs = []
-
- # Sortiere die Peaks nach ihrer Amplitude
- sorted_peaks = sorted(peaks, key=lambda x: fft_maximums[x], reverse=True)
- print("sorted_peaks: "+str(len(sorted_peaks)))
- # Wähle die Top-10-Peaks aus
- for peak in sorted_peaks[:100]:
- top_peak_freqs.append(freqs[peak])
-
- # Berechne den Durchschnitt der Frequenzen der Top-10-Peaks
- if top_peak_freqs:
- average_freq = sum(top_peak_freqs) / len(top_peak_freqs)
- return average_freq * 60# Umrechnung von Hz in BPM
- else:
- return None
-
- # Beispielaufruf der Funktion
- # heart_rate = find_heart_rate(fft_data, frequency_data, freq_min, freq_max)
|