HÜLLKURVEN

Hier soll es ausschließlich um Arbeiten zu neuen und alten Ensembles gehen.

Moderator: herw

Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

HÜLLKURVEN

Beitrag von herw »

3.2.3 Modellrechnungen mit verschiedenen Clock-Raten
Woran liegt es? Nun wenn man bedenkt, dass dort mit Hilfe der Logarithmus- und der Exponentialfunktion ein Wurzelwert berechnet wird, dann lohnt sich ein Blick auf die Rechengenauigkeit:

einige kleine Modellrechnungen:

Es wird in dem Potenz-Makro die Wurzel
Bild 35.jpg
berechnet, wobei t die Zeit in Sekunden, r die clock-Rate und b der Krümmungsgrad ist.
REAKTOR berechnet dies nach der Rechenvorschrift:
Bild 36.jpg
Setzen wir zunächst mal die ControlRate CR=400, b=-5 und t=1s (entspricht time=60) :
Bild 37.jpg
und nun ... CR=400, b=-0,1 und t=10s (time=80) :
Bild 38.jpg
Die Hüllkurve ist fast linear und endet korrekt nach 10s.
Wir vergleichen nun mit der SampleRate SR.R=44100, b=-5 und t=1s:
Bild 39.jpg
setzt man aber nun SR.R=44100, b=-0,5 , t=5s, so erhält man 0,999998; verringert man b, erhält man immer denselben Wert 0,999999 und für b=-0,1 gar 1! Mit anderen Worten: der Hüllkurvenwert verändert sich gar nicht mehr.
Woran liegt es? - an der Norm IEEE 754. Diese regelt die Umrechnung von Dezimalzahlen in Gleitkommazahlen. REAKTOR benutzt für die Potenzrechnungen die Logarithmus- und die Exponentialfunktion nur im 32bit-Format.
D.h. mit der sechsten Stelle nach dem Komma hört die Genauigkeit auf!
Mit anderen Worten, solange diese beiden Funktionen nicht auf 64-bit-Genauigkeit erhöht werden (leider noch nicht in Version R5.9.0), kann man damit nicht rechnen.
Wir testen mal mit einer ControlRate von CR=800, b=-0,1 und t=10s: 0,999991; das geht noch. Bei t=100s kommt man auch schon wieder an die Rechengrenze, bei CR=400 geht es wieder gerade. D.h. die ControlRate stellt eine „natürliche Rechengrenze” dar.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
MvKeinen
meister
Beiträge: 168
Registriert: 10. August 2006, 14:06
Wohnort: Berlin

Re: HÜLLKURVEN

Beitrag von MvKeinen »

Hmm, das ist schon schade.
ich hoffe dass sich das regelt in Zukunft.

Das Rechenmodell find ich sehr gut! Du hast das auch sehr gut erklärt.

Geogebra benutze ich jetzt auch. Bei der Lektüre von wikipedia über Gleichkommazahlen ist mir aufgefallen dass ich einiges in meinem Framework genauso gemacht habe. (Speicherung von Gleitkommazahlen in einen Integer- Speicher mittels Mantisse) Hätt ich das doch mal vorher gelesen :-)

ich werd auch mal versuchen Dein Rechenmodell in das Framework zu integrieren wenn Du nichts dagegen hast. ich denke schon länger über einen Multistepper nach dessen Steplängen temposynchronisierbar sind. In jedem Step könnte man dann "curve" start- und stopamplitude einstellen.

::kaffee::
Reaktor Befürworter
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: HÜLLKURVEN

Beitrag von herw »

MvKeinen hat geschrieben:Hmm, das ist schon schade.
ich hoffe dass sich das regelt in Zukunft.

Das Rechenmodell find ich sehr gut! Du hast das auch sehr gut erklärt.

Geogebra benutze ich jetzt auch. Bei der Lektüre von wikipedia über Gleichkommazahlen ist mir aufgefallen dass ich einiges in meinem Framework genauso gemacht habe. (Speicherung von Gleitkommazahlen in einen Integer- Speicher mittels Mantisse) Hätt ich das doch mal vorher gelesen :-)

ich werd auch mal versuchen, Dein Rechenmodell in das Framework zu integrieren wenn Du nichts dagegen hast. ich denke schon länger über einen Multistepper nach, dessen Steplängen temposynchronisierbar sind. In jedem Step könnte man dann "curve" start- und stopamplitude einstellen.

::kaffee::
ja mach mal - ich arbeite daran schon seit zwei Jahren. Das Problem ist, dass man Zeit braucht; es ist nicht mal eben an einem Wochenende erledigt. Meistens kann ich eine Woche daran arbeiten und dann ruft wieder die berufliche Pflicht so sehr, dass ich es wieder für einige Wochen auf Eis lege. Ich notiere mir zwar die meisten Ideen, aber es kostet doch immer wieder Zeit, sich einzuarbeiten; schnell ist dann wieder ein halbes Jahr vergangen.
Das gute an diesem mathematischen Modell ist, dass es eine eindeutige Abbruchbedingung für die Phase gibt. Damit kann man die Phase wechseln, wie in dem Core-ADSR von NI.
Dass man mit reduzierter Clock in einer AudioCoreCell arbeiten muss, ist nicht so ein großes Problem: man kann relativ leicht eine (sogar variable) reduzierte Clock in AudioCoreCells erstellen (kommt in einer der nächsten Posts; ich muss allerdings noch Urheberrechte abklären) und zwar so günstig wie eine von außen eingeschleuste ControlRate.
Das Problem der Rundung tritt nur auf, wenn die Krümmung sehr gering ist und die Zeitdauer sehr lang (mehr als eine Minute). Bei langen Zeitdauern kann man sich auch mit einer leichten Krümmung durchaus begnügen, wenn es unbedingt mit AudioRate getaktet werden soll. Zur reinen Steuerung von Modulationen reicht auch die ControlRate locker aus.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: HÜLLKURVEN

Beitrag von herw »

herw hat geschrieben:... Meistens kann ich eine Woche daran arbeiten und dann ruft wieder die berufliche Pflicht so sehr, dass ich es wieder für einige Wochen auf Eis lege. Ich notiere mir zwar die meisten Ideen, aber es kostet doch immer wieder Zeit, sich einzuarbeiten; schnell ist dann wieder ein halbes Jahr vergangen.
… genau in einer solchen Phase bin ich mal wieder, aber ich arbeite dran ;)
::kaffee::
Benutzeravatar
lindeman
user
Beiträge: 10
Registriert: 3. Dezember 2013, 08:35
Wohnort: Plauen

Re: HÜLLKURVEN

Beitrag von lindeman »

Hallo zusammen,

da ich mal wieder Zeit hatte, mich der digitalen Klangsynthese zu widmen, hier meine mathematische Interpretation analoger Hüllkurven,
basierend auf meinem Amateurwissen was Elektrotechnik und die Entladekurve eines Kondensators angeht. Ich glaube die alten ADSRs, welche auf einem NE556 basieren, müssten in etwas so ausschauen. Die Nichtliniarität (Krümmung) kann über den Paramerter "n" gesteuert werden... Alle Kurven sind normiert (nur verschoben der Ansicht halber, grundsätzlich aber von 0,0-1,1).

Wenn ich diese Woche noch dazu komme, dann werd ich das Ganze mal im Reaktor umsetzen, ich bin mir noch nicht ganz im Klaren darüber, wie ich die einzelnen Phasen verbinden kann... naja, wir werden sehen ;-)

Vielleicht hilfreich für den einen oder anderen, wenn auch nicht so übersichtlich und umfangreich erläutert, wie im Rest des Threads...

https://www.desmos.com/calculator/j5ixqk5ttp

Schönen Abend :-)
What one man can invent another can discover.
- Sherlock Homes
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: HÜLLKURVEN

Beitrag von herw »

lindeman hat geschrieben:Hallo zusammen,

da ich mal wieder Zeit hatte, mich der digitalen Klangsynthese zu widmen, hier meine mathematische Interpretation analoger Hüllkurven,
basierend auf meinem Amateurwissen was Elektrotechnik und die Entladekurve eines Kondensators angeht. Ich glaube die alten ADSRs, welche auf einem NE556 basieren, müssten in etwas so ausschauen. Die Nichtliniarität (Krümmung) kann über den Paramerter "n" gesteuert werden... Alle Kurven sind normiert (nur verschoben der Ansicht halber, grundsätzlich aber von 0,0-1,1).

Wenn ich diese Woche noch dazu komme, dann werd ich das Ganze mal im Reaktor umsetzen, ich bin mir noch nicht ganz im Klaren darüber, wie ich die einzelnen Phasen verbinden kann... naja, wir werden sehen ;-)

Vielleicht hilfreich für den einen oder anderen, wenn auch nicht so übersichtlich und umfangreich erläutert, wie im Rest des Threads...

https://www.desmos.com/calculator/j5ixqk5ttp

Schönen Abend :-)
Hallo lindemann,
ja die Sättigungskurven sind immer der richtige Ansatz. In REAKTOR kann man diese nur mit hohem Aufwand benutzen, da eine direkte Berechnung aus einem linearen Ablauf (wie bei einer Excel-Tabelle) unverhältnismäßig viel Rechenpower benötigt. Daher habe ich in meinem Ansatz einen iterative Berechnung gewählt; also Berechnung ausschließlich aus dem vorangehenden Wert (im Wesentlichen) durch eine Multiplikation. Dies hat auch den Vorteil, dass man für die „Anschlussphase” den letzen Wert direkt übernehmen kann. Das ist bei einer expliziten Berechnung der Funktionswerte unverhältnismäßig kompliziert.
Bei der iterativen Berechnung muss man allerdings für den Start bei 0 einen Trick verwenden.

Übrigens musst du für den Fall einer linearen Phase noch eine Sonderbehandlung einbauen.
Ich bin gespannt auf deine Lösung. Falls diese sehr viel Rechenpower benötigt, so kannst du auch eine niedrigere ClockRate (z.B. 400Hz) benutzen. Bei relativ langen Phasen reicht das aus. Sind die Phasen sehr kurz, dann muss man die ClockRate umschalten.
Leider habe ich aus diversen Gründen immer noch keine Zeit gefunden, eine komplette Lösung zu erstellen. ich glaube ich muss bis zu meiner Pensionierung warten.

ciao herw
Antworten