Operation auf Arrays (Partials Framework)

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

Moderator: herw

Antworten
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Operation auf Arrays (Partials Framework)

Beitrag von Rampensau »

Erleuchtet von Max Skripten (nun gut, von seinen Ideen zur Iteration in Core und ich habe auch bisher nur das eine Skript einige Male gelesen) und gut erholt, sollte ich die Skripte noch mal und noch viel intensiver durchgehen. Aber schon das erste Skript, was ich "durchgearbeitet" habe, hat mir regelrecht einen Schub verpasst.

Jetzt bin ich geradezu in Implementierungswut und muss mich leider auch manchmal fragen: Ist das nützlich? Wozu brauche ich das?

Bspw. habe ich ein Makro gebastelt, dass zwei Arrays faltet und das Ergebnis in einem neuen Array ablegt. Ein anderes berechnet das Betrags- und Phasenspektrum. s.u.
faltung_fourier.png
Daneben habe ich noch viele andere nützliche Operationen auf Arrays.
Aber irgenwie will mir kein konkreter Einsatzzweck einfallen. Also mir ist klar, welch Anwendung diese Techniken haben. Nur ich muss mir noch eine Herangehensweise überlegen, wie man damit was in Echtzeit anfangen kann.


Wer rumspielen mag, der kann ja mal andere Wellenformen in die Tables ("conv" bzw. "DFT", zu finden in der Event Core Cell) laden.

Grüße Benni

Edit: DIe Strukturen befinden sich noch in Testphase, sind also nicht sehr gepflegt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
herw
moderator
Beiträge: 3123
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: Operation auf Arrays (Partials Framework)

Beitrag von herw »

sieht interessant aus, muss ich mir mal in den nächsten Tagen ansehen.
Ich habe so eine Ahnung, dass du nun hier weiter machen solltest:
Clipboard 1.jpg
aber da bist du schon weiter, als ich es zur Zeit bin.

ciao herw
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Re: Operation auf Arrays (Partials Framework)

Beitrag von Rampensau »

:shock: Daran habe ich mich bisher noch gar nicht rangetraut. Ich habe mir eigentlich vorgenommen, vorher die anderen Libs kennen zu lernen, bevor ich mich an die Partials wage. An den Modulbezeichnungen kann ich bisher nur ahnen, welche Möglichkeiten diese Bibliothek liefert. Ist die ausschließlich zur Klangsynthese mit den Primary Bank-Modulen gedacht?
Ich bin ja noch relativ am Anfang in dem Bezug.

Ich stoße bisher auch noch an viele Probleme. Bspw. kämpfe ich bei der Fourier-Analyse gerade mit dem Frequenz-Zeit-Dilemma (was jetzt nicht direkt mit dem Framework zusammenhängt). :D Ich kriege aus N Abtastwerten nur N/2 Harmonische.
Und je mehr Abtastwerte zu analysieren sind, desto mehr Echtzeitfähigkeit geht verloren, wenn man dann noch dynamische Änderungen im Frequenzbereich vornehmen will.
Gut ist, die diskrete Fourieranalyse unterscheidet sich nur durch einen Faktor von der diskreten Fouriertransformation. Und von dort aus, ist es nur ein paar Optimierungen von der FFT entfernt.

Ich hab des Ehrgeizes halber mal die inverse Fourieranalyse, sprich eine Fourier-Synthese implementiert. Das Modul unterscheidet sich nicht groß von der Fourieranalyse.
Fourier Synthese.jpg
Ich glaube das Modülchen macht das Sine-Bank-Modul für mich erstmal obsolete. :twisted:
Die Arrays mit den Spektralwerten werden bis zu einem bestimmten N ausgelesen und in den Zeitbereich transformiert. Hier hab ich ein bisschen getrickst und die Eigenschaften reeller Zeitsignale angewendet. Also allgemein ist das noch nicht.
Das Array mit den neuen Datenpunkten wird ausgelesen und in eine Audio-Core-Cell transportiert. Dort werden die Datenpunkte linear interpoliert ausgeben.
Das alles soll dynamisch, also abhängig von der angeschlagenen Tonhöhe geschehen. Ich glaube für das Problem mach ich einen neuen Thread auf.
Fourier Synthese.zip
In diesem Ensemble sieht man nämlich wunderbar, wie Events der internen Computertastatur vom GUI-Thread verarbeitet werden und Events durch externe MIDI-Signale durch den Audio-Thread verarbeitet werden.
Bei MIDI-Signalen gibt es jedes Mal einen CPU-Peak. Was bei einer großen Menge an Berechnungen nicht verwundert, jedoch sicherlich irgendwie zu handlen ist.

Es leckt auch noch an anderen Stellen. Das Modul ist ja auch noch ne Baustelle. Aber eine, die schon brauchbare Ergebnisse, nämlich wunderbar aliasunterdrückte Signale liefert.
blit.jpg
Core macht mit dem Framework erst richtig Spaß!!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Re: Operation auf Arrays (Partials Framework)

Beitrag von Rampensau »

Ich hatte außerdem in dem DFA-Makro nen kleinen Fehler ausgemerzt, der im oberen Ensemble (Posting 1) noch vorhanden ist.
Und zwar ist das Argument, bzw. der Exponent bei der Berechnung der Fourierkoeffizienten negativ.
Argument.jpg
Ansonsten ist das Resultat der Fouriersynthese invertiert.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Re: Operation auf Arrays (Partials Framework)

Beitrag von Rampensau »

Meine Fourieranalyse und -synthese-Module arbeiten nun wie erwartet. Für reelle und komplexe Signale (in Arrays). Wow, ich bin erstaunt, wie genau die Reynthese ist. Sogar die Überschwinger verschwinden durch die additive Resynthese. Jetzt wage ich mich an die FFT. N^2 komplexe Flops sind mir noch ein bisschen zu viel je Transformation.
Wie soll man so eine Menge an Daten in Echtzeit verarbeiten, also pro SR-Clock?

Grüße Benni
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Re: Operation auf Arrays (Partials Framework)

Beitrag von Rampensau »

FFT.jpg
:mrgreen: Ick freu mir. Mein erster FFT-Ansatz ist nun fertig und ist schon erstaunlich schnell im Gegensatz zur naiven DFT. In dem Testgelände lässt sich die Anzahl der Harmonischen (bei 256 Samples) fließend einstellen ohne unangenehme Peaks. Mit der DFT ist das nicht der Fall. Der geneigte Leser kann ja mal die FFT-Makros mit den DFT-Makros tauschen und dann am Regler drehen.
FFT2DFT.jpg
Es ist schon eine spürbare Erleichterung für den Rechner und das Ergebnis ist faszinierend genau (Überschwinger verschwinden (?)).
FFT_test.ens
Audio ist erstmal abgekoppelt. In dem Ensemble kann man nur sehen, wie schön sich die Wellenformen aus ihren Harmonischen zusammensetzen und staunen, wie schnell man bis zu 128 Sinüsse (eigentlich 256) :mrgreen: zusammenaddieren kann. Stichwort: Additive Synthese (breitbandig ;) ).

Ja mei, das wird ein schöner runder Abschluss (vorerst) für das Oszillatorprojekt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Re: Operation auf Arrays (Partials Framework)

Beitrag von Rampensau »

ich musste noch zwanghaft mein FFT-Applet etwas pflegen. Mittlerweile werden schon 1024 Samples ganz gut mit einer radix-4-fft ausgewertet.
An der Darstellung habe ich auch etwas gepfeilt.
radix-4.jpg
Radix-4-FFT.ens
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Rampensau
meister
Beiträge: 192
Registriert: 6. Dezember 2009, 20:32

Re: Operation auf Arrays (Partials Framework)

Beitrag von Rampensau »

Ich habe gestern das Update gemacht. Von Reaktor 6 bin ich ja total begeistert. Das TF-Toolkit eignet sich ja super, um die komplexwertige Mathe elegant mit "Bordmitteln" zu implementieren. Die komplexen Operatoren scheinen in "Libary>Audio>Filter>Transfer Func>TF Toolkit" aber leider irgendwie deplatziert in der Library. Ein Cplx-Math Zweig neben den Math-Modulen ist irgendwie schöner. Aber ich mausere ja wieder nur.

Das Update finde ich sehr gelungen, was sich leider gar nicht mit meinem Stundenplan vereinbart. Alleine die überarbeitete Core-Library ist das Update Wert.
Antworten