Audio als Signal
Abtastrate, Fouriertransformation, Spektrogramm: die Grundlagen, auf denen jede Sprach- und Klangverarbeitung aufbaut, mit Zahlenbeispielen.
Die Idee
Ein Ton ist eine Schwingung. Ein Mikrofon misst sie viele tausend Mal je Sekunde. Aus diesen Messwerten lässt sich berechnen, welche Tonhöhen gerade vorhanden sind, und daraus wird ein Bild, das ein Modell verarbeiten kann.
Die Grundgrößen
| Größe | Bedeutung | Übliche Werte |
|---|---|---|
| Abtastrate | Messungen je Sekunde | 16 kHz Sprache, 44,1 kHz Musik |
| Bittiefe | Auflösung je Messung | 16 Bit |
| Kanäle | Mono oder Stereo | Mono für Sprache |
| Fensterlänge | Zeitausschnitt je Analyse | 20 bis 40 ms |
Ein Spektrogramm berechnen
import numpy as np
def spektrogramm(signal, sr=16000, fenster_ms=25, schritt_ms=10):
n_fenster = int(sr * fenster_ms / 1000) # 400 Abtastwerte
n_schritt = int(sr * schritt_ms / 1000) # 160 Abtastwerte
fenster = np.hanning(n_fenster) # ohne Fensterfunktion
# entstehen Randartefakte
rahmen = [signal[i:i + n_fenster] * fenster
for i in range(0, len(signal) - n_fenster, n_schritt)]
spek = np.abs(np.fft.rfft(np.array(rahmen), axis=1))
return 20 * np.log10(spek + 1e-10) # in Dezibel
sr = 16000
t = np.arange(sr) / sr
# Zwei ueberlagerte Toene, 440 Hz und 880 Hz
signal = np.sin(2*np.pi*440*t) + 0.5*np.sin(2*np.pi*880*t)
S = spektrogramm(signal, sr)
print(S.shape) # (98, 201): 98 Zeitrahmen, 201 FrequenzbaenderDie Ausgabeform erklärt die Datenreduktion: Aus 16.000 Abtastwerten je Sekunde werden 98 mal 201 Werte, also rund ein Achtel der Datenmenge, in einer für Modelle wesentlich brauchbareren Form.
Das Abtasttheorem
Bei 16 kHz Abtastrate sind Frequenzen bis 8 kHz darstellbar. Sprache trägt ihre Verständlichkeit weit überwiegend unter 4 kHz, weshalb sogar Telefonqualität mit 8 kHz Abtastrate funktioniert. Zischlaute liegen höher, und genau die leiden bei niedriger Abtastrate zuerst.
Der Zielkonflikt
Durchgerechnet: Ein Fenster von 25 ms ergibt eine Frequenzauflösung von rund 40 Hz. Um zwei Töne im Abstand von 10 Hz zu trennen, bräuchte man ein Fenster von 100 ms, und würde damit zeitliche Ereignisse innerhalb dieser 100 ms nicht mehr auflösen. Für Sprache ist 25 ms der übliche Kompromiss, weil sich Laute in dieser Größenordnung ändern.
Von Hertz zu Mel
Die Mel-Skala bildet ab, dass das Ohr tiefe Frequenzen feiner auflöst. 80 Mel-Bänder zwischen 0 und 8 kHz sind der Standard für Sprachmodelle. Der Effekt: Im Bereich unter 1 kHz liegen etwa 30 Bänder, zwischen 4 und 8 kHz nur noch etwa 15. Diese ungleiche Verteilung ist keine Ungenauigkeit, sondern die Anpassung an die Wahrnehmung.
Praktische Vorverarbeitung
- Auf eine einheitliche Abtastrate bringen, bevor irgendetwas anderes passiert.
- Gleichanteil entfernen und den Pegel normalisieren, sonst wirkt die Aufnahmelautstärke als Merkmal.
- Stille am Anfang und Ende entfernen, aber Pausen im Inneren erhalten.
- Bei Störgeräuschen ein spektrales Subtraktionsverfahren prüfen, bevor ein größeres Modell eingesetzt wird.
Passende Kurse und Quellen
Hugging Face Audio-Kurs
Vom Signal über Spektrogramme bis zu Erkennung und Synthese, durchgehend mit Code. Die praktische Ergänzung zu den Artikeln über Sprache und Audio.
Für alle, die Sprachtechnik selbst bauen wollen; setzt Python und etwas Signalwissen voraus.
Robust Speech Recognition
Spracherkennung, die mit Störgeräuschen, Akzenten und Sprachwechsel umgeht. Der Stand, an dem sich Diktatlösungen messen lassen.
Für alle, die Diktat oder Transkription einführen und einen Maßstab brauchen.