Hallo liebe Community,
mit den folgendem Code habe ich eine .wav-Datei eingefügt und geplottet:
import matplotlib.pyplot as plt
import numpy as np
import wave
import sys
spf = wave.open('wavfile.wav','r')
signal = spf.readframes(-1)
signal = np.fromstring(signal, 'Int16')
plt.plot(signal)
plt.show().
Nun zur Frage. Meine vorgegebenes Signal hat eine max. Amplitude von 200 (aus ASCII-Code erstellt .wav-Datei). Beim Plotten wird das Signal jedoch durch Int16 normiert, sodass in der Darstellung die maximale Amplitude 16Bit, also 2^15, beträgt. Wie lasse ich mir den Normierungsfaktor anzeigen bzw. auswerfen, da ich in Zukunft nicht die max. Amplitude kenne und sie aus dem Signalverlauf berechnen wollte.
Im Voraus vielen Dank für die Hilfe.
.wav Datei einfügen und Amplitude ermitteln/Normierung
Das wundert mich. Int16 normiert nix. Dazu müsste es ja erstmal alles normal konvertieren, das Maximum bestimmen, und dann mit einem Faktor multiplizieren. Und das verändert die Daten.
Was du ggf meinst ist die Skalierung der Darstellung. Das ist aber was ganz anderes!
Was du ggf meinst ist die Skalierung der Darstellung. Das ist aber was ganz anderes!
Sorry das ist für mich alles noch Neuland.
Kurzes Beispiel. Zwei Signal mit jeweils einem Impuls mit der Amplitude 200 und 100. Beim Plotten der Signal wird mir als Wert der maximalen Amplitude 2^15 angegeben (bei Int32 ist die Amplitude 2^31). Wie kriege ich nun den Faktor raus, der die Skalierung/Normierung beschreibt. Gibt es dafür einen Befehl?
Kurzes Beispiel. Zwei Signal mit jeweils einem Impuls mit der Amplitude 200 und 100. Beim Plotten der Signal wird mir als Wert der maximalen Amplitude 2^15 angegeben (bei Int32 ist die Amplitude 2^31). Wie kriege ich nun den Faktor raus, der die Skalierung/Normierung beschreibt. Gibt es dafür einen Befehl?
- __blackjack__
- User
- Beiträge: 13241
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Woher weisst Du denn das die maximale Amplitude 200 ist und 200 *was*? Ist das tatsächlich der maximale Samplewert? Bei 16 Bit Samples?
Falls `scipy` als externe Abhängigkeit okay ist, würde ich `scipy.io.wavfile` zum lesen verwenden. Oder aber beim `wave`-Modul dann wenigstens prüfen ob die Annahmen korrekt sind. Also beispielsweise die 16 Bit. Und von Mono gehst Du ja wahrscheinlich stillschweigend auch aus.
Falls `scipy` als externe Abhängigkeit okay ist, würde ich `scipy.io.wavfile` zum lesen verwenden. Oder aber beim `wave`-Modul dann wenigstens prüfen ob die Annahmen korrekt sind. Also beispielsweise die 16 Bit. Und von Mono gehst Du ja wahrscheinlich stillschweigend auch aus.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Wenn Du numerische Werte, die im Bereich von 0 bis 200 liegen, von matplotlib plotten lässt, dann wirst Du irgendein Plot in den Grenzen von 0 bis 200 bekommen.
Wenn Du was anderes herausbekommst, dann machst Du auch was anderes.
Wenn Du was anderes herausbekommst, dann machst Du auch was anderes.