Georadar (Funktechnisches Gerät für Untergrundsonden, GPR, Ground Penetrating Radar), das derzeit sehr häufig eingesetzt wird - von der
Kartierung von Kaninchenlöchern und dem
Studium von Eidechsen bis zur
Suche nach Minen - ist nach wie vor ein ziemlich teures Vergnügen.
GPR-Display (Frame aus der britischen TV-Show "Command of the Time")
Es ist jedoch möglich, seine Fähigkeiten zu bewerten und verschiedene Aspekte der Wechselwirkung des elektromagnetischen Feldes des Georadars mit der Umwelt zu untersuchen, ohne ein „Eisen“ -Gerät zu erwerben oder zu mieten. Das unter der GNU GPL v3-Lizenz vertriebene
gprMax- Paket (
gpr - aus der GPR-Abkürzung,
Max - die Anfangsbuchstaben des Namens von James Clerk Maxwell, der die Grundlagen der Elektrodynamik legte) wird uns dabei helfen.
Die Autoren dieses 1996 begonnenen Projekts sind Craig Warren von der University of Northumbria und Antonis Giannopoulos von der University of Edinburgh. Das Paket wurde ursprünglich in C entwickelt und dann in Python 3 / Cython-Kombinationen vollständig neu geschrieben.
Für die Installation des Pakets sind installierte Compiler erforderlich, die OpenMP (Microsoft Visual C ++ 2015 Build Tools (diese Version wird empfohlen!) Für Windows / gcc für Linux), die NumPy-Bibliothek und den Cython-Compiler unterstützen. Wechseln Sie nach dem Herunterladen aus dem
Repository auf GitHub und dem Entpacken des Quellcodes des Projekts in den Stammordner und führen Sie die folgenden Befehle aus:
python setup.py build python setup.py install
Als „Schnellstart“ betrachten wir die Arbeit mit dem Paket anhand eines einfachen zweidimensionalen Beispiels: Die Sendeantenne T eines gepulsten Radars (Impuls GPR) sendet einen elektromagnetischen Impuls aus, von dem ein Teil der Energie direkt die Empfangsantenne R in Form einer direkten Welle (DW - direct wave) erreicht und teilweise durchdringt Durch den Sand wird es von der Oberfläche des leitenden Zylinders reflektiert und erreicht die Empfangsantenne in Form einer reflektierten Welle (RW - Reflected Wave):
EingabedateiformatErstellen Sie den Ordner
models im Stammverzeichnis des Projekts, in dem die Textdatei
hello.in mit den Befehlen zur Durchführung der Simulation
abgelegt ist (die folgenden Befehle entsprechen der aktuellen (dritten) Version des Projekts).
Jedes Team hat die Form:
In eine Zeile kann nur ein Befehl geschrieben werden, und das erste Zeichen der Zeile, die den Befehl enthält, muss # sein.
Befehle können mit Kommentaren versehen werden:
Die Reihenfolge der Befehle ist wichtig für die Befehle zum Erstellen von Objekten. Diese Befehle werden in der Reihenfolge ausgeführt, in der sie in der Eingabedatei angezeigt werden.
PulsformEin von einem Georadar ausgesandter elektromagnetischer Impuls dauert einige Bruchteile einer Nanosekunde. Außerdem werden am häufigsten drei Impulsformen verwendet:

- eine Sinuswellenperiode (Sinus)
- Gaußscher Impuls
- Der mexikanische Hut (Ricker) ist proportional zur zweiten Ableitung der Gaußschen Funktion, die Kurvenform eines solchen Impulses ähnelt einem Sombrero (diese Impulsform wurde vom amerikanischen Geophysiker Norman Ricker 1953 zur Untersuchung seismischer Signale verwendet).
In unserem Beispiel wählen wir einen Gauß-Impuls (Impulstyp - Gauß) mit einer Mittenfrequenz
f c = 1G H z = 1 c d o t 10 9 H z definiert durch den Befehl:
(1 - bedingte Pulsamplitude, Puls - Pulsbezeichnung)
In diesem Fall wird der in der Simulation verwendete Impuls durch den folgenden Ausdruck beschrieben:
W (t) = e ^ {- 2 \ cdot {\ pi} ^ 2 \ cdot {f_c} ^ 2 {(t- {1 \ over {f_c}}) ^ 2}
W (t) = e ^ {- 2 \ cdot {\ pi} ^ 2 \ cdot {f_c} ^ 2 {(t- {1 \ over {f_c}}) ^ 2}
Umgebungsmodell und KoordinatensystemBei der 2D - Modellierung wird der untersuchte Bereich in Zellen einer bestimmten Größe unterteilt, und das Modellkoordinatensystem sieht folgendermaßen aus: Die X - und Y - Achsen bilden eine berechnete Ebene (mit einer Breite)
w und groß
h ) hat die Länge des Modells entlang der Z-Achse einen Wert, der dem Abtastschritt entspricht
D e l t a .
Bei der Auswahl eines Abtastschritts können Sie der Faustregel folgen: Die Schrittgröße sollte ein Zehntel der kleinsten im Modell untersuchten Wellenlänge („10 Zellen pro Wellenlänge“) nicht überschreiten:
D e l t ein l e 0 , 1 c d o t l a m b d ein m i n
Um die Wellenlänge zu bestimmen, muss man die maximale Frequenz kennen, die in dem Spektrum des ausgesandten Signals und der Wellengeschwindigkeit in dem betrachteten Medium berücksichtigt wird.
Die Ausbreitungsgeschwindigkeit einer elektromagnetischen Welle in einem Medium mit relativer Dielektrizitätskonstante
e p s i l o n r ausgedrückt in Zentimetern pro Nanosekunde - die Geschwindigkeitseinheit, die im Radar angenommen wird, wird durch den Ausdruck bestimmt:
v=30 over sqrt epsilonr
Die Wellenlänge in Zentimetern wird durch den Ausdruck bestimmt:
lambda=v overf
(
f - Frequenz in GHz).
Mit dem folgenden Befehl können Sie die Form des Gaußschen Impulses und sein Spektrum anzeigen:
python -m tools.plot_source_wave gaussian 1 1e9 5e-9 1e-12 -fft
(Gauß - Impulstyp, 1 - Impulsamplitude, 1e9 - Mittenfrequenz (1 GHz), 5e-9 - Impulsanzeigedauer (5 ns), 1e-12 - Zeitschritt (1 ps))
Nach dem Spektrum eines Gaußschen Impulses mit
fs=1 GHz Bestimmen Sie, dass bei -40 dB die Frequenz
f ca.3 GHz .
In diesem Beispiel, dem Medium, in dem sich das untersuchte Objekt befindet, wird trockener Sand mit einer relativen Permittivität ausgewählt
epsilonr=3 .
Ermitteln Sie die Ausbreitungsgeschwindigkeit der elektromagnetischen Welle im Sand:
v=30 over sqrt3=17,3 cm/ns
Definieren Sie die Wellenlänge im Sand:
lambda=v overf=17,3 over3=5,8cm=58mm
Darauf aufbauend wählen wir den für alle Achsen gleichen Schritt aus (
Delta= Deltax= Deltay= Deltaz ) und aus praktischen Gründen gleich 2 mm = 0,002 m (eine ganzzahlige Anzahl von Schritten passt in 1 cm):
Begrenzen Sie den simulierten Bereich auf ein Rechteck mit einer Breite
w gleich 80 cm = 0,8 m und höhe
h gleich 60 cm = 0,6 m:
(Für ein zweidimensionales Modell muss eine Dicke angegeben werden, die einer Stufe entspricht (0,002).)
Die Größe des Simulationsbereichs und die räumliche Schrittgröße bestimmen die Anzahl der Modellzellen und dementsprechend den Speicherbedarf des Computers.
Wir beschreiben den Sand mit spezifischer Leitfähigkeit
sigma=0,01 cm/m und relative Dielektrizitätskonstante
epsilonr=3 befehl:
(1 entspricht der relativen magnetischen Permeabilität
mur gleich eins (keine magnetischen Eigenschaften), 0 - kein magnetischer Verlust, und
Sandetikett dieses Materials).
Füllen Sie den Sand mit dem größten Teil der simulierten Fläche (von y = 0 bis y = 38 cm = 0,38 m):
(0 0 0 - Koordinaten der unteren linken Ecke, 0,80 0,38 0,002 - Koordinaten der oberen rechten Ecke (0,002 - Abtastschritt))
Der Rest ist freier Raum (Bezeichnung free_space), der in den Lufteigenschaften fast gleichwertig ist (
epsilonr=1 ,
mur=1 ,
s i g m a = 0 )
Die Grenzen des Simulationsbereichs werden als Absorbing Boundary Condition (ABC) dargestellt.
Als Ziel wählen wir einen Zylinder aus einem idealen Leiter (der elektromagnetische Strahlung vollständig reflektiert) mit einem Radius von 6 cm = 0,06 m und einem Mittelpunkt an einem Punkt mit den Koordinaten x = 25 cm = 0,25 m und y = 10 cm = 0,1 m:
(Pec ist ein perfekt leitfähiges Material)
AntennenDer simulierte GPR ist mit zwei Antennen ausgestattet - Senden und Empfangen.
In unserer Fallstudie stellen wir eine Sendeantenne mit einem Hertz-Dipol dar, dessen Länge dem Abtastschritt entspricht (im dreidimensionalen Fall können Sie eine Antenne aus einer umfangreichen Bibliothek auswählen), die im Sand (in Kontakt mit dem untersuchten Medium) in einem Abstand von 5 cm links von der Mitte des Bereichs liegt (x = 35) cm = 0,35 m, y = 38 cm = 0,38 m):
(z ist die Dipolpolarisationsachse (für den zweidimensionalen Fall (2D-TMz-Modus) ist nur z gültig), Puls ist die Bezeichnung für die Form des von der Antenne ausgestrahlten Pulses.)
Die Empfangsantenne befindet sich normalerweise in einem geringen konstanten Abstand von der Empfangsantenne, die als Basis der Antenneneinheit bezeichnet wird (diese Option für die relative Position der Antennen wird als "gemeinsamer Versatz" bezeichnet). Wählen Sie als Basis einen Abstand von 10 cm, sodass die horizontale Koordinate 35 + 10 = 45 cm = 0,45 m beträgt (5 cm rechts von der Mitte des Bereichs):
SimulationsintervallDie Wahl des Zeitfensters für die Modellierung wird so festgelegt, dass das vom Ziel reflektierte Signal Zeit hat, die Empfangsantenne zu erreichen.
Wir bestimmen die ungefähre Zeit, die das Signal im betrachteten Fall benötigt, unter Berücksichtigung der Entfernung von den Antennen zum Ziel
h = 18 c m :
t ungefähr2 cdoth überv=2 cdot18 über17,3=2,1 nsDa die Spitze des Gaußschen Pulses des Radars mit einer Mittenfrequenz von 1 GHz relativ zum Beginn der Zeitachse um 1 ns verschoben ist, wählen wir ein Zeitfenster von 5 Nanosekunden:
ModellierungDer Inhalt der Eingabedatei lautet also wie folgt:
Wir starten den Modellierungsprozess:
python -m gprMax models\hello.in
Zur Durchführung der Simulation wird die Finite-Differenz-Zeitdomänen-Methode (FDTD, Finite-Differenz-Zeitdomäne) verwendet (der grundlegende Algorithmus der Methode wurde von Kane Yee vorgeschlagen), wonach die Zellen, in die das Modell unterteilt ist, als Yee-Zellen bezeichnet werden . Eine numerische Lösung wird im Zeitbereich erhalten, indem die Maxwell-Gleichungen für jede Zelle gelöst werden.
Im zweidimensionalen Fall (2D-TMz-Modus) wird nur die Komponente berechnet
Ez elektrisches Feld und Komponenten
Hx und
Hy magnetisches Feld.
Wenn der verfügbare Speicherplatz überschritten wird, wird eine Meldung über den Speichermangel ausgegeben, um die Simulation durchzuführen:
Wenn eines der Objekte außerhalb des Simulationsbereichs liegt, wird eine Fehlermeldung angezeigt:
Für die Simulation mit dem beschriebenen Modell wurden nur ca. 56 MB RAM benötigt (wenn Sie den Schritt um die Hälfte verringern - bis zu 1 mm -, steigt der Speicherbedarf auf 99 MB).
Nach Abschluss der Simulation wird die Datei "
hello.out " im Ordner "
models "
angezeigt. Sie enthält die Simulationsergebnisse im
HDF5-Format , das speziell zum Speichern von numerischen Daten entwickelt wurde.
GleisbauUm die Ergebnisse zu visualisieren, konstruieren wir die Traces:
python -m tools.plot_Ascan models\hello.out
Jede Spur (A-Scan), die in dem sich öffnenden Fenster angezeigt wird, zeigt ein Zeitdiagramm einer der Komponenten des elektromagnetischen Felds am Ort der Empfangsantenne:
Auf den Pfaden sind eine direkt von der Sendeantenne (DW) kommende Welle und eine vom Ziel (RW) reflektierte Welle sichtbar.
Die horizontale Zeitachse bezieht sich auf die Tiefe des Ziels, die das Signal durch die Geschwindigkeit der elektromagnetischen Welle in der Substanz reflektiert.
Aber was passiert, wenn Sie den Zylinder-Befehl in der Eingabedatei vor den Box-Befehl setzen?
Das vom Zylinder reflektierte Signal verschwand - der Sand absorbierte den Zylinder (dies ist ein Beispiel für die Bedeutung der Reihenfolge, in der die Objekte konstruiert werden).
ProfilerstellungAber informativer ist das Radarogramm (Radargramm) - Profil (B-Scan), das eine Kombination aus vielen Spuren darstellt, die beim Bewegen des Georadars in eine bestimmte Richtung erstellt werden. Dies ist genau das Verfahren zum Bewegen eines Wagens mit einem Radar entlang des untersuchten Bereichs.
Ändern Sie die Beschreibung der Antennen, indem Sie sie an den Anfang der horizontalen Achse verschieben:
Wir setzen den Schritt zum Bewegen der Antennen auf 1 cm = 0,01 m:
Der Inhalt der Eingabedatei lautet also wie folgt:
Führen Sie die Simulation im Batch-Modus aus:
python -m gprMax models\hello.in -n 50
(50 ist die Anzahl der Schritte, die das Radar bewegt).
Nach dem Start wird die Simulation nacheinander für 50 GPR-Positionen durchgeführt:
Nach dem Ende der Simulation befinden sich 50 Dateien hello1.out ... hello50.out im Modellordner.
Kombinieren Sie diese Dateien mit dem folgenden Befehl in die Datei hello_merged.out:
python -m tools.outputfiles_merge models/hello
Erstellen Sie ein Profil:
python -m tools.plot_Bscan models\hello_merged.out Ez
(Ez ist die Komponente des elektromagnetischen Feldes, mit dem wir das Profil erstellen - die Komponente, die direkt in Spannung umgewandelt wird)
Wie Sie sehen können, wird der horizontale Balken, der durch die direkte Welle verursacht wird, im Profil oben angezeigt, und die charakteristische Hyperbel, die durch die reflektierte Welle verursacht wird und die Änderung der Entfernung vom Ziel zum GPR zeigt, wenn es sich bewegt, wird unten angezeigt.
Die Legende rechts zeigt die passenden Farben und Feldstärken.
Ez (auf der Strecke gezeigt):
rot -
Ez>0weiß -
Ez=0blau -
Ez<0Durch die Analyse solcher Profile können Rückschlüsse auf die Tiefe, Größe und sogar die Form der Ziele gezogen werden, wobei auch
neuronale Netze verwendet werden.
Routen und Profil auf dem GPR-Display (Frame aus der britischen Fernsehsendung "Command of the Time")
Reflexion tritt aber nicht nur an leitenden Objekten auf, sondern auch an der Grenze zweier Schichten mit unterschiedlichen Dielektrizitätskonstanten.
Erstellen Sie im unteren Teil des Modells eine zweite Sandschicht mit Dielektrizitätskonstante
epsilonr=9 :
Wie zu sehen ist, erschien unterhalb der "Spur" der direkten Welle (DW) ein lineares Segment der Welle (RW), das von der Grenzfläche der beiden Sandschichten reflektiert wurde.
Außerhalb dieses Beispiels können mit gprMax-
Funktionen wie dreidimensionale Modellierung, komplexe Oberflächenformen, detaillierte Antennenmodelle, die Streuung elektromagnetischer Wellen usw. nicht nur die GPR simuliert, sondern auch die Ausbreitung elektromagnetischer Wellen in verschiedenen Umgebungen untersucht werden Beschleunigen Sie Berechnungen mit der
NVIDIA CUDA- Technologie, die eine zehnfache Geschwindigkeitssteigerung im Vergleich zu Parallel-Computing auf einer CPU mit OpenMP bietet. Um die Flexibilität der Modellierung zu erhöhen, können Sie Codeblöcke in Python in die Eingabedatei einfügen.
Einige Beispiele für die Verwendung des gprMax-Pakets:
Nützliche Links:
Offizielle Website von gprMaxGprMax BenutzerhandbuchgprMax auf YouTube