Algorithmus für einen digitalen Kompressor

Laguna
Laguna
Helpful & Friendly User
HFU
Zuletzt hier
26.12.23
Registriert
31.03.05
Beiträge
2.106
Kekse
21.145
Ort
Fürth
Hi,

Ich habe mal eine Frage zum Micro-Timing von Kompressoren. Prinzipiell ist mir die Arbeitsweise eines solchen Geräts oder Plugins klar. Im Detail sind jetzt aber doch ein paar Fragen aufgekommen, speziell was die Zeitkonstanten und deren Umsetzung angeht. Ich frage, da ich über die Feiertage mal wieder mein eigenes VST-Plugin ausgegraben habe und etwas daran weiter arbeiten möchte.

Sagen wir, ich habe ein (Sinus-)Signal, dass zunächst unterhalb des Schwellwerts anfängt und dann zum Zeitpunkt T über den Schwellwert ansteigt und dort auch mal fürs erste bleibt.

1) Je größer ich den Attack-Wert eingestellt habe, desto länger braucht es, bis der Kompressor voll zupackt. Aber wie genau ist das Zeitverhalten hier? Steigt die (echte) Ratio in der Attackzeit linear von 1:1 auf 1:5 (beispielsweise) an? gibt es eine wie auch immer geartete Tween-Funktion? Ich nehme an, das ist stark vom Modell abhängig, aber eine Beschreibung gängiger Methoden konnte ich nicht finden. Und wird überhaupt der Ratio-Wert geändert oder was genau passiert da
2) Gleiche Frage für Release. Wie sehen hier typische Zeit-Funktionen aus?
3) Prinzipiell werden ja nur Signale überhalb des Thresholds bearbeitet. Wie ist das jetzt aber mit dem Release? Der greift ja erst, wenn ich mit dem Signal schon wieder unterhalb des Schwellwerts bin. Sagen wir, ich habe nun ein Signal, dass vorher mit 1:5 komprimiert wurde. Dann geht das Signal unter den Threshold. Was passiert jetzt? Meine mathematische Vorstellung eines Kompressors während der Kompression lautet OUT = Threshold + (IN-Threshold)* ratio. Das klappt aber irgendwie nicht mehr so gut, wenn IN < Threshold ist. Was passiert dann? Das Signal sollte ja in der Release Zeit immer noch komprimiert werden. Ich bin verwirrt.
4) Was passiert, wenn das Signal noch während der Attackzeit wieder unter den Schwellwert fällt? Wie ist das Kompressionsverhalten dann?

Vielleicht kann jemand meinem verwirrten Hirn einen Denkanstoss geben.

So Far...
Laguna
 
Eigenschaft
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: 1 Benutzer
3) Prinzipiell werden ja nur Signale überhalb des Thresholds bearbeitet. Wie ist das jetzt aber mit dem Release? Der greift ja erst, wenn ich mit dem Signal schon wieder unterhalb des Schwellwerts bin.

Nee, die Release-Zeit zählt zumindest bei einigen Kompressoren ab der gleichen Zeit wie Attack. Wenn ich mich an den API 525 Klon erinnere, den ich vor einiger Zeit mal gebaut habe, da wurde das mit sich entladenden Kondensatoren realisiert. Und das ist dann einfach eine Zeitkonstante.

Das Signal wird dort nach der Eingangsstufe gesplittet, gleichgerichtet und daraus die Steuerspannung für den FET gewonnen, der auf die Verstärkung des ersten Operationsverstärkers wirkt (Feedback-Kompressor). Und diese Steuerspannung wird durch die Kondensatoren im Zeitverhalten gesteuert.

Aber interessante Frage, wie die verschiedenen Kompressor-Modelle das so machen.

Was ist denn eine "Tween-Funktion"?
 
Hm. Also ich glaube dass jeder Kompressor da eben eine etwas andere Charakteristik aufweist. Wenn ich bei Alloy2 den modus umstelle, und mir das plot für die gain reduction ansehe, dann ändert sich da jedenfalls die Form der Attack- und Release-Kurven, also wie sich der Kompressor über die Zeit erholt. Sieht aber immer irgendwie nach e-Funktion aus.

Wenn das mit der Gleichrichtung stimmt, dann reagiert der Kompressor wohl eher auf die Hüllkurve als auf das Signal selbst. Gleichrichten und dann damit einen Kondensator laden. Nicht anders funktioniert eine lineares Gleichspannungs Netzteil. Je nach Lade-/Entladekurve des Kondensators werden dann die Zeitkonstanten festgelegt.

Also mathematisch wäre das dann wohl, Betrag des Signals bilden und diesen dann tiefpassfilteren.
 
Zuletzt bearbeitet:
Vielleicht kann jemand meinem verwirrten Hirn einen Denkanstoss geben.

Die mathematischen Grundlagen von den Teilen kenne ich nicht. Aber einen Tip habe ich. Die Videos von Meldaproduction zu dem Thema:



die sind schon sehr mathematisch. Wahrscheinlich weil der Typ Informatiker ist. Da gibt es mehrere Folgen. Von Meldaproduction gibt es übrigens ein Forum auf KVR, wo der auch schreibt. Also gegebenenfalls mal da fragen. Der weiß es bestimmt......
 
Hi @Laguna! :)

Nettes Thema.
Ich bin mir sicher, dass es keinen Standrad gibt was die Attack und Release-Funktionen angeht.
Vom Stand weg würden mir zwei naheliegende einfallen: exponentiell (wie beim Laden/Entladen von einem Kondensator) und linear.
Die Definition von den Zeitwerten ist dann natürlich wieder sehr subjektiv..

Ansonsten ist das mathematische Prozedere eh schon ganz gut angerissen worden:
- Signal spliten (Audiosignal & Steuersignal)
- Aus dem Steuersignal ein "Pegel" Signal (Einhüllende) machen (das ist nicht so trivial, wenn man damit keine Erfahrung hat)
- Abhängig von Attack und Release Zeiten Filtergewichtungen aufstellen (mit if > / < Threashold abfrage usw.)
- Diese mit dem Steuersignal multiplizieren
- Den daraus entstandenen Filter auf das Audiosignal falten.

Der Hund wird wie immer im Detail stecken. Wie gesagt kann man sich schon mit Hüllkurvenbestimmung Tage um die Ohren schlagen.

Aber grundsätzlich musst du dir um die kombinierte Wirkung von schnellen Wechsel um den Threshold keine Gedanken machen,
wenn du einfach beide Effekte (mit den richtigen "Abklingkurven") gewichtest und addierst.
Klar wie ich das meine? Wenn nicht, muss ich vermutlich eine Skizze machen..

Was geht eigentlich bei deiner Akustikopimierung voran? ;)

LG Jakob
 
Der Hund wird wie immer im Detail stecken
tut er: der Creamware Vinco (eine hochgelobte 1176/78 Emulation) kam mit kurzen Attackzeiten bei Basssignalen nie klar
nach vielen Jahren wurde in der letzten Software dann der untere Bereich begrenzt
(ich weiss aber nicht, wie sich das Original in der Hinsicht verhält... habe keins...)

cheers, Tom
 
Hi,

Danke für die tollen Antworten! :)


Was ist denn eine "Tween-Funktion"?
Sowas hier.

Ansonsten ist das mathematische Prozedere eh schon ganz gut angerissen worden:
- Signal spliten (Audiosignal & Steuersignal)
- Aus dem Steuersignal ein "Pegel" Signal (Einhüllende) machen (das ist nicht so trivial, wenn man damit keine Erfahrung hat)
- Abhängig von Attack und Release Zeiten Filtergewichtungen aufstellen (mit if > / < Threashold abfrage usw.)
- Diese mit dem Steuersignal multiplizieren
- Den daraus entstandenen Filter auf das Audiosignal falten.

Hier müsstest du ein paar Punkte nochmal ausführen. Gerade den Punkt mit Füllgewichtungen verstehe ich nicht.
Falten und Filter klingt nach Fourierraum, also im Frequenzraum. Bis jetzt bin ich naiverweise davon ausgegangen, dass ich einen Dynamikprozessor komplett im Zeitraum formulieren kann (?).

Das mit dem gleichrichten und Tiefpassen auf dem Sidechain ist ein guter Hinweis. Auf die Idee mit dem Tiefpass bin ich auch gekommen (nicht aber auf das gleichrichten). Das Ergebnis war (wie zu erwarten) eine Kompression/Distoriton, der nur zugepackt hat, wenn Tieffrequente Anteile mit im Signal waren. Ich werde das mal probieren.

Ich versuche mal kurz, deine Punkte nochmal in eigene Worte zu fassen:

1) Signal splitten in Sidechain und Audio
2) Sidechain gleichrichten und tiefpassen
3) Wenn sc > threshold dann Audiosignal im Pegel reduzieren.
4) Wie im Pegel reduzieren?
Das komplette Audiosignal mit einem Faktor multiplizieren? Das widerspricht irgendwie meiner naiven Vorstellung eines Kompressors.
Wie formuliert man dann sinnvoll einen Ratio Wert?


Was geht eigentlich bei deiner Akustikopimierung voran? ;)
Du meinst mein Raum? Der letzte Beitrag im entsprechenden Thread ist noch aktuell. Akustisch wird da erstmal nicht mehr super viel passieren. Lediglich die Superchunks werden noch schön verpackt. Ich bin dann auch erstmal wieder wegen Promotion unterwegs und deshalb auch garnicht so viel zuhause. Evtl kommen dann im Frühjahr weitere Akustische Optimierungen dazu, das muss man dann sehen.

So Far...
Laguna
 
Zuletzt bearbeitet:
Also der typischste Fall für Attack und Release dürfte wirklich die Kondensator-Auf/Entladung über einen Widerstand sein. Die machst Du digital mit einem einfachen rückgekoppelten z-hoch-minus-eins-Glied, also ein Filter erster Ordnung auf den Verstärkungswert. Der Grad der Rückkopplung bestimmt die Zeitkonstante des digitalen RC-Glieds und unterscheidet sich im Attack- und Releasefall.

In der Sidechain gibt es verschiedene Möglichkeiten, die auch starken Einfluss auf das Verhalten haben. Auf jeden Fall erstmal gleichrichten und dann kannst Du einen Tiefpass drauf ansetzen oder eine Mittelwertbildung machen (Summe der gleichgerichteten Samplewerte über x Samples) oder auch noch die Mittelwertbildung mit einer Fensterfunktion gewichten. Oder noch besser RMS, das ist die Wurzel aus der Summe der Quadrate über x Samples (Gleichrichtung gibt es kostenlos dazu:)). Je mehr Samples Du da mit einbeziehst, desto träger wird der Kompressor aber auch.

Man kann auch in der Sidechain eine Gewichtung von RMS und Peak vornehmen. Der Messwert ist dann das Maximum z.B. von RMS-Wert + 10dB und dem Peakwert. So spricht der Kompressor sowohl auf kurze Spitzen an als auch auf lang anhaltende energiereiche Signale an.

Dass ein Kompressor mit kurzen Attack/Releasezeiten einer Bass-Sinuswelle folgt, ist auch normal, das nennt man dann Verzerrung:) Da sind Multiband-Kompressoren im Vorteil, die im Bassbereich mit längeren Zeiten arbeiten können als weiter oben im Spektrum.

4) Wie im Pegel reduzieren?
Das komplette Audiosignal mit einem Faktor multiplizieren? Das widerspricht irgendwie meiner naiven Vorstellung eines Kompressors.

Ja doch, wie denn sonst.

Wie formuliert man dann sinnvoll einen Ratio Wert?

Beispiel: Ratio 1:4. Du bist x dB über der Threshold, dann ist der Faktor -x : 4. Also z.B. Sidechain misst 10dB über der Threshold, dann ist Dein Gain -2,5 dB. Allerdings muss der Faktor dann noch durch das RC-Glied für die Attackzeit durch, das heißt er wandert langsam und asymptotisch nach -2,5 dB.



Banjo
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: 2 Benutzer
Tatsache. Man muss das komplette Signal runterbedämpfen. Damit hat sich dann auch ein großteil der Fragen geklärt. Das ist ja einfacher als ich dachte. Auch wenn ich ein ziemlich falsches Bild im Kopf hatte (Uiuiu :redface:), was so ein Kompressor tut. Wieder was gelernt.

Ich habe das ganze mal umgesetzt und auf Audio geschmissen.
Ganz simpel mit linear ansteigenden und abfallenden Kompressionssignal. Aktuell arbeitet der Kompressor im Dual Mono Modus. Das ganze ergibt einen recht "punchy" Sound. Wenn man die Zeitkonstanten zu kurz wählt, ergibt sich ein snappy/distorted Sound. Anhören kann man sich das mal an einem Drumtrack (Stereosumme aus Addictive Drums). Klick mich.


So Far...
Laguna
 
  • Gefällt mir
Reaktionen: 1 Benutzer
@Laguna brauchst du jetzt noch eine Detailerklärung wie ich meinen Beitrag gemeint hab?
Ich frage, weil ich dafür (inkl. Skizzen) sicher 30min+ brauche.
Dementsprechend mach ichs nur, wenns dir auch was bringt.

LG Jakob
 
die Beschreibung des U273b könnte für dich interessant sein...
(ist eine cgi Seite, das Dokument lässt sich nicht direkt verlinken, entweder manuell runterscrollen oder Wort auf der Seite suchen)

ps: die Seite enthält fast die gesamte verfügbare technische Dokumentation der früheren Rundfunktechnik
ANT, Siemens Telefunken, Neumann etc, Spezifikationen, Messwerte, Abgleich, Schaltplan ...

cheers, Tom
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: 2 Benutzer
Tatsache. Man muss das komplette Signal runterbedämpfen. Damit hat sich dann auch ein großteil der Fragen geklärt. Das ist ja einfacher als ich dachte. Auch wenn ich ein ziemlich falsches Bild im Kopf hatte (Uiuiu :redface:), was so ein Kompressor tut. Wieder was gelernt.
Hä, echt? Irgendwie hab ich das jetzt nicht so rausgelesen, weder in den Beschreibungen hier, noch im Melda-Video, noch in meiner bisherigen Vorstellung von der Funktion eines Kompressors... es wird doch immer nur die Differenz zum Threshold betrachtet?
(Achso, ich glaube beim Tippen hab ich die Antwort verstanden: Du musst natürlich das gesamte Signal bedämpfen, aber nur um den Faktor "Differenz / Ratio" - trotzdem verstehe ich jetzt noch nicht, was dann bei Unterschreiten des Thresholds passiert... ich hab das bisher auch immer so verstanden, dass die Releasezeit erst nach Unterschreiten "aktiv wird", ist das denn nie der Fall?)
 
  • Gefällt mir
Reaktionen: 1 Benutzer
Meiner Meinung nach wird die Releasezeit immer dann aktiv, wenn der Kompressor wieder "aufmacht", sprich das Gain größer wird. Das kann auch sein, weil das Signal weniger über der Threshold liegt als vorher, aber immer noch oberhalb der Threshold.

Banjo
 
Das ist etwas, was mir auch noch nicht ganz klar ist.

Ab wann genau beginnt die Release-Zeit? Ab exakt dem Augenblick, wo der Threshold wieder unterschritten wird? Oder schon etwas früher bzw. später?
Vielleicht gibt es da aber auch je nach Kompressor-Modell verschiedene Implementierungen.
 
Und um die Verwirrung noch zu steigern, was passiert, wenn der Threshold währen der Release Zeit wieder überschritten wird?
 
  • Gefällt mir
Reaktionen: 2 Benutzer
die Beschreibung des U273b könnte für dich interessant sein...
ps: die Seite enthält fast die gesamte verfügbare technische Dokumentation der früheren Rundfunktechnik
ANT, Siemens Telefunken, Neumann etc, Spezifikationen, Messwerte, Abgleich, Schaltplan ...
Danke für den Link, das werde ich mir mal anschauen!

Du musst natürlich das gesamte Signal bedämpfen, aber nur um den Faktor "Differenz / Ratio" - trotzdem verstehe ich jetzt noch nicht, was dann bei Unterschreiten des Thresholds passiert... ich hab das bisher auch immer so verstanden, dass die Releasezeit erst nach Unterschreiten "aktiv wird", ist das denn nie der Fall?)
Genau so bin ich auch da gesessen.

Schön, dass es nicht nur mir so geht. :redface: Das Melda Video hat es ja auch so erklärt, wie ich eigentlich dachte. Weltverschwörung der Kompressor-Hersteller und so. xD
Neben dem von dir angesprochenen Verständnisproblem mit dem Release kommt es bei der Formulierung zu eher unschönen Verzerrungen.

Ich werde da noch ein wenig herumprobieren.

@13.Melody : Ich denke, ich hab es verstanden. Danke aber fürs Angebot! :)

So Far...
Laguna
 
Ab wann genau beginnt die Release-Zeit? Ab exakt dem Augenblick, wo der Threshold wieder unterschritten wird? Oder schon etwas früher bzw. später?

was passiert, wenn der Threshold währen der Release Zeit wieder überschritten wird?

Es ist eigentlich ganz einfach. Die Sidechain misst den Pegel und berechnet aus Pegel, Threshold und Ratio eine Verstärkung. Wenn die kleiner ist als die derzeitige Verstärkung, gilt die Attackzeit und wenn sie größer ist als derzeit, gilt die Releasezeit. Egal ob der Pegel über oder unter der Threshold liegt.

Banjo
 
Verstärkung ist hier gleichbedeutend mit Pegel (umgangssprachlich)?
Also sprich mit Verstärkung meinst du das, was man digital mit der dB-Skala (Verstärkung = 1 bei 0 dB) angibt?
 
Verstärkung ist der Faktor, mit dem der Kompressor das Signal multipliziert, bevor er es auf seinen Ausgang gibt..

Banjo
 

Ähnliche Themen


Unser weiteres Online-Angebot:
Bassic.de · Deejayforum.de · Sequencer.de · Clavio.de · Guitarworld.de · Recording.de

Musiker-Board Logo
Zurück
Oben