Operation auf Arrays (Partials Framework)

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

Moderator: herw

Operation auf Arrays (Partials Framework)

Beitragvon Rampensau » Di 7. Aug 2012, 10:20

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
faltung_fourier.png (8 KiB) 3307-mal betrachtet


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.
Dateianhänge
waveforms_64dp.zip
(2.38 KiB) 173-mal heruntergeladen
Ensembles.zip
(87.93 KiB) 179-mal heruntergeladen
Benutzeravatar
Rampensau
meister
 
Beiträge: 192
Registriert: So 6. Dez 2009, 21:32

Re: Operation auf Arrays (Partials Framework)

Beitragvon herw » Di 7. Aug 2012, 14:47

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
Clipboard 1.jpg (76.8 KiB) 3300-mal betrachtet

aber da bist du schon weiter, als ich es zur Zeit bin.

ciao herw
Benutzeravatar
herw
moderator
 
Beiträge: 3043
Registriert: Mo 13. Mär 2006, 19:28
Wohnort: Dortmund

Re: Operation auf Arrays (Partials Framework)

Beitragvon Rampensau » Mi 8. Aug 2012, 19:44

: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
Fourier Synthese.jpg (20.25 KiB) 3293-mal betrachtet

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
(74.53 KiB) 177-mal heruntergeladen


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
blit.jpg (62.43 KiB) 3293-mal betrachtet


Core macht mit dem Framework erst richtig Spaß!!
Benutzeravatar
Rampensau
meister
 
Beiträge: 192
Registriert: So 6. Dez 2009, 21:32

Re: Operation auf Arrays (Partials Framework)

Beitragvon Rampensau » Mi 8. Aug 2012, 20:01

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
Argument.jpg (26.74 KiB) 3292-mal betrachtet

Ansonsten ist das Resultat der Fouriersynthese invertiert.
Benutzeravatar
Rampensau
meister
 
Beiträge: 192
Registriert: So 6. Dez 2009, 21:32

Re: Operation auf Arrays (Partials Framework)

Beitragvon Rampensau » Fr 10. Aug 2012, 12:24

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: So 6. Dez 2009, 21:32

Re: Operation auf Arrays (Partials Framework)

Beitragvon Rampensau » Mi 15. Aug 2012, 15:46

FFT.jpg
FFT.jpg (12.55 KiB) 3267-mal betrachtet

: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
FFT2DFT.jpg (30.1 KiB) 3267-mal betrachtet

Es ist schon eine spürbare Erleichterung für den Rechner und das Ergebnis ist faszinierend genau (Überschwinger verschwinden (?)).

FFT_test.ens
(657.15 KiB) 187-mal heruntergeladen

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.
Benutzeravatar
Rampensau
meister
 
Beiträge: 192
Registriert: So 6. Dez 2009, 21:32

Re: Operation auf Arrays (Partials Framework)

Beitragvon Rampensau » Sa 25. Aug 2012, 23:23

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.jpg (16.68 KiB) 3239-mal betrachtet

Radix-4-FFT.ens
(713.82 KiB) 200-mal heruntergeladen
Benutzeravatar
Rampensau
meister
 
Beiträge: 192
Registriert: So 6. Dez 2009, 21:32

Re: Operation auf Arrays (Partials Framework)

Beitragvon Rampensau » Sa 31. Okt 2015, 13:24

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.
Benutzeravatar
Rampensau
meister
 
Beiträge: 192
Registriert: So 6. Dez 2009, 21:32


Zurück zu REAKTOR (kreativ)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron