Charakterisierung eines Audiosignals
Dies ist ein weiterer wichtiger Schritt um um ein Zeitdominiertes Signal in ein frequenzdominiertes Signal umzuwandeln. Dafür wird die Fourier Transformation verwendet.
https://de.wikipedia.org/wiki/Fourier-Transformation
Beispiel - Datei: AudioFourier.py
# Visualisierung eines Audiosignals
# 2022 Ehrenfried Stuhlpfarrer
# Import der erforderlichen Bibliotheken
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
# Das Audiofile einlesen - TestAudio.wav
# Rückgabe Frequenz und Audiosignal
freq_sampling, audio_sig = wavfile.read("TestAudio.wav")
# Einige Parameter des Audiosignals anzeigen
print("\n Signalform - Shape:", audio_sig.shape)
print("\n Signal Datentyp: ", audio_sig.dtype)
print("\n Signaldauer: ", round(audio_sig.shape[0] / float(freq_sampling), 2), "seconds")
# Das Audiosignal normalisieren
audio_sig = audio_sig / np.power(2, 15)
# Die Länge und die halbe Länge des Signals extrahieren
len_signal = len(audio_sig)
half_len = np.ceil((len_signal + 1) / 2.0).astype(np.int)
# Einsatz der Fourier Transformation
signal_frequency = np.fft.fft(audio_sig)
# Normalisieren des Frequenz - Signals
signal_frequency = abs(signal_frequency[0:half_len]) / len_signal
signal_frequency **= 2
# Extrahieren der Länge und der halben Länge des Signals
len_fts = len(signal_frequency)
# Das Fourier Signal für gerade und ungerade Fälle justieren
if len_signal % 2:
signal_frequency[1:len_fts] *= 2
else:
signal_frequency[1:len_fts - 1] *= 2
# Stärke in db extrahieren und die Frequenz in kHz für die x-Achse festlegen
signal_power = 10 * np.log10(signal_frequency)
x_axis = np.arange(0, half_len, 1) * (freq_sampling / len_signal) / 1000.0
# Signal visualisieren
plt.figure()
plt.plot(x_axis, signal_power, color="green")
plt.xlabel("Frequenz kHz")
plt.ylabel("Signalstärke dB")
plt.show()