Mathe-Problem mit Parabolschwingungen

Diskussionsforum für Fragen zur Struktur und Implementation in REAKTOR, auch DSP, Literatur und begleitende Software

Moderator: herw

Antworten
krümelmonster
synthesist
Beiträge: 90
Registriert: 6. März 2010, 18:18

Mathe-Problem mit Parabolschwingungen

Beitrag von krümelmonster »

Werte Hirne des Deutschen Reaktor Forums,

wonach ich suche, ist eine Funktionsgleichung für eine Parabolschwingung variabler Schwingungsweite.
Einen Hinweis, wie es denn gehen könnte, liefert ja das Core-Handbuch mit seinem Event-Shaper-Beispiel auf S.69.

Wenn man ein wenig abstrahiert, kommt man auf eine Lösung:

f(x) = 1/a * x * (a-|x|) ; dabei ist a der Abstand zwischen dem Ursprung und dem ersten Nulldurchgang, somit eine halbe Schwingungsweite.

Zum Einen bin ich mir nicht einmal sicher, ob das stimmt.
Irgendwie kriegen alle Freeware-Matheprogramme, die ich finden konnte, die Sache mit dem Betrag nicht gebacken.
Für einen Hinweis, welche Freeware nicht gleich bei der ersten Anforderung scheitert, wäre ich sowieso dankbar.

Zum Anderen brauche ich die Funktion etwas anders:

1.) Sie soll zwischen 0 und 1 schwingen.
Falls die oben aufgeführte Funktionsgleichung stimmen sollte, wäre das dann:

f(x) = 1/2a * x * (a-|x|) + 0,5

nur soll sie
2.) - mal ein Minimum im Ursprung (0|0) haben, was aber jetzt nicht mehr der Fall ist.
- mal ein Maximum bei (0|1) haben, was jetzt ebenfalls nicht vorliegt.

Leider liegt mein Abitur mit ansprechenden Mathe-Leistungen schon Ewigkeiten zurück und ich meine sogar, mich daran erinnern zu können, solche Funktionen niemals behandelt zu haben.
Frage also: Wie bekomme ich eine Phasenverschiebung einer solchen Funktion - sowohl nach links als auch nach rechts - hin ?

Viele Grüße, Krümelmonster
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: Mathe-Problem mit Parabolschwingungen

Beitrag von herw »

krümelmonster hat geschrieben:...Zum Anderen brauche ich die Funktion etwas anders:

1.) Sie soll zwischen 0 und 1 schwingen.
Falls die oben aufgeführte Funktionsgleichung stimmen sollte, wäre das dann:

f(x) = 1/2a * x * (a-|x|) + 0,5

nur soll sie
2.) - mal ein Minimum im Ursprung (0|0) haben, was aber jetzt nicht mehr der Fall ist.
- mal ein Maximum bei (0|1) haben, was jetzt ebenfalls nicht vorliegt.

...
Frage also: Wie bekomme ich eine Phasenverschiebung einer solchen Funktion - sowohl nach links als auch nach rechts - hin ?

Viele Grüße, Krümelmonster
Hi Krümelmonster,
mal wieder nacht-aktiv gewesen?
Dein Ansatz ist schon richtig. Ich verändere aber deinen Term etwas:
f(x)=1/a·x(a-|x|)+0,5. Deine angegebene Amplitude (Vorfaktor 1/2) war zu klein.
Das Minimum liegt dann bei -a/2, das Maximum bei +a/2. Eine Verschiebung erreicht man, indem man x durch den Term x-a/2 (Verschiebung um a/2 nach rechts), bzw. x+a/2 (Verschiebung um a/2 nach links) ersetzt.
Ich habe im folgenden Beispiel a=2 gewählt.
Bild
Beim ersten Funktionsterm habe ich eine Verschiebung nach rechts um 1 vorgenommen (x wird durch x-1 ersetzt).
Beim zweiten Term habe ich den Graphen nach links verschoben (ersetze x durch x+1) und dann an der y-Achse gespiegelt (ersetzte x durch -x).
Man kann natürlich dies auch verstehen als Spiegelung an der Spiegelachse bei x=1:
ersetze x-1 durch -(x-1)=-x+1.
Ich habe mal die beiden Terme in das Freeware Programm Grapher (Apple) eingegeben. Für dich sind dann jeweils die Ausschnitte von 0 bis a (jeweils Halbwelle von 0 bis a) relevant.

ciao herw
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
krümelmonster
synthesist
Beiträge: 90
Registriert: 6. März 2010, 18:18

Beitrag von krümelmonster »

Hallo herw,

heißen Dank für die schnelle und aufschlußreiche Antwort !

Vielleicht sollte ich mir - bei besserer Finanzlage - ja doch mal einen kleinen Mac zulegen. So was schönes wie Grapher habe ich auf PC-Basis noch nicht gesehen.

Gedacht ist das Ganze um Audiosignale soft ein- und auszufaden. So dürfte es ein wenig CPU-freundlicher ausfallen, als wenn ich eine halbe Sinus-/Cosinus-Welle drüberlaufen lasse, oder (schade, kann es erst heute abend ausprobieren, muß gleich Brötchen verdienen) ?

Was den Grad an Softness anbelangt, dürften beide Möglichkeiten ziemlich gleich ausfallen, oder ?
Dürfte ich Dich noch einmal in Anspruch nehmen und darum bitten, die entsprechenden Winkelfunktionen über die Parabolschwingung zu plotten ?
Wäre ja auch für Dich nicht ganz uninteressant zu sehen, wie wenig sich die beiden Schwingungen unterscheiden !

Jaja, die Nachtaktionen bringen meistens nicht so sehr viel. Aber bei der Hitze geht´s ja auch tagsüber kaum besser.

Viele Grüsse, krümelmonster.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Beitrag von herw »

krümelmonster hat geschrieben:Hallo herw,
...Was den Grad an Softness anbelangt, dürften beide Möglichkeiten ziemlich gleich ausfallen, oder ?
Dürfte ich Dich noch einmal in Anspruch nehmen und darum bitten, die entsprechenden Winkelfunktionen über die Parabolschwingung zu plotten ?
Wäre ja auch für Dich nicht ganz uninteressant zu sehen, wie wenig sich die beiden Schwingungen unterscheiden !
...Viele Grüsse, krümelmonster.
na klar!
Für dich ist nur der Bereich zwischen 0 und 2 interessant. Der dunkelblaue Graph stellt die passende Sinusfunktion dar.
Bild
ciao herw
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
krümelmonster
synthesist
Beiträge: 90
Registriert: 6. März 2010, 18:18

Beitrag von krümelmonster »

Danke,danke,danke,

solange es nicht um direkte Klangerzeugung, sondern nur um ein Kontrollsignal geht, kann man den Unterschied offensichtlich komplett vernachlässigen.
Selbst für die Klangerzeugung dürfte es ausreichen.
Auch NI hat dies ja früher ausdrücklich zwecks CPU-Ersparnis empfohlen.
Wunderbar, viele Grüsse, Gerald.
krümelmonster
synthesist
Beiträge: 90
Registriert: 6. März 2010, 18:18

Beitrag von krümelmonster »

Hi Herwig,
schön, daß Du wieder im Lande bist. Hoffe, der Urlaub war erholsam. Ich selbst bin mal wieder in Berlin kleben geblieben. Morgen geht´s dann aber endlich los ins idyllische Ruhrgebiet.

Hier ein kleiner Nachtrag zur Parabolgeschichte:

Wir hatten beide Recht, aber beide nicht ganz !
Die jeweiligen Funktionsgleichungen stellen keine allgemeingültige Lösungen dar !
Deine Version funktioniert nur bei a=2, meine nur bei a=4 !

Dabei geht es noch einfacher:

Mit f[x]= 2*(x-0.5)*(1-|x-0.5|)+0.5
und f[x]= -2*(x-0.5)*(1-|x-0.5|)+0.5 (!!)

ergeben sich die gewünschten Parabol-Abschnitte,
jeweils zwischen 0 und 1.
Anschließend in Reaktor x durch 1/x ersetzen, sprich: den Sample-Counter durchlaufen lassen - und "aus, die Maus" !

Viele Grüsse, krümelmonster

P.S.: Falls jemand noch eine Funktionsgleichung für eine "echte" Parabolwelle haben sollte, bitte melden !
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Beitrag von herw »

krümelmonster hat geschrieben:Hi Herwig,
schön, daß Du wieder im Lande bist. Hoffe, der Urlaub war erholsam. Ich selbst bin mal wieder in Berlin kleben geblieben. Morgen geht´s dann aber endlich los ins idyllische Ruhrgebiet.
melde dich, dann können wir direkt im Garten plaudern!
Hier ein kleiner Nachtrag zur Parabolgeschichte:

Wir hatten beide Recht, aber beide nicht ganz !
Die jeweiligen Funktionsgleichungen stellen keine allgemeingültige Lösungen dar !
Deine Version funktioniert nur bei a=2, ...
na klar, da du ja enge Vorgaben gemacht hast!
Wenn du eine veränderbare Periodenweite a haben möchtest, so musst du lediglich x durch x/c ersetzen; eine Division durch c=2 beispielsweise dehnt den x-Bereich auf das Doppelte, c=3 auf das Dreifache.
Bild
Eine Stauchung erhältst du durch Werte, die kleiner als 1 sind. Nun musst du nur noch den Zusammenhang zwischen "Periodenlänge" und Stauchung erstellen. Das ist dann eine allgemeine Lösung.
Dabei geht es noch einfacher:

Mit f[x]= 2*(x-0.5)*(1-|x-0.5|)+0.5
und f[x]= -2*(x-0.5)*(1-|x-0.5|)+0.5 (!!)
auch klar, dann sieht man aber nicht mehr so schön die Zusammenhänge; war als kleine Algebra-Übung gedacht! Da ist die Didaktik mit mir durchgegangen ;-)

ciao herw und bis bald!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
krümelmonster
synthesist
Beiträge: 90
Registriert: 6. März 2010, 18:18

Beitrag von krümelmonster »

Hi herw,
mal wieder vielen Dank für Deine Ausführungen.
Fragt sich jetzt nur noch, was am cpu-genügsamsten ist.
Ich habe es noch nicht ausprobiert - Sommerfäule - , schätze aber, daß dies die Version mit a=1 ist, da sie mit weniger Divide-Vorgängen auskommt.
Hübscher fänd ich es allerdings mit einer allgemeingültigen Lösung, durch die dann nur noch Integers gejagt werden.
Anyway, günstiger als die Version mit Sinus-/Cosinus-Fades wird es bestimmt.
Bis bald - vielleicht dann schon in real-time -, viele Grüsse, krümelmonster.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Beitrag von herw »

krümelmonster hat geschrieben:Hi herw,
mal wieder vielen Dank für Deine Ausführungen.
Fragt sich jetzt nur noch, was am cpu-genügsamsten ist.
Ich habe es noch nicht ausprobiert - Sommerfäule - , schätze aber, daß dies die Version mit a=1 ist, da sie mit weniger Divide-Vorgängen auskommt.
Hübscher fänd ich es allerdings mit einer allgemeingültigen Lösung, durch die dann nur noch Integers gejagt werden.
Anyway, günstiger als die Version mit Sinus-/Cosinus-Fades wird es bestimmt.
Bis bald - vielleicht dann schon in real-time -, viele Grüsse, krümelmonster.
Es gibt in der Core-Library einen Parabel-Oszillator. Er funktioniert allerdings nur für Pitchwerte bis etwa 90. Dann ist er verstimmt.
Eine gemischte Primary-Core Lösung findest Du übrigens im MM2. Sie ist viel CPU-verträglicher.

ciao herw
Antworten