Umrechnung dB in WAV/PCM Amplitudenwert

  • von Minus und Plus zu reden ist hier vielleicht etwas verwirrend - ich stelle es mal im positiven Zahlenraum dar:


    Vu= 20*log (U2/U1), dabei ist U2 der Ausgangswert und U1 der Eingangswert, Vu ist der Verstärkungsfaktor in dB. Bei einer Auflösung von 16 Bit lassen sich Zahlenwerte von 1 bis 65536 abbilden (eigentlich 0 - 65535, aber mit Null als U1 kann man oben natürlich nicht rechnen) - gibt man für das Verhältnis U2/U1 den maximalwert von 65636 ein, erhält man etwas mehr als 96 dB als theoretischen Dynamikbereich bei 16-Bit Auflösung.


    Löst man die obige Formel nach U2 auf, dann erhält man folgendes:


    U2 = 10^(Vu/20) * U1 - setzt man in diese Formel für Vu jetzt z.B. mal 96,33 ein, dann erhält man wieder (ungefähr) die 65536. Setzt man beispielsweise mal 6 für Vu ein, dann erhält man 2 als Lösung - eine Zunahme von 6dB verdoppelt die Spannung.


    Jetzt zu Deiner Frage:


    In Deinem Fall setzt Du für U1 65536 ein und für Vu -70 - dann kommt 20,724 raus - ein Wert von -70dB entspricht also ca. 20 auf einer Skala von 1 - 65536. Geht Deine Skala von -32768 und +32767 , dann ergibt sich -32748...

  • wolle, du nimmst dir da ein integer, sprich eine ganzzahl, die allermeisten DAWs arbeiten aber mit fließkomma, und dort ist der bereich ein anderer. wofür musst du das eigentlich wissen?


    in dem Fall dass man doch mit integer rechnen würde, täte man da auch eher ein unsigned int nehmen, sprich ein vorzeichenloses, sodass der bereich von 0 - 65535 geht. Sonst wäre es sehr kompliziert audio algrohytmen zu schreiben, wenn die gesamte Arithmetik bei der hälfte des Amplitudenspektrums umgedreht werden müsste.... hoffe das leuchtet ein.

    sieg natur.

    Einmal editiert, zuletzt von slo77y ()

  • Zitat

    wolle, du nimmst dir da ein integer, sprich eine ganzzahl, die
    allermeisten DAWs arbeiten aber mit fließkomma, und dort ist der
    bereich ein anderer. wofür musst du das eigentlich wissen?


    ich programmiere an einem "digitalen Ohr", welches gewisse Fehler wie "Stille", "Knackser", "Rauschen", "Frameerrors", "Crop" etc. aus einer WAV Datei "heraushört". Wir setzen das als Qualitätskontrolle ein, da man schlecht täglich mehrere hundert auflaufende WAV Files anhören kann. Wenn ich hier z.B. für Stille Erkennung einen Threshold konfiguriere dann mache ich das nicht in dB sondern in "Amplitudenauslenkung", also als Wert zwischen 0 und 32748. Andere Tools wie z.B. SoX arbeiten da mit dB

  • ...täte man da auch eher ein unsigned int nehmen, sprich ein vorzeichenloses, sodass der bereich von 0 - 65535 geht. Sonst wäre es sehr kompliziert audio algrohytmen zu schreiben, wenn die gesamte Arithmetik bei der hälfte des Amplitudenspektrums umgedreht werden müsste.... hoffe das leuchtet ein.


    Ehrlich gesagt leuchtet es nicht ein. Wie werden denn deiner Meinung nach negative Halbwellen o.ä. codiert?


    In Deinem Fall setzt Du für U1 65536 ein und für Vu -70 - dann kommt 20,724 raus - ein Wert von -70dB entspricht also ca. 20 auf einer Skala von 1 - 65536. Geht Deine Skala von -32768 und +32767 , dann ergibt sich -32748...


    Wegen Obigen bin ich auch hiermit nicht so ganz auf einem Nenner. Ich denke die positiven und negativen Werte gehören doch mit zur Betrachtung - wodurch sich dann bei -70dB ca. 10 ergeben würden.
    Deine -32748 als -70dB sind mir völlig schleierhaft, das ist doch eher eine negative Amplitude mit beinahe Vollaussteuerung (bei 16Bit).


    So far,
    duddha - der sich im übrigen gern eines besseren belehren lässt!


    Edit fällt ein das es auch nicht-lineare PCM gibt und deswegen eventuell sowieso alles für die Katz ist.

    Der Teppich hat das Zimmer erst richtig gemütlich gemacht!

    Einmal editiert, zuletzt von Duddha ()

  • Wegen Obigen bin ich auch hiermit nicht so ganz auf einem Nenner. Ich denke die positiven und negativen Werte gehören doch mit zur Betrachtung - wodurch sich dann bei -70dB ca. 10 ergeben würden.
    Deine -32748 als -70dB sind mir völlig schleierhaft, das ist doch eher eine negative Amplitude mit beinahe Vollaussteuerung (bei 16Bit).


    So seh ich das auch.


    Wenn ich ne Wav-Datei in Matlab importiere habe ich auch negative Werte drinstehen. Interessiert mich nur der Pegelverlauf nehm ich einfach den Betrag.

    Ich hätte auch so gern ein Hobby...

  • rein vom Verständnis sehe ich das auch so, daher ja auch -32768 und +32767. Wenn ich also sage "Threshold 20" meine ich (beziehungsweise hab es so programmiert) -20 bis +20. Letztendlich sind 16 Bit aber nur eine Wurst von 16 Einsen und Nullen. Was man daraus im Dezimalsystem macht ist erstmal jedem selbst überlassen und willkürlich, ob ich nun sage mein Nulldurchgang ist bei 0 oder bei +32768: Völlig egal. Daher könnte ich meine ursrüngliche Frage auch erweitern und sagen "wenn ich von -32768 bis +32767 denke, wie muss ich rechnen..."

  • Die Formeln oben von OliverStein zur passen wohl, es geht nur noch um Bezugsgröße und evtl. Kodierung.
    Also - meiner Meinung nach, und bei deiner Vorgabe - statt wie in OliverS Beispiel die 65tausendirgendwas ersetzten durch die 32...


    ...jedem selbst überlassen und willkürlich, ob ich nun sage mein Nulldurchgang ist bei 0 oder bei +32768: Völlig egal...


    Naja, es sollte natürlich zum Eingangsmaterial passen.


    Mal ne andere Frage:
    Womit programmierst du denn? Also welche Sprache, Umgebung, SDK etc?
    Es empfiehlt sich nämlich unter Umständen eine externe Bibliothek o.ä. einzubinden die den Input ohne Tücken entschlüsselt.
    Wenn du's z.B. als VST realisierst liefert dir der Host ganz schicke Werte und dich juckt es nicht wie PCM aufgebaut ist

    Der Teppich hat das Zimmer erst richtig gemütlich gemacht!

  • Ehrlich gesagt leuchtet es nicht ein. Wie werden denn deiner Meinung nach negative Halbwellen o.ä. codiert?



    Die kann ich berechnen wenn ich die brauche, die stecken wenn du einfach den bereich verschiebst immer noch mit drin im spektrum, nur dass ich nicht mit vorzeichen rumkaspern muss. Da ein Lautstärkewert aber sowieso nix mit negativ oder positv halbwelle zutun hat, brauch man die Unterscheidung zwischen eben denen so gut wie nie bei den üblichen prozessionen. Das Steinberg VST SDK arbeitet jedenfalls so wie von mir beschrieben, wenn dir das auch nicht einleuchtet lass es dir von denen erklären.

    sieg natur.

    2 Mal editiert, zuletzt von slo77y ()

  • Wenn die WAVs so codiert sind, wie Wolle schreibt, dann rechnet man halt mit Olivers Formel, dem Betrag der Amplitude und 8 Bit, da für die Lautstärke das Vorzeichen der Augenblickwerte unerheblich ist.

    "Ich verlor bisher Filze, Sticks und einen Bassisten. Weiß der Geier was man damit will."
    Barumo, 2008

  • Es ist schon spät daher beziehe ich mich morgen nochmal auf andere Aspekte. Für jetzt:


    Lieber Slo77y, hast du schonmal mit dem Steinberg VST SDK programmiert? Ich habe! Also erklär mir doch mal bitte bitte das hier:

    Das Steinberg VST SDK arbeitet jedenfalls so wie von mir beschrieben, wenn dir das auch nicht einleuchtet lass es dir von denen erklären.


    Bin sehr gespannt!

    Der Teppich hat das Zimmer erst richtig gemütlich gemacht!

  • ich glaube das würde hier etwas das thema sprengen wenn ich jetzt hier quelltext mit erklärung reinposte... und ja: ich hab jedenfalls auch schon damit programmiert (das scheint dir ja irgendwie wichtig zu sein) klären wir besser per pm..

    sieg natur.

  • WAVs sind mit Vorzeichen codiert. Auch Fließkommazahlen haben in der Regel ein Vorzeichenbit. Was daran kompliziert sein soll musst du schon etwas näher erklären wenn du behauptest alle Audio-Algorithmen wären einfacher ohne Vorzeichen. Wenn du von Spektrum redest beziehst du dich auf den Frequenzbereich. OK, kann sein dass es dort ohne Vorzeichen einfacher ist.


    Da ein Lautstärkewert aber sowieso nix mit negativ oder positv halbwelle zutun hat, brauch man die Unterscheidung zwischen eben denen so gut wie nie bei den üblichen prozessionen.


    Stimmt, der Lautstärkewert ist ein Betrag und um dB angeben zu können muss man immer einen Bezug haben. Alles ist relativ, aber den Lautstärkewert bei unsigned int auf Null zu beziehen wäre etwas sinnlos. Oder?

    Ich hätte auch so gern ein Hobby...

  • Wegen Obigen bin ich auch hiermit nicht so ganz auf einem Nenner. Ich denke die positiven und negativen Werte gehören doch mit zur Betrachtung - wodurch sich dann bei -70dB ca. 10 ergeben würden.
    Deine -32748 als -70dB sind mir völlig schleierhaft, das ist doch eher eine negative Amplitude mit beinahe Vollaussteuerung (bei 16Bit).


    hast Recht - da war ein Denkfehler von mir drin - das müsste dann +- 10 sein...


    Mein gesichertes Wissen bezieht sich auch nur auf die Berechnung von dB-Werten, für die ich die Formeln oben angegeben habe - wie das digital in den verschiedenen Formaten umgesetzt wird, darüber kann ich nur "educated best guesses" abgeben (was ich lieber lasse...).

  • und ja: ich hab


    Dann könnte ja aufgefallen sein, das der Host immer float-Werte zwischen -1 und 1 liefert. Oder nicht?
    Vielleicht reden wir aber auch nur aneinander vorbei...Sorry, aber mir brennts gerade aber irgendwie unter den Nägeln zu wissen was du meinst.

    Der Teppich hat das Zimmer erst richtig gemütlich gemacht!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!