Formel für Spitzenbegrenzung / Audiokomprimierung erforderlich


9

Ich suche nach einer Formel, um eine Audio-Wellenform effektiv zu komprimieren, um Spitzen zu begrenzen. Dies ist keine "automatische Lautstärkeregelung", bei der die Verstärkung des Verstärkers gesteuert wird, um einen Lautstärkepegel aufrechtzuerhalten, sondern ich möchte einzelne Spitzen begrenzen ("weich" abschneiden). (Ich weiß, dass dies Harmonische einführt, aber ich versuche, die Daten zu analysieren, nicht zuzuhören.)

Meine (sehr grobe) Formel lautet bisher:

factor = (10 * average / level) + exp(-sqrt(0.1 * level / average))

Wenn der Pegel der momentane Schallpegel ist, ist der Durchschnitt der historische durchschnittliche Schallpegel, und der Faktor ist ein Multiplikator, der zur Erzeugung des "angepassten" Pegels ( Faktor mal Pegel ) verwendet wird.

Außerdem wird dieser Multiplikator nur angewendet, wenn er auf einen Wert kleiner als 1 berechnet wird. Andernfalls wird der Pegel nicht angepasst.

Die Absicht ist es, das angepasste Niveau auf ein Vielfaches (ungefähr 15x mit dieser Formel) des historischen Durchschnitts zu beschränken. Diese Formel ist irgendwie das, was ich brauche, zeigt aber einen "Einbruch", wenn die Zahlen größer werden. Das heißt, der angepasste Pegel (dh Faktor mal Pegel ) steigt bis zu einem Punkt mit zunehmendem nicht angepassten Pegel an , beginnt dann jedoch, anstatt asymptotisch zu werden, tatsächlich kleiner zu werden. (Tatsächlich wurde der erste Faktor hauptsächlich hinzugefügt, um zu verhindern, dass die Formel mit extrem hohen Werten auf Null geht.)

(Der Grund, warum Sie die Werte auf diese Weise begrenzen möchten, ist in erster Linie, dass vorübergehende Geräusche den laufenden Durchschnitt des Schallpegels nicht ernsthaft stören. Wenn Sie jedoch Schnarchen analysieren, ist "vorübergehende Geräusche" ziemlich bedeutend, sodass ich sie einfach unterdrücken kann .)

Kann jemand etwas Besseres vorschlagen? (Es scheint, dass asymptotisches Verhalten leicht zu erzeugen ist, wenn Sie es nicht wollen, aber schwer, wenn Sie es tun.)


Antworten:


8

Zwei Probleme hier: wie man eine zuverlässige Schätzung des Pegels erhält und wie man die Daten komprimiert.

  • Verwenden Sie robuste Statistiken zu den ursprünglichen (nicht spitzenbegrenzten) Daten wie Median oder Quantile anstelle eines laufenden Durchschnitts, um die Erkennung "typischer Pegel" für Ausreißer robust zu machen.
  • k×tanh(xk) funktioniert gut als Komprimierungsformel und ist genau das, was in einigen Audio-Schaltkreisen (unter Verwendung von OTAs) geschieht. Um eine adaptive Komprimierung zu erhalten, die die Dynamik des ursprünglichen Signals beibehält und nur Transienten entfernt, lassen Sie k den geglätteten "Durchschnitts" -Pegel verfolgen.C.

Beispiel

  • Blau: Originalsignal
  • Grün: 2 x Median des Absolutwerts über einem Schiebefenster als "typische Pegel" -Erkennung
  • Rot: Tanh-Komprimierung (Formel oben angegeben, wobei k gleich dem grün dargestellten Wert ist)

Danke, das sieht vielversprechend aus. Ich werde es anschließen und sehen, wie es funktioniert.
Daniel R Hicks

1
Ich habe es ausprobiert und es scheint gut zu funktionieren (nachdem ich ein paar Finger-Checks geklärt habe). Mein einziges Problem dabei ist, dass es anscheinend keine Möglichkeit gibt, die Schärfe des "Knies" anzupassen, ohne die Clip-Ebene oder was auch immer zu beeinträchtigen.
Daniel R Hicks

Warum ist "gleitender Median" besser als "gleitender Durchschnitt"? Ich habe an vielen Stellen gelesen, dass es weniger empfindlich für Ausreißer ist. Aber ich kann das mit echten Daten nicht sehen . Irgendeine Idee zu dieser Frage?
Basj
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.