AI Artificial Intelligence

Viele Teile ergeben ein Ganzes! Die Kunst unwichtige Details zu vermeiden!

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()


KI

Copyright © 2022. All Rights Reserved. Ehrenfried Stuhlpfarrer