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
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.
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.
Vielen Dank für die Tipps. Ich werde doch einfach die Multiplikationen rein stecken. Heutzutage kann man sich das ja leisten ;-)
Dir ist bekannt, dass diese Form des Clippens einen Haufen Oberwellen in das Signal einträgt und zu besch....m Klang führt?
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
> 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. :)
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
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.
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.
> 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.
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.
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.
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.
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.
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?
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 :-)
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).
:
Bearbeitet durch User
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"
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?
Na du hast doch den Röhren-AMP ins Rennen geschickt ... Ich bat ja meinerseits um einen Tipp in Sachen Formeln.
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.
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/)
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.
J. S. schrieb: > Ich poste mal die Kurven, die sich bei meinem parametrischen Abschwächer > ergeben. Was ist da die X-Achse? 100%
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.