clia

Cladni Light Installation Art (CLIA)

In unserem Projekt werden Cladni'sche Klangfiguren digital simuliert und in Form einer interaktiven Light-Audio-Installation präsentiert. Dies soll eine einfache und spaßige Methode sein die Physik in ihrer Ästhetik Menschen näher zu bringen, ohne diese mit komplexen Formeln und/oder Ähnlichen zu überfordern. Im fertigen Endprodukt soll eine einfache Tastatur den Besuchern erlauben bestimmte Töne abzuspielen und simultan das simulierte Muster einer digitalen Metallplatte auf einer Leinwand projiziert zu sehen. Durch diese künstlerische, audio-visuelle Licht-Installation wird versucht bei den Besuchern das Interesse an der Physik zu wecken.

CLIA ist ein Projekt von Fuad Haddad (Physik), Johannes Pulvermüller (Maschinenbau), Maximilian Schicker (Mathematik) und Lara Wallburg (Informatik)

Ernst Florens Friedrich Chladni war ein deutscher Physiker und Astronom. Er beschrieb 1787 die nach ihm benannten Klangfiguren. Sie waren einer der ersten Ansätze Ton visuell sichtbar zu machen. Im Folgenden Abschnitt werden erstmal die physikalischen Grundlagen physischer Chladni-Figuren erklärt. Darauf folgt die notwendige Theorie und Annahmen die hier gemacht worden sind, um die Figuren Digital darstellen zu können.

Hinweis: Dieser Text versucht das Gleichgewicht zwischen wissenschaftlicher Genauigkeit und Verständlichkeit für Menschen die nicht vom Fach sind zu wahren. Um das Thema besser verstehen zu können empfehlen wir die im text verlinkten Quellen und YoutTube Videos anzuschauen. Wörter die in Bold geschrieben sind werden im Nachhinein weiter erläutert. Wenn du, geehrte/r Leeser*in diese nicht sofort verstehst so keine Angst. Lesen Dieses Textes erfolgt auf eigene Gefahr.

Die Chladni-Klangfiguren entstehen wenn Oberflächen durch mechanische Anregung zum Schwingen/Vibrieren gebracht werden. Umgangssprachlich heißt das soviel wie die Platten biegen sich (wacheln). Für Chladni-Figuren werden meist Metallplatten verwendet. Vibration der Platten bei bestimmten Frequenzen (genannt Eigenfrequenzen) erzeugen sogenannte stehende Wellen bei denen auf bestimmten Linien die Platte gar nicht schwingt. Dies lässt sich durch das streuen von Salz, Sand (o.ä.) visualisieren welches sich an den nicht schwingenden stellen sammelt. Die durch das Salz veranschaulichten Linien ergeben Muster welche von der Schwingfrequenz, den Dimensionen und den Materialeigenschaften der Platte abhängen. Siehe als Beispiel das folgende Bild1)

upload.wikimedia.org_wikipedia_commons_thumb_4_43_chladni_plate_10.jpg_640px-chladni_plate_10.jpg

Wellen sind mechanische Schwingungen die sich durch den Raum bewegen. Einfache Beispiele sind Wasserwellen und Schall. Wellen können miteinander interagieren und sich so gegenseitig verstärken oder schwächen. Dieses Phänomen wird Interferenz genannt. Stehende Wellen enstehen wen zwei Wellen mit gleicher Frequenz und Amplitude aber gegenseitiger Richtung miteinander interferieren. Dies ist zum Beispiel der Fall wenn eine eindimensionale Welle an einer Wand reflektiert. So ensteht eine kombinierte Welle die sich nicht mehr fortbewegt. Diese hat sogenannte Knotenpunkte, welche feste punkte im Raum sind an denen die Welle sich nicht schwingt das sich die einzelnen Wellen an der stelle gegenseitig permanent aufheben. Für mehr Details und Darstellungen siehe LEIFI-Physik2) und folgendes Video:

Stehende Wellen können nur enstehen wen der Abstand zwischen den beiden Quellen (bzw. der Quelle und dem reflektierenden Hinderniss) in einem bestimmten Verhältnis zueinander sind. Genauer gesagt muss dieser Abstand ein Vielfaches der Wellenlänge sein. Desto öfter die Welle „reinpasst“ desto mehr Knotenpunkte enstehen. Das wird als Mode bezeichnet (in der folgenden Skizze mit q gekennzeichnet und in der Theorie unten unten mit m,n abgekürzt).3)

Die Schwingungen in den Platten sind erstmal nichts anderes als transversale Schallwellen, welche sich durch den Körper bewegen. Diese reflektieren an den Rändern und interferieren so mit sich selbst. Es entstehen entlang beider Dimensionsachsen (X- & Y-Achse) stehende Wellen unabhängig von einander. Dadurch entstehen für verschiedene Moden bei verschiedenen Frequenzen und Plattenformen einzigartige, komplexe Muster. Im rahmen dieses Projekts wurde sich auf Quadratische Platten beschränkt.4).

i.pinimg.com_564x_95_e3_43_95e3433b7b6f2fbfed5aeaa175c5db3b.jpg

Um die Figuren zu simulieren muss zum einen eine Formel gefunden werde welche die Position der Knotenlinien für verschiedene Moden einer Platte beschreibt. Diese wird nochmal beschrieben im Abschnitt Simulation der Klangfiguren.

s(x,y) = a sin(π n x) sin(π m y) + b sin(π m x) sin(π n y)

Bei der Formel handelt es sich um eine Annäherung bei der angenommen wird, dass die Platte sehr dünn ist (Effekte der Ausdehnung in der dritten Dimension werden vernachlässigt). Sie beschreibt Amplitude der aus den interferierenden Wellen zusammengesetzten Welle in Abhängigkeit des Ortes auf der Platte. Sie beschreibt aber nicht welche Moden bei welchen Frequenzen auftauchen. Auch nicht wo die Eigenfrequenzen der Platten bei bestimmten Längen und Materialeigenschaften liegen.

Um zunächst die Eigenfrequenzen einer Platte mit bestimmten Eigenschaften zu bestimmen wurde folgende Formel im Lehrbuch „Principles of Vibration and Sound“ auf der Seite 67 verwendet5). (Keine Ahnung wie man hier Formeln einfügt.) In der Formel, welche im Buch ausführlich (sehr ausführlich) hergeleitet wird, stellt man fest dass die Geschwindigkeit des transversalen Teils der Schallwelle berechnet werden muss welche von der Oberflächenspannung und der Oberflächendichte Abhängt. Beides sind Literaturwerte für Materialien die gefunden werden können (Hoffe ich erinnere mich die Quelle/n hier noch einzufügen). Die Geschwindigkeit muss berechnet werden und sollte nicht mit der normalen (longitudinalen) Schallgeschwindigkeit der Druckwellen verwechselt werden. Mithilfe der Formel können dann für verschiedene Materialien und Seitenlängen einer quadratischen Platte die zu den Schwingungsmoden m,n zugehörigen Eigenfrequenzen ermittelt werden.

  1. Ermittlung der Notwendigen Formeln, der möglichen Kombinationen von Eigenfrequenzen, Moden, Plattenseitenlänge und Materialien (z.B. Aluminium, Gold, Stahlt, …)
  2. Simulation der Werte
  3. Auswahl von ca 16 Kombination (hierbei wurde erst versucht Frequenzen auszusuchen welche auf der natürlichen Tonleiter liegen. Dies War aber für ein und dieselbe Platte (gleich Seitenlänge und gleiches Material) nicht möglich. Außerdem waren dir Werte der Moden so Hoch, dass die Dazugehörigen Muster zu fein wurden und wir uns dachten dass dies im Endprodukt nicht mehr gut erkennbar sein würde. Die besten Aussichten hatte eine 10cmx10cm Aluminium Platte.
  4. Ein Korg nanoPAD2 6) wurde auf Empfehlung bestellt und soll als Tastatur dienen
  5. Die Tasten werden mit einem Laptop an dem wiederum ein Projektor angeschlossen ist und werden so programmiert, dass je Taste eine Frequenz-Moden-Kombination simuliert und projeziert wird und gleichzeitig der zugehörige Ton der Frequenz über einen Lautsprecher abgespielt.
  6. Das ganze Setup wird in einer Kiste verpackt (muss schick sein) so dass Besucher nur die tasten sehen und bedienen können.

Da wir die chladnischen Klangfiguren digital samt Übergängen darstellen wollen, ist es notwendig ein Programm zu schreiben, dass dies tut. Unsere Anforderung an das Programm war, dass die Übergänge zwischen den verschiedenen Figuren so nah an der Realität wie möglich sind. Aus diesem Grund haben wir uns für eine Partikelsimulation entschieden, wo jeder Partikel sozusagen einem Sandkorn entspricht. Die einzelnen Partikel haben keine Kollisionen untereinander, da dies das Programm sehr viel langsamer machen würde.

Die Differenzialgleichungen, um eine Chladni-Platte korrekt zu simulieren, gehören zwar mittlerweile zum Allgemeingut von Wikipedia 7), sind jedoch immer noch recht kompliziert und würden den Rahmen dieses Teil des Projektes sprengen. Glücklicherweise gibt es viele Menschen, die sich mit diesem physikalischen Expermiment und den zugehörigen Differenzialgleichungen befasst haben. Einer dieser Menschen hat netterweise die Lösungen dieser Differenzialgleichungen für den Fall, dass die Platte unendlich dünn ist, auf einer Webseite gepostet 8). Im Nachfolgenden verwenden wir die Lösung, die dort zur Verfügung gestellt wird. Der Sand einer Chladni-Platte sammelt sich in Bereichen, wo die Platte nicht schwingt. Diese Bereiche werden durch die Nullstellen der Funktion s(x,y) = a sin(π n x) sin(π m y) + b sin(π m x) sin(π n y).

Nun sollen sich alle Partikel irgendwie zu denn Nullstellen bewegen. Das ist das gleiche wie eine Nullstellenberechnung mit beliebigen Startpunkt. Hierfür würde sich zum Beispiel das Newton-Verfahren anbieten. Leider würden die einzelnen Partikel dann aber recht wild springen und wahrscheinlich nicht zur nächstgelegenen Nullstelle konvergieren. Ein besserer Kandidat ist das Gradientenverfahren, da wir dort die Schrittweite sehr einfach kontrollieren können. Das Gradientenverfahren findet aber ein Minimum. Die Minima unserer Funktion sind jedoch nicht die Nullstellen. Das können wir aber durch Quadrierung der Funktion ganz schnell ändern.

Der nächste Schritt ist nun also den Gradienten der Funktion s' = s^2 zu bestimmen. Wolfram-Alpha ist hierbei eine große Hilfe und gibt uns direkt das gewünschte Ergebnis aus.

Betrachten wir nun einen Partikel, so wird dieser an einem zufälligen Punkt starten. Berechnen wir dann den Gradienten an diesem Punkt, so erhalten wir die Richtung des größten Anstiegs der Funktion. Ziehen wir diesen Vektor nun (mit einem gut gewählten Skalierungsfaktor) von der aktuellen Position ab. Es ist wohl bekannt, dass wir mit diesem Verfahren (mit richtig gewählten Parametern) nach und nach an einem Minimum und in unserem Fall an einer Nullstelle angelangen. Unser Ziel ist es nun, dieses simple Verfahren für viele Partikel gleichzeitig auszuführen, um die Übergänge der Muster zu simulieren.

Mithilfe von Angaben eines Aufgabenblattes 9) des Klett-Verlags können wir berechnen, dass man in einem studierendenüblichen Shotglas (4 cl) bereits ungefähr 100 000 Sandkörner unterbringen kann. Wenn man diese Menge an Sandkörnern nun auf eine große (1 x 1 m) Chladni-Platte verteilt, so wird man wahrscheinlich schon schöne Muster erkennen können. Der Unterschied zur Simulation ist hier jedoch (unter vielen anderen), dass Sandkörner in der echten Welt kollidieren und somit nicht am selben Ort sein können. Um also dennoch schöne Muster in der Simulation zu erhalten, müssen wir deutlich mehr Sandkörner simulieren. Wir haben uns für 1024 x 1024 entschieden (also ca 10 studierendenübliche Shotgläser).

Die Frage ist nun, wie man ca 1 000 000 Partikel gleichzeitig in Echtzeit simuliert. Auf einer CPU wäre dies wohl schwierig, da diese zwar sehr komplizierte Operationen ausführen kann, dafür aber nur verhältnismäßig wenige dieser. Die Lösung hierbei ist GPU-Computing (also das Rechnen auf einer Grafikkarte). Grafikkarten sind dafür optimiert, sehr viele einfache Operation parallel auszuführen - also genau das, was wir für dieses Projekt brauchen. Tatsächlich hat es auch einen Namen, die Grafikkarte zur Berechnung von Dingen zu verwenden, die nichts mit der Darstellung auf einem Bildschirm zu tun haben: GPGPU (General Purpose GPU).

Versuch 1 - GPGPU durch NVIDIA Warp

Zunächst mussten wir ausprobieren, ob die ganze Theorie überhaupt funktioniert und ob das Projekt realistisch ist. Dafür eignet sich eine einfach Python-Implementierung sehr gut. Glücklicherweise stellt NVIDIA eine Library 10) bereit, mit der es sehr einfach ist über Python auf die Grafikkarte zuzugreifen. Ein erster Test hat gezeigt, das unsere Ansätze korrekt sind und gut funktionieren. Die Darstellung der Partikel hat an dieser Stelle noch matplotlib übernommen, wobei dies ein großen Bottleneck darstellte, das diese Library nicht für diesen Anwendungsfall gedacht ist.  Erste Animation (Durch Klicken bei der Quelle sichtbar) Die Zeit, um alle Partikel einen Schritt weiter zu setzen war sehr gering (< 0.1 ms). Leider konnte matplotlib da nicht mithalten und hat für das updaten der daten ca 10 ms und für die Darstellung dessen bedeutend länger gebraucht, sodass eine flüssige Echtzeitsimulation mit dieser Methode nicht möglich war.

Versuch 2 - Shader

Shader sind eine wunderbare Möglichkeit, auf die GPU zuzugreifen. Genauer haben wir uns hier mit einem Fragment-Shader beschäftigt. Mit so einem Shader kann man angeben, was für jeden Pixel auf dem Bildschirm dargestellt wird. Hierbei hat man aber keinen Zugriff auf die Berechnung der anderen Pixel, da alle parallel ausgeführt werden können sollen und Mutual Exclusion diesen Prozess deutlich verlangsamen würde. Wir haben also einen Shader 11) geschreiben, der eine Chladni-Platte mit Sand simuliert. Die Art der Simulation hat jedoch einen großen Nachteil. Wenn mehrere Partikel in einer Iteration zum gleichen Pixel wollen, so werden alle bis auf einen ausgelöscht. Dies führt dazu, dass man immer neue Partikel erschaffen muss, was die Simulation im Endeffekt etwas unschöner erscheinen lässt. Zudem wird die Simulation nicht quadratisch dargestellt, obwohl die Platte in Theorie quadratisch ist.

Das Endprodukt dieses Exkurses hat jedoch einen Lichtblick gegeben. Viele Partikel konnten problemlos in Echtzeit und mit hoher Framerate simuliert werden. Das Problem war nun, dass wir MIDI-Keyboard Inputs einbinden wollten. An sich ist es kein Problem, die Variablen des Shaders zur Laufzeit von Außen zu verändern, leider biete die Seite Sahdertoy keine gute Möglichkeit für Keyboard oder MIDI-Inputs. Dies führe dazu, dass wir uns mit WebGL befasst haben nach dem Motto: „Wenn Sahdertoy im Browser läuft, muss man es ja auch irgendwie selbst schaffen, was im Browser laufen zu lassen.“

Versuch 3 - Das WebGL Abenteuer

Es gibt überraschend viele Menschen, die auf die Idee kommen, sich in Ihrer Freizeit mit WebGL zu beschäftigen. Das führt dazu, dass sehr gute Tutorial Seiten entstehen, wie WebGL2 Fundamentals 12). WebGL2 ist deutlich mächtiger als in diesem Projekt benötigt, aber auch die einfachste Möglichkeit, lokal einen Shader gut zum laufen zu bringen. Eigentlich war der Plan, den Shader aus Versuch 2 irgendwie lokal auszuführen und fertig zu sein. Jedoch gibt es auf der genannten Tutorial-Seite ein Beispiel für GPGPU Partikel 13), als könne der Autor unsere Gedanken lesen. Mit etwas Fantasie war das Projekt nun also schon fertig. Nach ein paar Stunden Copy-Pasten, googlen und sich in WebGL2 einlesen, hatten wir eine laufende Partikelsimulation, für die Sandkörner auf einer Chladni-Platte, wobei sich die einzelnen Partikel nicht gegenseitig ausgelöscht haben.

Tatsächlich hatten wir alles zunächst in WebGL implementiert (genauer WebGL1). Jedoch ist uns dann, als wir fast fertig waren, aufgefallen, dass WebGL2 deutlich bessere Features bietet. Zum Beispiel ist man bei der Array-Größe nicht gebunden durch die Größen von Texturen. Des Weiteren ist es möglich Bilder als Texturen zu verwenden, die als Pixelmaße keine Zweierpotenzen sind. Auch ist unser Problem in WebGL2 etwas effizienter berechnenbar, da man bestimmte Features bei Bedarf ein- und ausschalten kann. Wir ersparen dem Leser hier nun weitere Details und verweisen noch einmal auf die oben genannte Turtorial-Seite und präsentieren stattdessen ein fast konvergiertes Chladni-Muster mit Venedig als Hintergrundbild.

Da die Implementierung nun in JavaScript ist, konnten wir auch recht einfach ein paar Spielereien einbauen, die in der nächsten Sektion beschrieben werden.

Die Interaktion mit der oben beschriebenen Simulation wird mit einem MIDI-Controller geregelt. Der MIDI-Controller hat 16 Haupttasten, die wir verwenden wollen. Auf jede dieser Tasten mappen wir eine Mode. Nun kann der Nutzer also eine Taste drücken und die entsprechende Mode wird angezeigt. Das ist alles dadurch möglich, dass JavaScript sehr einfach auf die Inputs des MIDI-Controllers zugreifen kann und während der Laufzeit die Variablen für die GPU-Berechnungen ändern kann. Weiterhin ist es möglich, die Maus zu tracken und entsprechend Partikel in der Nähe der Maus mittels einer zweidimensionalen Gauß-Funktion zu verschieben.

Neben der Software als Herzstück unseres Projekts, haben wir uns mit Präsentation und physischem Aufbau auseinandergesetzt. Mit dem Ziel vor Augen, unsere digitale Chladni-Platte bei der SciCom-Abschlussaustellung möglichst eindrucksvoll zu zeigen, haben wir uns früh dafür entschieden, dafür einen Beamer zu verwenden. Als Steuerelement für die interaktive Auswahl verschiedener Frequenzen verwenden wir einen simplen MIDI-Controller mit sechzehn Buttons. Sowohl Controller als auch Beamer sind mit einem Laptop verbunden, auf dem unsere Software läuft und der das errechnete Bild ausgibt.

Um Laptop und Beamer vor Diebstahl oder Beschädigung zu schützen sowie unsere Technik aus ästhetischen Gründen zu verstauen, verwenden wir ein selbstgebautes Holzschränkchen. Zunächst haben wir einen Prototypen aus Pappe erstellt, bevor wir die eigentliche Kiste aus stabilem Multiplexholz gefertigt haben.

Unser Prototyp aus Pappe

Dabei haben wir eine der sechs Seiten vorerst offen gelassen. An dieser Seite haben wir eine Tür installiert, indem wir ein Holzbrett auf einer Seite mit zwei Scharnieren und auf der anderem mit einem Sicherheitsschloss versehen haben. Mit einem Kreisbohrer haben wir im Anschluss an das Zusammenschrauben der Platten drei Löcher in die Kiste gebohrt: Zwei Löcher sind für die Kabeldurchführung vorgesehen, während das dritte Loch den Ausgang für das Beamerlicht darstellt.

img_20231005_144942.jpg

Da wir für die Kiste unterschiedlich gefärbtes Holz verwendet haben, haben wir sie zum Schluss einheitlich in Schwarz lackiert. Am Boden der Kiste ist Platz für einen Laptop. Der Beamer wird auf einem Holzbrett platziert, was wir über dem Laptop wie ein Regalbrett angeschraubt haben. Als einziges zugängliches Teil ist der Controller, zusammen mit einer knappen Anleitung, außen auf der Box befestigt.


  • clia.txt
  • Zuletzt geändert: 2023/10/13 12:45
  • von napa