rkv
08.05.2022, 20:19
Guten Abend,
seit gefühlt mehreren Jahren versuche ich, Waveguides mit ABEC zu designen, aber irgendwie verliere ich nach einer Weile die Lust, weil mir dieses try&error einfach zu blöd ist.
Nun, wenn einem eine Arbeit zu blöd ist, sollte man sie wie im echten Leben nach Möglichkeit outsourcen. Am besten an jemanden, der darüber nicht klagt, und wer klagt grundsätzlich nicht? Richtig, ein Computer.
Ich weiss, dass 3eepoint an so einer Lösung arbeitet. Seine Lösung hat aus meiner Sicht aber ein paar entscheidene Nachteile: Es sind mind. 3 Programme involviert, eines davon ist Comsol. Letzteres habe ich nicht und kann ich mir auch nicht leisten.
Als digitaler Signalverarbeiter ist hingegen Matlab quasi Bestandteil der DNA. Und für Privatanwender auch durchaus günstig zu erwerben. Also dachte ich mir, vielleicht geht da ja was. Gut, es gibt einige BEM Toolboxen, mit denen ich einen Waveguide simulieren kann. Allerdings habe ich keine gefunden, die den Fall Waveguide in unendlicher Schallwand simulieren kann. Das könnte ich noch hinfummeln, aber Matlab hat einen weiteren großen Nachteil: Es ist schnarchlangsam. Wenn ich davon ausgehen, dass ein Optimierungsproblem mehrere Iterationen benötigt, ist Rechengeschwindigkeit schon ein Thema. Was also tun?
Matlab bietet die Möglichkeit, C++-Code zu kompilieren und einzubinden. Das ist die Lösung. Also flucks eine eigene BEM-Bibliothek geschrieben, denn partielle Differentialgleichungen, Nabla-Operatoren, Helmholtz-Integrale und diskrete Lösungen wurde alles an der Uni ins Hirn geimpft. Schnell noch die Bibliothek auf Multithreading getrimmt und los kann's gehen.
Hier nun ein erstes sinnvolles Ergebnis:
66192
Die Aufgabe war, eine 19mm-Kalotte mit willkürlich vorgegeben Waveguide-Profil möglichst gut auf Constant-Directivity hin zu optimieren. Das Profil war durch eine Bezier-Kurve vorgegeben und produzierte ein furchtbares Ergebnis. Mein Algorithmus kann wahlweise entweder die Kurvenparameter oder die Punkte des Netzwerks optimieren.
Für das gezeigte Ergebnis hat mein Mac-mini (noch die alte Kiste, also die letzte Generation mit Intel-CPUs) für 10000 Iterationen 1,5 Stunden gebraucht. Die Darstellung habe ich zur besseren Darstellung auf 0° normiert und in 3dB-Konturen dargestellt. Natürlich habe ich das mit ABEC verifiziert.
Spannend wird es nun, wenn ich den Rechner mal eine ganze Nacht durchrechnen lassen.
Am Ende dient Matlab jetzt nur noch als komfortables Anzeigetool. Wenn ich das z.B. durch gnuplot ersetze, wäre ich ganz unabhängig, dazu verspüre ich aber nicht viel Motivation, denn Matlab habe ich ja, warum also mit gnuplot rumschlagen?
Meine Optimierung arbeitet derzeit noch rotationssymmetrisch. Der nächste Schritt wäre jetzt echt 3D, um z.B. auch rechteckige Hörner zu optimieren. Den C++-Code dafür gibt es schon, das Drumherum fehlt halt noch.
Genauso spannend wäre es nun, die Optimierung mit z.B. einem genetischen Algorithmus zu probieren und mit unterschiedlichen Geometrieen (Bezier, Biradial, DXT) zu starten und Kreuzungen daraus zu erzeugen. Hier ist der Ansatz über Matlab natürlich praktisch, da es viele dieser Optimierungsprobleme schon als Toolbox gibt und es somit an einem Sonntagnachmittag schnell programmiert ist. Mal sehen, was die Zukunft bringt.
Wenn es hier dazu Interesse gibt, halte ich Euch auf dem Laufenden.
Raphael
seit gefühlt mehreren Jahren versuche ich, Waveguides mit ABEC zu designen, aber irgendwie verliere ich nach einer Weile die Lust, weil mir dieses try&error einfach zu blöd ist.
Nun, wenn einem eine Arbeit zu blöd ist, sollte man sie wie im echten Leben nach Möglichkeit outsourcen. Am besten an jemanden, der darüber nicht klagt, und wer klagt grundsätzlich nicht? Richtig, ein Computer.
Ich weiss, dass 3eepoint an so einer Lösung arbeitet. Seine Lösung hat aus meiner Sicht aber ein paar entscheidene Nachteile: Es sind mind. 3 Programme involviert, eines davon ist Comsol. Letzteres habe ich nicht und kann ich mir auch nicht leisten.
Als digitaler Signalverarbeiter ist hingegen Matlab quasi Bestandteil der DNA. Und für Privatanwender auch durchaus günstig zu erwerben. Also dachte ich mir, vielleicht geht da ja was. Gut, es gibt einige BEM Toolboxen, mit denen ich einen Waveguide simulieren kann. Allerdings habe ich keine gefunden, die den Fall Waveguide in unendlicher Schallwand simulieren kann. Das könnte ich noch hinfummeln, aber Matlab hat einen weiteren großen Nachteil: Es ist schnarchlangsam. Wenn ich davon ausgehen, dass ein Optimierungsproblem mehrere Iterationen benötigt, ist Rechengeschwindigkeit schon ein Thema. Was also tun?
Matlab bietet die Möglichkeit, C++-Code zu kompilieren und einzubinden. Das ist die Lösung. Also flucks eine eigene BEM-Bibliothek geschrieben, denn partielle Differentialgleichungen, Nabla-Operatoren, Helmholtz-Integrale und diskrete Lösungen wurde alles an der Uni ins Hirn geimpft. Schnell noch die Bibliothek auf Multithreading getrimmt und los kann's gehen.
Hier nun ein erstes sinnvolles Ergebnis:
66192
Die Aufgabe war, eine 19mm-Kalotte mit willkürlich vorgegeben Waveguide-Profil möglichst gut auf Constant-Directivity hin zu optimieren. Das Profil war durch eine Bezier-Kurve vorgegeben und produzierte ein furchtbares Ergebnis. Mein Algorithmus kann wahlweise entweder die Kurvenparameter oder die Punkte des Netzwerks optimieren.
Für das gezeigte Ergebnis hat mein Mac-mini (noch die alte Kiste, also die letzte Generation mit Intel-CPUs) für 10000 Iterationen 1,5 Stunden gebraucht. Die Darstellung habe ich zur besseren Darstellung auf 0° normiert und in 3dB-Konturen dargestellt. Natürlich habe ich das mit ABEC verifiziert.
Spannend wird es nun, wenn ich den Rechner mal eine ganze Nacht durchrechnen lassen.
Am Ende dient Matlab jetzt nur noch als komfortables Anzeigetool. Wenn ich das z.B. durch gnuplot ersetze, wäre ich ganz unabhängig, dazu verspüre ich aber nicht viel Motivation, denn Matlab habe ich ja, warum also mit gnuplot rumschlagen?
Meine Optimierung arbeitet derzeit noch rotationssymmetrisch. Der nächste Schritt wäre jetzt echt 3D, um z.B. auch rechteckige Hörner zu optimieren. Den C++-Code dafür gibt es schon, das Drumherum fehlt halt noch.
Genauso spannend wäre es nun, die Optimierung mit z.B. einem genetischen Algorithmus zu probieren und mit unterschiedlichen Geometrieen (Bezier, Biradial, DXT) zu starten und Kreuzungen daraus zu erzeugen. Hier ist der Ansatz über Matlab natürlich praktisch, da es viele dieser Optimierungsprobleme schon als Toolbox gibt und es somit an einem Sonntagnachmittag schnell programmiert ist. Mal sehen, was die Zukunft bringt.
Wenn es hier dazu Interesse gibt, halte ich Euch auf dem Laufenden.
Raphael