Forum: Digitale Signalverarbeitung / DSP / Machine Learning suche Algo für Soft Clipping


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von asd (Gast)


Lesenswert?

Ich benutze einen STM32 Prozessor und will Audio Soft-Clippen. Mit 
google hab ich sowas gefunden:
https://ccrma.stanford.edu/~jos/pasp/Soft_Clipping.html

Wie implementiert man das mit einem STM32? An sich hab ich genügend CPU 
Zeit für die ganzen Multiplikationen, aber gibt es vielleicht eine 
Multiplikations-Sparende Variante von einem Soft-Clipper? Früher hatte 
man ja nicht so viel CPU-Power und an sich braucht man ja nur eine Kurve 
die Linear beginnt und dann sanft in eine Horizontale übergeht.

Viele Grüße

von A. S. (rava)


Lesenswert?

du könntest die Kurve durch lineare Interpolation an einer beliebigen 
Zahl an Stützstellen annähern.
Dann hast du nur noch eine Multiplikation pro sample. Aber nur, falls du 
die Kurve an sich nicht parametrisieren möchtest.

von Klaus H. (klummel69)


Lesenswert?

Wenn du die Fallunterscheidungen änderst und die Punkt-Symmetrie um den 
Nullpunkt ausnutzt, kannst Du ggf etwas einsparen. Dann reichen 2 
Multiplikationen statt 3 (Parabel statt Polynom 3. Grades)
1
g(x) = k* (1- (x-1)^2)  = k – k*(x-1)*(x-1)
2
mit k=0.6666 (oder anderem Wert < 1)
3
4
f(x) = Fallunterscheidung
5
-k      |       x < -1
6
-g(-x)  |  -1 < x <  0
7
g(x)    |   0 < x <  1
8
+k      |   1 < x

Ob das nicht zu viel verzerrt musst du ausprobieren.

von asd (Gast)


Lesenswert?

Vielen Dank für die Tipps. Ich werde doch einfach die Multiplikationen 
rein stecken. Heutzutage kann man sich das ja leisten ;-)

von Audiomann (Gast)


Lesenswert?

Dir ist bekannt, dass diese Form des Clippens einen Haufen Oberwellen in 
das Signal einträgt und zu besch....m Klang führt?

von Max M. (jens2001)


Lesenswert?

Audiomann schrieb:
> dass diese Form des Clippens einen Haufen Oberwellen in
> das Signal einträgt und zu besch....m Klang führt?

Das ist genau das was ein Röhren-Amp bei Übersteuerung macht, und man da 
evtl. auch haben will!

: Bearbeitet durch User
von Gasheizer (Gast)


Lesenswert?

> was ein Röhren-Amp bei Übersteuerung macht, und man da
> evtl. auch haben will!

Du kennst eben Clipper auf der Basis der Besselfunktionen nicht.
Funfact: Auch Roehrenverstaerker koennen das so nicht.
Die klingen eben nur nach "Roehre".

> hab ich genügend CPU Zeit
Ja, das glaubst du bis jetzt. :)

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Max M. schrieb:
> Das ist genau das was ein Röhren-Amp bei Übersteuerung macht, und man da
> evtl. auch haben will!

Röhren "clippen" aber nicht (so, wie es hier diskutiert wird). Das ist 
eher ein sanfter Verlauf mit früh einsetzender Sättigung die 
kontinuierlich abflacht. Dazu eignet sich ansatzweise(!) eine solche 
Kurve wir hier dargestellt:

http://www.96khz.org/oldpages/windowfunctions.htm
(die in Violett)

Diese kann oberhalb der 0,5 auch zum Sättigen einer linearen Kurve nach 
eingangs gefragtem Schema herangezogen werden, wenn man sie entsprechend 
komprimiert.

Generell sollte man Cliping vermeiden und lieber mit einem Kompressor 
und einer AGC vorarbeiten. Diese brauchen allerdings ähnliche 
Funktionen, die in gleicher Weise ermittelt werden und nur langsamer 
wirken.

asd schrieb:
> ch werde doch einfach die Multiplikationen rein stecken.
Der Hauptanteil der Multiplikationen dürfte ohnehin bei der Berechnung 
und Einordnung der Momentanleistung liegen.

Einen harten linearen Clipper könnte man auch mit einem Zeipunktsystem 
bauen und alles über 50% um Faktor 2 zusammenstauchen. Schafft dann 150% 
headroom.

: Bearbeitet durch User
von Rolf S. (audiorolf)


Lesenswert?

asd schrieb:
> Ich benutze einen STM32 Prozessor und will Audio Soft-Clippen. Mit
> google hab ich sowas gefunden:
> https://ccrma.stanford.edu/~jos/pasp/Soft_Clipping.html

Was wäre an dem Stanford auszusetzen? Nimm eben eine quadratische 
Annäherung. Oder einfach hart linear.

von He. (Gast)


Lesenswert?

asd schrieb:
> Wie implementiert man das mit einem STM32? An sich hab ich genügend CPU
> Zeit für die ganzen Multiplikationen, aber gibt es vielleicht eine
> Multiplikations-Sparende Variante von einem Soft-Clipper?
Noch vor Jahren hätte man gesagt, "Nimm Additionen" aber eine 
Multiplikation geht in der MCU in einem Takt, also "what for"? Je 
komplizierter der Algorithmus, desto mehr Speicheraktivitäten sind zu 
erwarten, was sich mehr ausbremst.

Ganz ohne Multiplikation geht es nur mit linearen Geradenstücken zur 
Bildung einer Sättigung, aber das erfordert auch wieder mehrere 
IF-THEN-Abfragen.

In modernen Prozessoren sind Multiplikationen keine Herausforderung 
mehr. Ich würde annehmen wollen, dass die Audio-Algorithmen im Computer 
("VST") die ganze Kurze pauschal einfach mit einer Funktion behandeln, 
z.B. mit einem Logarithmus.

von Motopick (motopick)


Lesenswert?

> Noch vor Jahren hätte man gesagt, "Nimm Additionen" aber eine
> Multiplikation ...

Vor noch viel mehr Jahren konnte man sich leicht davon ueberzeugen,
dass ein Z80, auch der Z80H mit immerhin 10 MHz Takt, fuer so etwas
nichts taugt.
Aber bereits deutlich im letzten Jahrtausend gab es DSPs, die
Multiplikation und Bitgeschiebe in einem Takt erledigen konnten.
Wirklich Interessierte mussten also nicht zwangsweise auf ARM warten.

Was soll also der Hinweis?

Zu den erwaehnten "besseren" Clippingalgorithmen scheint der TO ja
noch nicht einmal vorgedrungen zu sein.

> Ich würde annehmen wollen, dass die Audio-Algorithmen im Computer
> ("VST") ...

Warum versuchst du es nicht einmal selbst? Das VST-SDK ist frei
zugaenglich. Dann musst du nicht mutmassen.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Motopick schrieb:
> Warum versuchst du es nicht einmal selbst? Das VST-SDK ist frei
> zugaenglich. Dann musst du nicht mutmassen.
Die braucht aber eine Registrierung bei Steinberg und der Support ist 
seit einigen Jahren so träge und mies, dass man damit nicht mehr 
arbeiten möchte. Ich habe selbst noch zu Corona-Zeiten das SDK nochmal 
installieren wollen, um etwas mit VST zu machen, bin aber an gleich 
mehreren Problemen gescheitert.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Noch etwas zu dem oben auf der Webseite  propagierte Algorithmus der 
Stanford University:

Das ist kein Clipper im klassischen Sinn, sondern eine Kombination aus 
Clipper und Verzerrer und (sofern er niederfrequent angewendet wird), 
ein Kompressor. Warum der weit verbreitet sein soll, zum Clippen taugt 
und wer den angeblich benutzt, bleibt offen. Wegen der X3 könnte man 
argumentieren, dass diese automatisch das Vorzeichen berücksichtigt und 
weniger Oberwellen hineindrückt, als die X2, die ich auf meiner Webseite 
(s.o.) empfehle.

Tatsache ist, dass es eine abschnittsweise definierte Funktion bleibt 
und dann frage ich mich, warum man ausgerechnet das, worum es geht, 
nämlich das Clippen in sehr simpler Weise löst, während man das, worum 
es nicht geht, nämlich den nicht zu hoch ausgesteuerten Bereich auch 
mitbearbeitet und dafür dann sogar die kompliziertere 
Berechnungsvorschrift vorgibt.

Der Sinn erschließt sich mir nicht. Wenn ich Ravioli kochen will, dann 
mache ich auch nicht die Dose mit einem exakt definierten, sanften 
Prozess auf und schmeisse dann die Ravis in den heißen Pott, um mich 
weiter um die Pflege der Dose zu kümmern und nenne das 4-Sterne-Küche, 
sondern ich schaue zu, dass ich die Dose irgendwie aufbekomme und 
kümmere mich dann im Detail um die Ravioli.

Auf Deutsch:

Der Bereich des potenziellen Übersteuerns ist der ja der Interessante, 
den es zu behandeln gilt und nicht etwa der andere, lineare. Den sollte 
man in Frieden lassen, um das Signal dort, wo es nicht geclippt werden 
muss, unangetastet zu lassen. Ansonsten kommen ja überall (auch wenn die 
Aussteuerung gering genug war) Oberwellen hinzu und man betreibt 
Klanggestaltung.

Man muss sich einfach fragen, wozu ein Clippen überhaupt da sein soll:

Aus musikalischer Sicht ist dies ja der "Unfall", den es zu handhaben 
gilt, wenn jemand irgendwo die Verstärkung zu hoch aufgedreht hat oder 
bei Synthesizern die Filter unkontrolliert resonieren. Daher ist aus 
meiner Sicht die Anforderung die, in dem Bereich, wo die Lautstärke 
passt, die Finger weg zu lassen und nur dort, wo sie zu groß wird, 
einzugreifen und zwar möglichst weich.

Dies wiederum heißt: Zwischen den Grenzen linear, darüber abgeschächt 
und den Eintrittsbereich rund.

von Jürgen S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich poste mal die Kurven, die sich bei meinem parametrischen Abschwächer 
ergeben. Bei dem kann man einstellen, bis zu welchem %-Pegel das Signal 
linear sein soll. Bei meinem Audiosystem ist das z.B. das 25%-Level, 
weil ich mit 12dB Headroom fahre. Der maximale Pegel, den ich noch auf 
den Ausgang geben kann, ist 6dB fs. Damit kein Signal da drüber geht, 
wird es vorher limitiert. Das wird angezeigt, sodass man an passender 
Stelle eingreifen kann, um es im Laufe des Mischprozesses sukzessive zu 
beseitigen.

Ferner kann man die Funktion wie oben angedeutet als Masterkompressor 
benutzen, um überhöhte Lautstärken beim Abhören zu limitieren. Die 
Funktion besteht aus einer Kombi aus X2 und X3. Im konkreten Beispiel 
wird man den Kompressor unterwegs auf 25% stellen und hat so eine 
"Hubreserve" von Faktor 4. Am Ausgang des Kanalmixers Mixer steht es auf 
50%, weil das die letztlich maximale lineare Lautstärke ist.

Für eine Kompression 2:1 kann man die 40% oder 50% Einstellung nehmen 
und bekommt nur Signale abgeschwächt, die darüber sind. Wenn man 
hingegen die Logik der Stanfordformel anwenden will, dann sollte man 
Nägel mit Köpfen machen und gleich zu höheren Polynomen greifen, die 
länger linearer laufen und erst spät auf eine Gerade abbiegen:

http://www.96khz.org/oldpages/parametricsaturation.htm

Die daraus entstehende Kurve nähert sich dann schon in Richtung des 
Verhaltens magnetischer Sättigung.

Übrigens bin ich nicht der Meinung, dass im Maximalpunkt die Steigung 1 
sein muss: Man kann eine Kompressorlinie auch durchaus so fahren, dass 
sie mit Reststeigung in den Max-Punkt läuft. Und man kann das bei 90% 
anberaumen und für die Übersteuerung eine Reststeigung überlassen.

von Andi (chefdesigner)


Lesenswert?

Motopick schrieb:
> Zu den erwaehnten "besseren" Clippingalgorithmen scheint der TO ja
> noch nicht einmal vorgedrungen zu sein.
Was wäre dein Vorschlag eines guten Clippings? Ich suche noch etwas 
Elegantes für GItarren.

Jürgen S. schrieb:
> Ansonsten kommen ja überall (auch wenn die
> Aussteuerung gering genug war) Oberwellen hinzu und man betreibt
> Klanggestaltung.
Ein legitimes Ziel eines Clippings :-)

Gasheizer schrieb:
> Du kennst eben Clipper auf der Basis der Besselfunktionen nicht.
Welche Clipping-Algorithmus nutzt eine Besselfunktion und welche?

Soweit ich mich entsinne sind Besselfunktionen nicht so ohne weiteres 
direkt berechenbar, sondern benötigen eine Iteration.

von Old (Gast)


Lesenswert?

Andreas F. schrieb:
>
> Was wäre dein Vorschlag eines guten Clippings? Ich suche noch etwas
> Elegantes für GItarren.
>

Ein einfacher Röhren-PA. Die einfachste Schaltung mit automatischer 
G1-Vorspannung und einfachster Netzteilschaltung mit 
Röhrengleichrichter. Welche Leistungsklasse soll es den sein?

von Andi (chefdesigner)


Lesenswert?

Old schrieb:
> Ein einfacher Röhren-PA. Die einfachste Schaltung mit automatischer
> G1-Vorspannung und einfachster Netzteilschaltung mit
> Röhrengleichrichter.
Was genau ist für dich ein einfacher Röhren-PA und eine einfacher 
Schaltung?

>Welche Leistungsklasse soll es den sein?
0 Watt - es geht bekanntlich um einen Algorithmus :-)

von Old (Gast)


Lesenswert?

Eben die PAs wie sie in den 50er…60er Jahren von Gitarristen verwendet 
wurden.

Deren softiges Soft-Clippen, was ja vom Hersteller des Verstärkers 
abhängig war, kann man nur schwer mit digitalen Algorithmen nachbilden 
(wollen).

von Andi (chefdesigner)


Lesenswert?

Old schrieb:
> Eben die PAs wie sie in den 50er…60er Jahren von Gitarristen verwendet
> wurden.

Die Rede war eigentlich nicht von 50er -Jahre Ausstattung, also Zeug, wo 
es keien Halbleiter gab und man noch Röhren nehmen musste, sondern 
einer (möglichst einfachen) Ersatzsoftware. Also wirklich eine...

-> Software <-

... verstehst du?  Wegen "Algorithmus gesucht" und so, also etwas 
Weiches, Mathematisches, Abstraktes.

Eine vollständige Röhrenemulation sollte dafür nicht nötig sein und wird 
sicher auch nicht so ganz simpel ausfallen ...

Idee dahinter:
Beitrag "Gitarreneffekte selber bauen"

von Old (Gast)


Lesenswert?

Wie gesagt oder besser geschrieben, das softe Soft-Clipping der 
Röhren-PAs algorithmisch nachbilden zu wollen, ist praktisch unmöglich. 
Welches Soft-Clipping von welchem Röhren-Verstärker will man den 
nachbilden?

Irgendein Soft-Clipping kann man sicherlich mit viel Aufwand auch 
mathematisch beschreiben und als Algorithmen realisieren. Bevor man 
damit anfängt, sollte man erstmal festlegen, was man als Ergebnis 
erwartet. Welches Soft-Clipping Spektrum soll es denn werden?

von Andi (chefdesigner)


Lesenswert?

Na du hast doch den Röhren-AMP ins Rennen geschickt ...

Ich bat ja meinerseits um einen Tipp in Sachen Formeln.

von He. (Gast)


Lesenswert?

Jürgen S. schrieb:
> Übrigens bin ich nicht der Meinung, dass im Maximalpunkt die Steigung 1
> sein muss:

Ist sie auch nicht. Die Steigung in dem Sättigungsbereich ist Null.

Motopick schrieb:
> Vor noch viel mehr Jahren konnte man sich leicht davon ueberzeugen,
> dass ein Z80, auch der Z80H mit immerhin 10 MHz Takt, fuer so etwas
> nichts taugt.
Rückgriff auf die Vergangenheit?
Der OP sucht einen Algo, bewegt sich also was Intention und Technik 
angeht, in der Gegenwart. Die Frage war ja nicht analog oder digital, 
sondern mit welchem Aufwand digital.

von Rbx (rcx)


Lesenswert?

Man hat in der Analogwelt meist 2 Dimensionen, die man in der 
Digitalwelt nicht hat: a) guter Klang, Wohlklang, Wände wackeln usw. b) 
Macht Spaß - grundsätzlich macht z.B. das einfache Herumspielen mit 
einem Minimoog (und einer gute Abhöre) sehr viel Spaß. Nun hat der 
Minimoog auch noch einen Input zum Herumpropieren.

Die großen Analogen, wie Oberheim Matrix 12 oder den digitalen Waldorf Q 
habe ich nur ausprobiert bzw. ausprobieren können (was ich jeweils recht 
lange gemacht hatte)
Die Digitalfilter selber, also auch solche wie beim Emax 2 klingen 
eigentlich ganz gut - wenn entsprechend Know How und Geschick usw. 
hineinfließen. Die Waldorfs machten diesbezüglich mit den besten 
Eindruck.

Bei Oberheim gab es eine "Matrix"-Variante für den kleinen Geldbeutel, 
den Matrix 1000. Da hatte man den haptischen Spaß, den man beim Minimoog 
oder eben beim Matrix 12 hatte nicht mehr.

Die Roland-Filter sind auch nicht schlecht - was man vermisst, ist aber 
wieder eine einfache Zugänglichkeit bei der Klanggestaltung von 
komplexeren "Sounds".

Bleiben wir mal beim Matrix 1000. Die Möglichkeit, die Programme bzw. 
die Klänge mit Software zu bearbeiten, hatte ich nie schlecht gefunden.
Man kommt relativ weit mit - muss aber auf der anderen Seite ständig 
sein Windows erneuern, um gewissermaßen sein Steinberg Programm am 
laufen zu halten.
Das, also ständige Softwareupdates bis zu neueste Bloatversion haben die 
alten Geräte wie der Matrix 1000 nicht nötig - die funktionieren erstmal 
aus sich heraus ganz gut. Aber man braucht immer eine 
Steuerungssoftware, (sinnvollerweise auch Steuerungshardware) und 
natürlich ein wenig Know How, und auch gewisse Visionen.

Hinsichtlich des Know Hows: Man sollte noch relativ viel Material 
finden, vorzugsweise in Bibliotheken an Unis als erste Anlaufstelle.

Röhren: Tatsächlich klingen die so gut, dass man sich das anhören muss, 
um überhaupt "im Bilde" zu sein.
Wir wissen aber auch, wie schwierig deren Service-Punkt ist.
(Da könnte ich mal was vom Minimoog erzählen..)

Der Fokus sollte darauf liegen, dass es gut genug klingt, Vorsprung 
durch Technik drin ist, und die Handhabung einfach ist.

Es gibt übrigens in der Alltagswelt ähnliche Geschichten: Tortillas - 
vom soziologischen Standpunkt her haben sich an manchen Stellen 
Weizenmehltortillas durchgesetzt. Das macht insofern Sinn, weil die 
traditionelle Bearbeitung des Maises im normalen Alltagsleben (also in 
Europa z.B.) eher schwierig ist bzw. auch schlecht 
kommuniziert/integriert ist.

Zurück zur Programmierwelt:
Zumindest da gibt es die Strategie der kleinen Schritte.
So wäre meine Empfehlung: selbst hineinarbeiten, da geht einfach 
Mengenmäßig viel mehr - und eben schrittweise hineinarbeiten.
(http://www.upnoise.de/tb-reelbus/)

von Andi (chefdesigner)


Lesenswert?

Rbx schrieb:
> (http://www.upnoise.de/tb-reelbus/)

Bandsättigung für 20,-. Na Mahlzeit.

von He. (Gast)


Lesenswert?

Rbx schrieb:
> Man hat in der Analogwelt meist 2 Dimensionen, die man in der
> Digitalwelt nicht hat: a) guter Klang, Wohlklang, Wände wackeln usw. b)
> Macht Spaß

Seltsame Definition. Besonders "Wohlklang". zum Thema Soft Clipping, um 
das es ja irgendwie immer noch geht, fällt mir ein, dass diese so 
erzeugten Sättigungseffekte zu Verzerrungen führen, die ganz besonder 
"wohl" klingen sollen.

Überzeugen könnte mich dahingehend noch kein einziges Gerät. Alle so 
gebauten Verzerrer kreischen und zerren in den Ohren. Sie produzieren 
stechende und aggressive Klangkoponenten, die nur "Musiker" mit defekten 
Ohren gut finden können.

von Rolf S. (audiorolf)


Lesenswert?

J. S. schrieb:
> Ich poste mal die Kurven, die sich bei meinem parametrischen Abschwächer
> ergeben.
Was ist da die X-Achse? 100%

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Ja klar, Vollaussteuerung des Eingangs.

Man muss natürlich überlegen, ob man den Ausgang noch verstärkt, um 
wieder auf 100% zu kommen. Tut man das, wären im Extremfall die 
ungedämpfte /unverzerrrte Amplitude bei 250% - ausgehend von dem 
Beispiel 40%. Und ...

... es hat bei einem Verzerrer eine Menge Oberwellen drin. Die Summe der 
Energien und damit auch die Lautstärke ist entsprechend höher. Eventuell 
sehr viel höher.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.