Einleitung
Das vorgestellte Projekt implementiert die verallgemeinerte Punktquellensynthese für akustische Quellen. Der numerische Teil ist in Cython umgesetzt, parallelisiert und läuft in 2D oder 3D. Der Code wurde zur Berechnung von Schallfeldern beliebiger akustischer Quellen verwendet.
Aktuell werden folgende Geometrien unterstützt:
- Kreisförmig, eben,
- Rechteckig, ebene,
- Kugelförmig gekrümmt, kreisförmig,
- Kugelförmig gekrümmt, rechteckig.
Beispiele
Dieser Beispielabschnitt ist in drei Unterabschnitte unterteilt: “Einfach”, “Phased-Array” und “Fortgeschritten”.
Einfach
Der Abschnitt „einfach“ behandelt Einzelwandler mit verschiedenen Geometrien (rechteckig und kreisförmig) sowie gekrümmte Einzelwandler (kugelförmig gekrümmte kreisförmige und rechteckige Quellen), da diese in der Ultraschallprüfung sehr verbreitet sind.
Kreisförmige Quellen
Kreisförmige Quellen sind bei planaren Wandlern und/oder Lautsprechern sehr verbreitet. Der vollständige Beispielcode für beide Ausbreitungsebenen findet sich m Repository. Da ein Kreis symmetrisch ist, ist auch das resultierende Schallfeld symmetrisch, das heißt die Laufzeit aller Elementarwellen zum aktuellen Punkt der Berechnung ist identisch. Man könnte also aufgrund der Symmetrie auf die Berechnung der zweiten Ebene und auf des dreidimensionalen Schallfelds verzichten da die Ergebnisse für die XZ- und YZ-Ebene identisch sind.
Code und Erklärung der wichtigsten Schritte:
Zuerst müssen wir einige Parameter definieren, wie die Mittenfrequenz $f_m$ und die Schallgeschwindigkeit $c$ des Ausbreitungsmediums.
# Mittenfrequenz der Pulsquelle
fm = 250e3
c = 343
# Räumliche Auflösung (sollte mindestens ein Fünftel der Wellenlänge betragen)
ds = (c / fm) / 5
Im nächsten Schritt definieren wir den Berechnungsbereich und erstellen unser zweidimensionales Rechengitter.
X = np.arange(-20e-3, 20e-3, ds)
Y = np.arange(-20e-3, 20e-3, ds)
Z = np.arange(0, 200e-3, ds)
# Gitter erstellen
Xmesh, Zmesh = np.meshgrid(X, Z)
Ymesh = np.zeros(Xmesh.shape)
# Resultierendes Druckfeld
p = np.zeros(shape=Ymesh.shape, dtype=np.double)
Da wir eine kreisförmige Quelle modellieren möchten, können wir die integrierte Funktion BuildCircularSource verwenden, die nur den Radius und die räumliche Auflösung benötigt. Der folgende Code definiert einen Radius von 10 mm und gewichtet jedes Berechnungselement.
# Akustische Quelle erstellen
Xs, Ys, Zs = GPSS.BuildCircularSource(ds, 10e-3)
# Amplitudengewichtung
I0 = 1 / Xs.size
# Berechnung des resultierenden zweidimensionalen komplexen Feldes
Is = np.ones(Xs.shape) * I0
# Jedes Berechnungselement hat die gleiche Phasenabhängigkeit,
# was einem Feld aus Nullen entspricht.
Phs = np.zeros(Xs.shape)
Damit sind wir bereit, die Berechnung auszuführen.
# Berechnung starten
p = GPSS.run_calc_2d(Xs, Ys, Zs, Phs, fm, Xmesh, Ymesh, Zmesh, Is)

2D Schallfeld der XZ-Ebene. Z ist die X-Achse und der Abstand von der Quelle.
Rechteckige Quellen
Rechteckige Quellen unterscheiden sich darin, dass die Laufzeit der Elementarpunkte auf der Wandleroberfläche, bezogen auf einen beliebigen Fixpunkt, nicht mehr gleich sind. Oder anders ausgedrückt es einen Unterschied in der Phase existiert. Das führt wiederum zu Interferenzeffekten, die mit der Kantenlänge korreliert. Die unmittelbare Folge daraus ist die Existenz von zwei akustischen Fokus-/Brennpunkten. Das Ganze kann natürlich simuliert werden.

2D Schallfeld der XZ-Ebene. Z ist die X-Achse und der Abstand von der Quelle.

2D Schallfeld der YZ-Ebene. Z ist die X-Achse und der Abstand von der Quelle.
Kreisförmige und sphärisch gekrümmte Quellen
Vergleicht man die Ergebnisse der kreisförmigen und rechteckigen Quellen und bedient sich der Idee der Laufzeitunterschiede, so ist es möglich die Lage des akustischen Fokus-/Brennpunktes zu beeinflussen. Diese Beeinflussung kann passiv, durch Krümmung der Fläche, oder aktiv durch mehrere Wandler und eine unabhängig Ansteuerung dieser erreicht werden. Bei der passiven Methode werden dienFlächen sphärisch oder zylindrisch gekrümmt. Ein Beispiel für die sphärische Krümmung:

2D Schallfeld der XZ-Ebene. Z ist die X-Achse und der Abstand von der Quelle.
Phased-Array
„Phased-Array“ führt Wandler ein, die aus mehreren Quellen bestehen. Das Anregungssignal jedes Elements kann phasenverschoben zu seinem Nachbarelement sein. Dadurch sind Strahlschwenkung, aktive Fokussierung oder beides gleichzeitig möglich.
Fortgeschritten
“Fortgeschritten” umfasst alle weiteren Anwendungen. Da die Implementierung das Schallfeld in drei Dimensionen berechnen kann, sind auch dreidimensionale Simulationen für Probleme ohne Symmetrielösungen möglich. Zudem ist der Code in der Lage, thermo-akustische Quellen zu simulieren.