<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Runtux Blog</title><link>https://blog.runtux.com/</link><description>Neues, Interessantes, Skurriles</description><atom:link href="https://blog.runtux.com/de/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>de</language><copyright>Contents © 2026 &lt;a href="mailto:rsc@runtux.com"&gt;Ralf Schlatterbeck&lt;/a&gt; </copyright><lastBuildDate>Tue, 31 Mar 2026 11:43:22 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Mininec Resonanzfrequenz</title><link>https://blog.runtux.com/de/posts/2026/31/</link><dc:creator>Ralf Schlatterbeck</dc:creator><description>&lt;div&gt;&lt;p&gt;Für mein Antennen-Modellierungsprogramm &lt;a class="reference external" href="https://github.com/schlatterbeck/pymininec"&gt;pymininec&lt;/a&gt; (das eine
Python-Reimplementierung des original &lt;a class="reference external" href="https://github.com/schlatterbeck/MiniNec"&gt;Mininec&lt;/a&gt; Basic-Codes darstellt)
habe ich mich damit beschäftigt, warum die Resonanzfrequenz, die von
&lt;a class="reference external" href="https://github.com/schlatterbeck/MiniNec"&gt;Mininec&lt;/a&gt; berechnet wird, immer etwas zu hoch ist (die reale
Resonanzfrequenz ist etwas niedriger als simuliert und um die korrekte
höhere Resonanzfrequenz zu bekommen müssen Drähte etwas kürzer
konfektioniert werden als von &lt;a class="reference external" href="https://github.com/schlatterbeck/MiniNec"&gt;Mininec&lt;/a&gt; simuliert).&lt;/p&gt;
&lt;p&gt;Das bedeutet wenn man die Resonante &lt;em&gt;Länge&lt;/em&gt; für eine gegebene Frequenz
berechnet, dass &lt;a class="reference external" href="https://github.com/schlatterbeck/MiniNec"&gt;Mininec&lt;/a&gt; etwas längere Drähte vorraussagt als &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Numerical_Electromagnetics_Code"&gt;NEC-2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Aus dem &lt;a class="reference external" href="https://github.com/schlatterbeck/MiniNec"&gt;Mininec&lt;/a&gt; Report &lt;a class="citation-reference" href="https://blog.runtux.com/de/posts/2026/31/#lr86" id="citation-reference-1" role="doc-biblioref"&gt;[LR86]&lt;/a&gt; wissen wir dass &lt;a class="reference external" href="https://github.com/schlatterbeck/MiniNec"&gt;Mininec&lt;/a&gt; Drähte in
Segmente zerlegt (der Benutzer muss die Anzahl der Segmente definieren)
und den Punkt zwischen aufeinanderfolgenden Segmenten einen &lt;em&gt;Puls&lt;/em&gt;
nennt. Es berechnet den Strom an jedem Puls und berechnet dann das
resultierende Antennendiagramm aus diesen Strömen. Weil es am Ende eines
Drahtes keinen Puls gibt (ausser dieser Draht ist mit einem weiteren
Draht verbunden) lässt die Simulation eine halbe Segmentlänge am Ende
jedes nicht verbundenen Drahtes weg.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.runtux.com/de/posts/2026/31/"&gt;Weiterlesen…&lt;/a&gt; (3 min verbleiben zum Lesen)&lt;/p&gt;&lt;/div&gt;</description><category>antenna modeling</category><category>deutsch</category><category>documentation</category><category>hamradio</category><category>howto</category><guid>https://blog.runtux.com/de/posts/2026/31/</guid><pubDate>Tue, 31 Mar 2026 10:15:00 GMT</pubDate></item><item><title>API Beispiel pymininec, plot-antenna</title><link>https://blog.runtux.com/de/posts/2025/07/28/</link><dc:creator>Ralf Schlatterbeck</dc:creator><description>&lt;div class="cell border-box-sizing text_cell rendered" id="cell-id=60a09f62"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Dies ist ein Beispiel für die Verwendung des API von &lt;a href="https://pypi.org/project/pymininec/"&gt;pymininec&lt;/a&gt; zusammen mit dem API von &lt;a href="https://pypi.org/project/plot-antenna/"&gt;plot-antenna&lt;/a&gt;.  Wir berechnen eine Antenne mit &lt;a href="https://pypi.org/project/pymininec/"&gt;pymininec&lt;/a&gt; und plotten dann das Antennendiagramm, das Stehwellenverhältnis (VSWR), und die Antennen-Geometrie mit &lt;a href="https://pypi.org/project/pymininec/"&gt;plot-antenna&lt;/a&gt;.  Es gibt bereits eine bescheidene &lt;a href="https://github.com/schlatterbeck/plot-antenna#plot-antenna-api"&gt;API Beschreibung für plot-antenna&lt;/a&gt;, für pymininec verwenden wir im wesentlichen den Code in der &lt;a href="https://github.com/schlatterbeck/pymininec/blob/master/mininec/mininec.py"&gt;main() Funktion in mininec/mininec.py&lt;/a&gt; – das alle API-Aufrufe im Beispiel enthält. Zu beachten ist dass API-Features verwendet werden die in der derzeit noch nicht als Release verfügbaren Version von pymininec auf github enthalten sind.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.runtux.com/de/posts/2025/07/28/"&gt;Weiterlesen…&lt;/a&gt; (4 min verbleiben zum Lesen)&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description><category>deutsch</category><category>documentation</category><category>hamradio</category><guid>https://blog.runtux.com/de/posts/2025/07/28/</guid><pubDate>Mon, 28 Jul 2025 15:00:00 GMT</pubDate></item><item><title>"Wasser": Ein Mehrdimensionales Benchmark Problem</title><link>https://blog.runtux.com/de/posts/2025/06/15/</link><dc:creator>Ralf Schlatterbeck</dc:creator><description>&lt;div&gt;&lt;p&gt;Dies ist ein kurzes Essay das eigentlich in die Dokumentation von
&lt;a class="reference external" href="https://github.com/schlatterbeck/pgapack"&gt;PGAPack&lt;/a&gt; gehört, aber ich habe es nicht geschafft, &lt;a class="reference external" href="https://plotly.com/"&gt;plotly&lt;/a&gt; Grafiken in
ein github &lt;code class="docutils literal"&gt;README.rst&lt;/code&gt; file einzubinden, nichtmal mit der Proxy-Seite
&lt;code class="docutils literal"&gt;raw.githack.com&lt;/code&gt; (das ist eine Seite die html und javascript files
mit dem richtigen Content-Type ausliefert so dass man sie im Web-Browser
anzeigen kann, github liefert diese Seiten mit dem Content-Type
&lt;code class="docutils literal"&gt;text/plain&lt;/code&gt; aus). Github weigert sich, einen &lt;code class="docutils literal"&gt;iframe&lt;/code&gt; in einer
github Seite zu rendern.&lt;/p&gt;
&lt;p&gt;Das "Wasser Ressourcenplanungs-Problem" &lt;a class="citation-reference" href="https://blog.runtux.com/de/posts/2025/06/15/#rts01" id="citation-reference-1" role="doc-biblioref"&gt;[RTS01]&lt;/a&gt; ist ein technisches
Problem das als Benchmark für das Testen von Optimierungssalgorithmen
mit mehreren Zielfunktionen in der Literatur verwendet wird, unter
andererem in Klassikern wie dem NSGA-II Artikel &lt;a class="citation-reference" href="https://blog.runtux.com/de/posts/2025/06/15/#dpam02" id="citation-reference-2" role="doc-biblioref"&gt;[DPAM02]&lt;/a&gt;. Das Problem
besteht aus sieben Randbedingungen und einer fünfdimensionalen
Zielfunktion.&lt;/p&gt;
&lt;p&gt;Ich nutze dieses Problem seit einiger Zeit als Test meiner NSGA-II
Implementierung in &lt;a class="reference external" href="https://github.com/schlatterbeck/pgapack"&gt;PGAPack&lt;/a&gt;. Es ist im Verzeichnis &lt;code class="docutils literal"&gt;examples/nsgaii&lt;/code&gt;
und kann (nach compilieren) mit dem Test-Problem Index &lt;code class="docutils literal"&gt;12&lt;/code&gt; aufgerufen
werden:&lt;/p&gt;
&lt;pre class="literal-block"&gt;examples/nsgaii/optimize 12&lt;/pre&gt;
&lt;p&gt;Die Ausgabe des Programms kann auch in der folgenden Datei gefunden
werden:&lt;/p&gt;
&lt;pre class="literal-block"&gt;test/nsgaii_optimize_12.data&lt;/pre&gt;
&lt;p&gt;Zum Testen liefere ich auch das Script &lt;code class="docutils literal"&gt;crowdingplot&lt;/code&gt; zum Plotten von
mehrdimensionalen Optimierungsproblemen mit. Es findet sich im selben
Directory wie der Code für das Beispiel.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.runtux.com/de/posts/2025/06/15/"&gt;Weiterlesen…&lt;/a&gt; (3 min verbleiben zum Lesen)&lt;/p&gt;&lt;/div&gt;</description><category>deutsch</category><category>documentation</category><category>genetic algorithms</category><category>open source</category><category>optimization</category><guid>https://blog.runtux.com/de/posts/2025/06/15/</guid><pubDate>Sun, 15 Jun 2025 11:50:00 GMT</pubDate></item><item><title>Neue Messungen zur Nicht-Dominanz Sortierung</title><link>https://blog.runtux.com/de/posts/2025/06/14/</link><dc:creator>Ralf Schlatterbeck</dc:creator><description>&lt;div&gt;&lt;p&gt;Dies ist eine Aktualisierung zu einem früheren Beitrag &lt;a class="citation-reference" href="https://blog.runtux.com/de/posts/2025/06/14/#sch25" id="citation-reference-1" role="doc-biblioref"&gt;[Sch25]&lt;/a&gt; zur
Implementierung von Nicht-Dominanz Sortierung in &lt;a class="reference external" href="https://github.com/schlatterbeck/pgapack"&gt;PGAPack&lt;/a&gt;.
Nicht-Dominanz Sortierung ist eine zentrale Komponente von
Optimierungsalgorithmen mit mehreren Zielfunktionen.&lt;/p&gt;
&lt;p&gt;Im früheren Beitrag hatte ich nicht erwähnt für wie viele Generation der
Test lief: Die Anzahl der Generationen im letzten und in diesem Test war
200. Im letzten Test war der Code ohne Optimierung compiliert. Die
folgenden Messungen wurden mit der Option &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;-O3&lt;/span&gt;&lt;/code&gt; gemacht, der besten
die &lt;a class="reference external" href="https://gcc.gnu.org/"&gt;gcc&lt;/a&gt; anbietet. Ausserdem war mir aufgefallen, dass meine
Implementierung des DTLZ-1 tests &lt;a class="citation-reference" href="https://blog.runtux.com/de/posts/2025/06/14/#dtlz05" id="citation-reference-2" role="doc-biblioref"&gt;[DTLZ05]&lt;/a&gt; quadratisch in der Anzahl der
Zielfunktionen ist und ich befürchtete dass dies die Tests beeinflussen
könnte. Es stellte sich aber heraus dass dies nicht der Fall war, der
Overhead für 20 Zielfunktionen ist immer noch zu klein um bemerkbar zu
sein.&lt;/p&gt;
&lt;p&gt;Zusätzlich zu den ersten Tests messe ich jetzt – neben der Gesamtzeit
– auch die Zeit nur für die Nicht-Dominanz Sortierung. Im folgenden
gibt es also zwei Typen von Grafiken: Wo im Titel "Overall" steht ist
die Zeit für die Zielfunktion und was der Algorithmus sonst noch an
Verwaltung tut inkludiert (Gesamtzeit). Die anderen welche mit
"Non-dominated" anfangen messen nur die Zeit für die Nicht-Dominanz
Sortierung.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.runtux.com/de/posts/2025/06/14/"&gt;Weiterlesen…&lt;/a&gt; (7 min verbleiben zum Lesen)&lt;/p&gt;&lt;/div&gt;</description><category>documentation</category><category>english</category><category>genetic algorithms</category><category>open source</category><category>optimization</category><guid>https://blog.runtux.com/de/posts/2025/06/14/</guid><pubDate>Sat, 14 Jun 2025 08:30:00 GMT</pubDate></item><item><title>Nicht-Dominanz Sortierung bei Optimierung mit mehreren Zielfunktionen</title><link>https://blog.runtux.com/de/posts/2025/06/09/</link><dc:creator>Ralf Schlatterbeck</dc:creator><description>&lt;div&gt;&lt;p&gt;Einige Leser hier wissen dass ich &lt;a class="reference external" href="https://github.com/schlatterbeck/pgapack"&gt;PGApack&lt;/a&gt;, ein Paket für Genetische
Algorithmen, zusammen mit &lt;a class="reference external" href="https://github.com/schlatterbeck/pgapy"&gt;PGApy&lt;/a&gt; einer Python Bibliothek pflege
(maintaine). &lt;a class="reference external" href="https://github.com/schlatterbeck/pgapack"&gt;PGAPack&lt;/a&gt; implementiert Optimierung mit mehreren
Zielfunktionen (multi-objective optimization) mit NSGA-II &lt;a class="citation-reference" href="https://blog.runtux.com/de/posts/2025/06/09/#dpam02" id="citation-reference-1" role="doc-biblioref"&gt;[DPAM02]&lt;/a&gt; und
NSGA-III &lt;a class="citation-reference" href="https://blog.runtux.com/de/posts/2025/06/09/#dj14" id="citation-reference-2" role="doc-biblioref"&gt;[DJ14]&lt;/a&gt;, &lt;a class="citation-reference" href="https://blog.runtux.com/de/posts/2025/06/09/#jd14" id="citation-reference-3" role="doc-biblioref"&gt;[JD14]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mehrere Zielfunktionen heisst dass wir mehr als ein Zielfunktion (auch
Fitness-Funktion genannt) haben. Typischerweise widersprechen sich die
Ziele – wenn eine Lösung in einer Zielfunktion besser ist wird, wird
sie typischerweise in einer anderen Lösung schlechter – wir müssen
uns also überlegen was &lt;em&gt;besser&lt;/em&gt; im Kontext von mehreren Zielfunktionen
bedeutet. Eine Lösung &lt;span class="math"&gt;\(A\)&lt;/span&gt; ist strikt besser als eine andere
Lösung &lt;span class="math"&gt;\(B\)&lt;/span&gt; – wir sprechen davon dass Lösung &lt;span class="math"&gt;\(A\)&lt;/span&gt; die
Lösung &lt;span class="math"&gt;\(B\)&lt;/span&gt; &lt;em&gt;dominiert&lt;/em&gt; – wenn &lt;span class="math"&gt;\(A\)&lt;/span&gt; besser oder gleich
&lt;span class="math"&gt;\(B\)&lt;/span&gt; in allen Zielfunktionen ist und strikt besser in mindestens
einer davon.&lt;/p&gt;
&lt;p&gt;Weil wir keine einfache Fitness für Lösungen haben, etablieren
Algorithmen für mehrere Zielfunktionen typischerweise eine Rangfolge
(ranking) der Lösungen nach Dominanz. Lösungen die nicht von einer
anderen Lösung dominiert werden bekommen den Rang 0. Dann entfernt man
alle Lösungen mit Rang 0. Alle Lösungen die dann nicht dominiert sind
bekommen Rang 1 usw. Diese Prozedur heisst typischerweise Nicht-Dominanz
Sortierung (non-dominated sorting). Der Rang ist dann eine der
Komponenten für eine neue Fitness-Funktion.&lt;/p&gt;
&lt;p&gt;Der NSGA-II Artikel &lt;a class="citation-reference" href="https://blog.runtux.com/de/posts/2025/06/09/#dpam02" id="citation-reference-4" role="doc-biblioref"&gt;[DPAM02]&lt;/a&gt; implementiert diese Sortierung indem jede
Lösung gegen jede andere Lösung der Population auf Dominanz verglichen
wird. Dann werden nicht-dominierte Lösungen eine nach der anderen
entfernt und die Ränge zugewiesen wie oben angedeutet. Dieser
Algorithmus zur Sortierung hat eine Laufzeit die mit der Anzahl der
Lösungen quadratisch ansteigt. In der Informatik schreiben wir mit der
&lt;a class="reference external" href="https://de.wikipedia.org/wiki/Landau-Symbole"&gt;O-Notation (auch Landau Symbole)&lt;/a&gt; Aussagen über die Laufzeit auf. Der
quadratische Aufwand wird als &lt;span class="math"&gt;\(O(n^2)\)&lt;/span&gt; notiert, wobei &lt;span class="math"&gt;\(n\)&lt;/span&gt;
die Anzahl der Lösungen ist.&lt;/p&gt;
&lt;p&gt;2003 hat Jensen &lt;a class="citation-reference" href="https://blog.runtux.com/de/posts/2025/06/09/#jen03" id="citation-reference-5" role="doc-biblioref"&gt;[Jen03]&lt;/a&gt; einen Algorithmus publiziert der die
Nicht-Dominanz-Sortierung mit einem Aufwand von
&lt;span class="math"&gt;\(O\left(n\cdot(\log n)^{m-1}\right)\)&lt;/span&gt;
durchführen kann wobei &lt;span class="math"&gt;\(m\)&lt;/span&gt; die Anzahl der Zielfunktionen (und
&lt;span class="math"&gt;\(n\)&lt;/span&gt; wieder die Populationsgröße) ist. Jensen's Algorithmus wurde
zehn Jahre später nochmal geändert publiziert weil das Original nicht
mit gleichen Werten der Zielfunktionen umgehen konnte. Jensen schreibt
zwar das sei einfach, offensichtlich nicht für andere &lt;a class="citation-reference" href="https://blog.runtux.com/de/posts/2025/06/09/#fgp13" id="citation-reference-6" role="doc-biblioref"&gt;[FGP13]&lt;/a&gt;. Ein Jahr
später gab es dann nochmal eine kleinere Modifikation um formal zu
beweisen dass die Laufzeit-Komplexität wirklich der obigen Formel folgt
&lt;a class="citation-reference" href="https://blog.runtux.com/de/posts/2025/06/09/#bs14" id="citation-reference-7" role="doc-biblioref"&gt;[BS14]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.runtux.com/de/posts/2025/06/09/"&gt;Weiterlesen…&lt;/a&gt; (4 min verbleiben zum Lesen)&lt;/p&gt;&lt;/div&gt;</description><category>deutsch</category><category>documentation</category><category>genetic algorithms</category><category>open source</category><category>optimization</category><guid>https://blog.runtux.com/de/posts/2025/06/09/</guid><pubDate>Mon, 09 Jun 2025 19:00:00 GMT</pubDate></item><item><title>Dynamisches DNS mit Bind funktioniert nicht mehr</title><link>https://blog.runtux.com/de/posts/2025/03/05/</link><dc:creator>Ralf Schlatterbeck</dc:creator><description>&lt;p&gt;Im Jahr 2021 hatte ich ein dynamisches DNS-Service mit dem &lt;a class="reference external" href="https://www.isc.org/bind/"&gt;ISC Bind&lt;/a&gt;
DNS-Server aufgesetzt und das Setup in einem Blog Artikel gepostet &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2025/03/05/#footnote-1" id="footnote-reference-1" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;1&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Vor kurzem (in der zweiten Hälfte von 2024) haben die DNS Updates
plötzlich nicht mehr funktioniert. In der Konfiguration hatte ich das
Public Key Verfahren namens SIG(0) verwendet. Dieses wird schon lange in
Bind unterstützt und es ist auch &lt;a class="reference external" href="https://bind9.readthedocs.io/en/latest/chapter7.html#sig-0"&gt;dokumentiert dass es funktioniert&lt;/a&gt;
– &lt;em&gt;in der letzten Version&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Plötzlich wurden alles DNS Update Anfragen mit einem &lt;code class="docutils literal"&gt;REFUSED&lt;/code&gt; Status
zurückgewiesen. Selbst mit aufgedrehtem Debugging mit &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;-d&lt;/span&gt; 15&lt;/code&gt; bekam
ich keine weiteren Informationen, auch nicht wenn alle Logs auf Standard
Error umgeleitet wurden mit der Option &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;-g&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Es stellte sich heraus dass das Public Key Verfahren SIG(0) wegen eines
"Denial of Service" Angriffsvektors, der in &lt;a class="reference external" href="https://security-tracker.debian.org/tracker/CVE-2024-1975"&gt;CVE-2024-1975&lt;/a&gt; dokumentiert
ist, entfernt worden war. DNS updates mit &lt;a class="reference external" href="https://bind9.readthedocs.io/en/bind-9.18/chapter7.html#tsig"&gt;TSIG keys&lt;/a&gt; funktionieren
noch. Leider sah es so aus als ob das nicht dokumentiert ist und es
kamen auch keine sinnvollen Logmeldungen, daher habe ich einen &lt;a class="reference external" href="https://gitlab.isc.org/isc-projects/bind9/-/issues/5221"&gt;Bug
report&lt;/a&gt; gemacht.&lt;/p&gt;
&lt;p&gt;Wie sich dann herausstellte hätte ich in die Dokumentation von 9.18 –
die Version die von Debian bookworm paketiert ist – schauen müssen.
Diese dokumentiert dass &lt;a class="reference external" href="https://bind9.readthedocs.io/en/bind-9.18/chapter7.html#sig-0"&gt;SIG(0) entfernt wurde&lt;/a&gt; wegen &lt;a class="reference external" href="https://security-tracker.debian.org/tracker/CVE-2024-1975"&gt;CVE-2024-1975&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Es sieht so aus dass &lt;em&gt;spätere&lt;/em&gt; Versionen von Bind (z.B. 9.20.6
und höher) wieder SIG(0) unterstützen, mit einem Quota-Mechanismus der
einen Denial of Service verhindert. Aber für frühere Versionen besteht
der "Fix" darin, SIG(0) komplett zu deaktivieren.&lt;/p&gt;
&lt;aside class="footnote-list brackets"&gt;
&lt;aside class="footnote brackets" id="footnote-1" role="doc-footnote"&gt;
&lt;span class="label"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;&lt;a role="doc-backlink" href="https://blog.runtux.com/de/posts/2025/03/05/#footnote-reference-1"&gt;1&lt;/a&gt;&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;Ralf Schlatterbeck. &lt;a class="reference external" href="https://blog.runtux.com/de/posts/2021/01/08/"&gt;Dynamisches DNS mit dem bind DNS server&lt;/a&gt;.
Blog post, Open Source Consulting, Jan 2021.&lt;/p&gt;
&lt;/aside&gt;
&lt;/aside&gt;</description><category>documentation</category><category>german</category><category>howto</category><category>open source</category><guid>https://blog.runtux.com/de/posts/2025/03/05/</guid><pubDate>Wed, 05 Mar 2025 18:00:00 GMT</pubDate></item><item><title>Modellieren einer Drahtantenne mit Isolation</title><link>https://blog.runtux.com/de/posts/2024/09/17/</link><dc:creator>Ralf Schlatterbeck</dc:creator><description>&lt;div&gt;&lt;p&gt;[Update 2024-08-20: Korrektur der Formel zu L und äquivalentem Radius]&lt;/p&gt;
&lt;p&gt;[Update 2024-09-19: Korrektur Literaturangabe Artikel von Stearns,
Ergänzung zum Antenna Book &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/09/17/#footnote-5" id="footnote-reference-1" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;5&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;Für mein Antennen-Modellierungsprogramm &lt;a class="reference external" href="https://github.com/schlatterbeck/pymininec"&gt;pymininec&lt;/a&gt; (das eine
Reimplementierung des original &lt;a class="reference external" href="https://github.com/schlatterbeck/MiniNec"&gt;Mininec&lt;/a&gt; Basic-Codes darstellt) habe ich
mich damit beschäftigt, wie man isolierte Drähte in Antennen modellieren
kann. Ich hatte Roy Lewallen, W7EL, den Autor von &lt;a class="reference external" href="https://eznec.com/"&gt;EZNEC&lt;/a&gt; gefragt was er
in &lt;a class="reference external" href="https://eznec.com/"&gt;EZNEC&lt;/a&gt; verwendet und einen Hinweis auf ein Paper von J. H. Richmond
&lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/09/17/#footnote-1" id="footnote-reference-2" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;1&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; erhalten, das das erste Paper war, welches einen Algorithmus für
isolierte Drähte vorgeschlagen und auch implementiert hat. Der
Algorithmus wurde von Jerry McCormack in seiner Masterarbeit &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/09/17/#footnote-2" id="footnote-reference-3" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;2&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;
implementiert und später in einem Report &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/09/17/#footnote-3" id="footnote-reference-4" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;3&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; (dieser ist fast identisch
mit der Masterarbeit bis auf neueren Fortran Code und einen anderen
Autor) wiederveröffentlicht. Der original Fortran Code ist nicht nur in
den obigen Reporten abgedruckt, sondern auch heute noch verfügbar auf
Ray L. Cross' Seite zum "Antenna Scatterers Analysis Program" &lt;a class="reference external" href="http://raylcross.net/asap/index.html"&gt;ASAP&lt;/a&gt;.
Die Subroutine "DSHELL" implementiert den Algorithmus für isolierte
Drähte. Mit einigen Modifikationen konnte ich diesen Code auch heute
noch ausführen. Großer Dank gebührt an dieser Stelle Roy, W7EL der mir
diese Infos zugänglich machte.&lt;/p&gt;
&lt;p&gt;Um meine Implementierung in &lt;a class="reference external" href="https://github.com/schlatterbeck/pymininec"&gt;pymininec&lt;/a&gt; gegen gemessene Daten zu testen
habe ich ein Paper von David Lamensdorf &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/09/17/#footnote-4" id="footnote-reference-5" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;4&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; ausgegraben wo der Effekt
von Isolation wirklich mal gemessen wurde. Weil zu dieser Zeit der
Einfluss von Isolation nur mit einem unendlichen Zylinder theoretisch
modelliert werden konnte verwendete das Experiment Isolation die über
das Ende des Drahtes hinausragte bis keine Änderung der gemessenen
Parameter mehr beobachtet wurde.&lt;/p&gt;
&lt;p&gt;Experimente mit den Formeln von Richmond &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/09/17/#footnote-1" id="footnote-reference-6" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;1&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; zeigten mir dass die
resultierende Impedanzmatrix schlecht konditioniert ist: Für kurze
Drahtsegmente erzeugen die Formeln sehr große absolute Werte die zur
Hauptdiagonale addiert und von den beiden Nebendiagonalen (die Matrix
ist symmetrisch, die beiden Nebendiagonalen sind für die obere und
untere Dreiecksmatrix ident) subtrahiert werden. Weil diese Werte
während der Matrix-Inversion subtrahiert werden, kommt es zu
katastrophalen Auslöschungseffekten, was die Ergebnisse dominiert.&lt;/p&gt;
&lt;p&gt;Also habe ich weiter nachgeforscht und bin auf ein Paper &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/09/17/#footnote-5" id="footnote-reference-7" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;5&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; und eine
Präsentation &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/09/17/#footnote-6" id="footnote-reference-8" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;6&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; von Steve Stearns, K6OIK gestoßen, die Formeln für die
verteilte Induktivität und einen äquivalenten Radius angibt mit welchen
sich Isolation modellieren lässt. Seine Präsentation hat auch eine gute
Übersicht über unterschiedliche Ansätze zur Modellierung von Isolation
mit Programmen die dies nicht unterstützen (wie die original &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Numerical_Electromagnetics_Code"&gt;NEC-2&lt;/a&gt;
Implementierung oder das original &lt;a class="reference external" href="https://github.com/schlatterbeck/MiniNec"&gt;Mininec&lt;/a&gt;):&lt;/p&gt;
&lt;div class="math"&gt;
\begin{align*}
a_e &amp;amp;= a \left(\frac{b}{a}\right)^{\left(1-
    \frac{1}{\varepsilon_r}\right)} \\
L   &amp;amp;= \frac{\mu_0}{2\pi}\left(1-\frac{1}{\varepsilon_r}
  \right)\log\left(\frac{b}{a}\right) \\
\sigma_e &amp;amp;=
\sigma\left(\frac{a}{b}\right)^{2\left(1-\frac{1}{\varepsilon_r}\right)} \\
\end{align*}
&lt;/div&gt;
&lt;p&gt;Hier ist &lt;span class="math"&gt;\(a\)&lt;/span&gt; der Original-Radius des Drahtes, &lt;span class="math"&gt;\(b\)&lt;/span&gt; der Radius
&lt;em&gt;mit Isolation&lt;/em&gt;, &lt;span class="math"&gt;\(\sigma\)&lt;/span&gt; ist die Elektrische Leitfähigkeit des
Drahtes, &lt;span class="math"&gt;\(\varepsilon_r\)&lt;/span&gt; ist die relative Permittivität der
Isolation, &lt;span class="math"&gt;\(a_e\)&lt;/span&gt; ist der äquivalente Radius und &lt;span class="math"&gt;\(\sigma_e\)&lt;/span&gt;
die äquivalente Permittivität die verwendet wird um den Effekt des
veränderten Radius bei der Berechnung des Skin-Effekts aufzuheben. Die
Induktivität &lt;span class="math"&gt;\(L\)&lt;/span&gt; ist die Induktivität pro Länge des isolierten
Drahtes (oder Drahtsegments).&lt;/p&gt;
&lt;p&gt;Dann habe ich ein Paper gesucht das die Formeln von Steve Stearns
bestätigt und habe ein noch älteres Paper von Tai Tsun Wu &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/09/17/#footnote-7" id="footnote-reference-9" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;7&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; gefunden
das exakt die gleichen Formeln für den äquivalenten Radius &lt;span class="math"&gt;\(a_e\)&lt;/span&gt;
und für die verteilte Impedanz &lt;span class="math"&gt;\(L\)&lt;/span&gt; angibt.&lt;/p&gt;
&lt;p&gt;Die Formel für die äquivalente Permittivität wird nur verwendet um den
Effekt des äquivalenten Radius auf die Berechnung des Skin Effekts
aufzuheben. In einem früheren Blog Post &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/09/17/#footnote-8" id="footnote-reference-10" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;8&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; hatte ich eine Formel für
den Skin Effekt angegeben. In dieser Formel taucht die Elektrische
Leitfähigkeit &lt;span class="math"&gt;\(\sigma\)&lt;/span&gt; als ihr Kehrwert &lt;span class="math"&gt;\(\rho\)&lt;/span&gt; auf, der
spezifische Widerstand. Die Quadratwurzel aus &lt;span class="math"&gt;\(\sigma\)&lt;/span&gt; wird immer
als Produkt mit dem Radius verwendet. Daher können wir den Effekt der
Radius-Änderung durch Multiplikation von &lt;span class="math"&gt;\(\sigma\)&lt;/span&gt; mit dem
Kehrbruch des Faktors für den äquivalenten Radius multiplizieren. Wir
bekommen:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{align*}
\sqrt{\sigma}a &amp;amp;=
\sqrt{\sigma_e}a\left(\frac{b}{a}\right)^{\left
    (1-\frac{1}{\varepsilon_r}\right)} \\
\frac{\sigma_e}{\sigma} &amp;amp;=
\frac{1}{\left(\frac{b}{a}\right)^{2\left
    (1-\frac{1}{\varepsilon_r}\right)}}
    = \left(\frac{a}{b}\right)^{2\left(1-\frac{1}{\varepsilon_r}\right)} \\
\end{align*}
&lt;/div&gt;
&lt;p&gt;In &lt;a class="reference external" href="https://github.com/schlatterbeck/pymininec"&gt;pymininec&lt;/a&gt; brauche ich allerdings den äquivalenten Radius bei der
Skin Effekt Berechnung nicht zu korrigieren da ich dort einfach den
Original-Radius verwenden kann.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.runtux.com/de/posts/2024/09/17/"&gt;Weiterlesen…&lt;/a&gt; (4 min verbleiben zum Lesen)&lt;/p&gt;&lt;/div&gt;</description><category>antenna modeling</category><category>deutsch</category><category>documentation</category><category>hamradio</category><category>howto</category><guid>https://blog.runtux.com/de/posts/2024/09/17/</guid><pubDate>Tue, 17 Sep 2024 13:45:00 GMT</pubDate></item><item><title>Plotting Antenna Pattern</title><link>https://blog.runtux.com/de/posts/2024/08/31/</link><dc:creator>Ralf Schlatterbeck</dc:creator><description>&lt;div&gt;&lt;p&gt;[Update 2025-12-04: Links in der Bibliographie aktualisiert]&lt;/p&gt;
&lt;p&gt;Ich bin der Autor eines Antennen-Plot-Programms namens &lt;a class="reference external" href="https://github.com/schlatterbeck/plot-antenna"&gt;plot-antenna&lt;/a&gt;.
Es ist in Python geschrieben und hat Backends für &lt;a class="reference external" href="https://matplotlib.org/"&gt;Matplotlib&lt;/a&gt; und
&lt;a class="reference external" href="https://github.com/plotly/plotly.py"&gt;Plotly&lt;/a&gt;. Während ich das hier schreibe kann die &lt;a class="reference external" href="https://pypi.org/project/plot-antenna/"&gt;Version auf pypi&lt;/a&gt;
noch nicht unterschiedliche Frequenz-Auflösungen für Gewinn und
Impedanz-Plots. Das &lt;a class="reference external" href="https://matplotlib.org/"&gt;Matplotlib&lt;/a&gt; Backend ist besser für die Erzeugung von
Grafiken für gedruckte Dokumentation während &lt;a class="reference external" href="https://github.com/plotly/plotly.py"&gt;Plotly&lt;/a&gt; sich eignet,
interaktive Grafiken für das Web zu erzeugen. Die Doku von &lt;a class="reference external" href="https://github.com/schlatterbeck/plot-antenna"&gt;plot-antenna&lt;/a&gt;
enthält einige &lt;a class="reference external" href="https://matplotlib.org/"&gt;Matplotlib&lt;/a&gt; Beispiele daher gehe ich hier mehr ins Detail
was das &lt;a class="reference external" href="https://github.com/plotly/plotly.py"&gt;Plotly&lt;/a&gt; Backend betrifft.&lt;/p&gt;
&lt;p&gt;Vor kurzem habe ich Unterstützung für das "Antenna Scatterers Analysis
Program" &lt;a class="reference external" href="http://raylcross.net/asap/index.html"&gt;ASAP&lt;/a&gt; eingebaut. Das ist ein Antennen-Simulationsprogramm aus
einer Zeit vor dem &lt;a class="reference external" href="https://de.wikipedia.org/wiki/Fortran"&gt;Fortran&lt;/a&gt;-77 Standard aus dem Jahr 1974. Es ist heute
noch interessant weil es eine Formulierung der &lt;a class="reference external" href="https://de.wikipedia.org/wiki/Momentenmethode_(Elektrotechnik)"&gt;Momentenmethode&lt;/a&gt; (method
of moments) verwendet &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/08/31/#footnote-1" id="footnote-reference-1" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;1&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;, &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/08/31/#footnote-2" id="footnote-reference-2" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;2&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;, die sich sowohl von NEC &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/08/31/#footnote-3" id="footnote-reference-3" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;3&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; als auch
&lt;a class="reference external" href="https://github.com/schlatterbeck/MiniNec"&gt;Mininec&lt;/a&gt; &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/08/31/#footnote-4" id="footnote-reference-4" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;4&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;
unterscheidet. Und &lt;a class="reference external" href="http://raylcross.net/asap/index.html"&gt;ASAP&lt;/a&gt; hat zuerst eine Simulation von isolierten Drähten
in einer Antenne unterstützt.&lt;/p&gt;
&lt;p&gt;Im Folgenden verwende ich eine 3-Elemente Yagi-Uda Antenne die sich in
der &lt;a class="reference external" href="http://raylcross.net/asap/asapexam/yagi.html"&gt;Beispiel-Sektion&lt;/a&gt; von &lt;a class="reference external" href="http://raylcross.net/asap/index.html"&gt;ASAP&lt;/a&gt; findet. Die verwendete &lt;a class="reference external" href="https://blog.runtux.com/content/2024/08/plotly/3-ele.asap"&gt;Eingabedatei&lt;/a&gt;
exportiert Gewinn-Daten für 280 MHz bis 305 MHz in 5 MHz Schritten.
Zusätzlich exportiert es Impedanzwerte in 1 MHz Schritten.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.runtux.com/de/posts/2024/08/31/"&gt;Weiterlesen…&lt;/a&gt; (5 min verbleiben zum Lesen)&lt;/p&gt;&lt;/div&gt;</description><category>antenna modeling</category><category>deutsch</category><category>documentation</category><category>hamradio</category><category>howto</category><guid>https://blog.runtux.com/de/posts/2024/08/31/</guid><pubDate>Sat, 31 Aug 2024 17:30:00 GMT</pubDate></item><item><title>Skin Effekt Belag und Impedanz: Update</title><link>https://blog.runtux.com/de/posts/2024/07/28/</link><dc:creator>Ralf Schlatterbeck</dc:creator><description>&lt;div&gt;&lt;p&gt;In meinem letzten Post &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/07/28/#footnote-1" id="footnote-reference-1" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;1&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; habe ich mich gefragt, warum meine
Implementierung von Skin Effekt Belag (Drähte mit einem endlichen
Widerstand) nicht mit den Resultaten von &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Numerical_Electromagnetics_Code"&gt;NEC-2&lt;/a&gt; übereinstimmten.
Es stellt sich heraus dass ich falsch lag in der Annahme dass
Skin-Effekt Belag nur eine rein ohmsche Komponente hat, durch den Skin
Effekt ergibt sich in Wirklichkeit eine relativ große reaktive
Komponente.&lt;/p&gt;
&lt;p&gt;Hinweis: Dieser Artikel enthält ziemlich viel Mathematik, vielleicht
möchten Sie ja ans Ende scrollen und checken wie die neue
Implementierung in &lt;a class="reference external" href="https://github.com/schlatterbeck/pymininec"&gt;pymininec&lt;/a&gt; sich verglichen mit meinem letzten Artikel
verhält wo nur ein rein ohmscher Widerstand angenommen wurde.&lt;/p&gt;
&lt;p&gt;Der &lt;em&gt;englische&lt;/em&gt; Wikipedia Artikel zum &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Skin_effect"&gt;skin effect&lt;/a&gt; enthält die
korrekte Formel:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
\newcommand{\Int}{{\mathrm\scriptscriptstyle int}}
\newcommand{\ber}{\mathop{\mathrm{ber}}\nolimits}
\newcommand{\bei}{\mathop{\mathrm{bei}}\nolimits}
\end{equation*}
&lt;/div&gt;
&lt;div class="math"&gt;
\begin{equation*}
Z_\Int = \frac{k\rho}{2\pi r}\frac{J_0 (kr)}{J_1 (kr)}
\end{equation*}
&lt;/div&gt;
&lt;p&gt;wobei&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
k = \sqrt{\frac{-j\omega\mu}{\rho}}
\end{equation*}
&lt;/div&gt;
&lt;p&gt;und &lt;span class="math"&gt;\(r\)&lt;/span&gt; ist der Draht-Radius, &lt;span class="math"&gt;\(J_v\)&lt;/span&gt; sind die
Bessel-Funktionen der ersten Gattung mit der Ordnung
&lt;span class="math"&gt;\(v\)&lt;/span&gt;. &lt;span class="math"&gt;\(Z_\Int\)&lt;/span&gt; ist die Impedanz &lt;em&gt;pro Längeneinheit&lt;/em&gt; des
Drahtes.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://en.wikipedia.org/wiki/Numerical_Electromagnetics_Code"&gt;NEC-2&lt;/a&gt; verwendet eine andere Formel &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/07/28/#footnote-2" id="footnote-reference-2" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;2&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; (S.75):&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
Z_i = \frac{j\Delta_i}{a_i} \sqrt{\frac{\omega\mu}{2\pi\sigma}}
      \left[\frac{\ber (q) + j\bei (q)}
                  {\ber^\prime(q)+ j\bei^\prime(q)}\right]
\end{equation*}
&lt;/div&gt;
&lt;p&gt;mit&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
q = (\omega\mu\sigma)^{1/2} a_i
\end{equation*}
&lt;/div&gt;
&lt;p&gt;und &lt;span class="math"&gt;\(a_i\)&lt;/span&gt; ist der Draht-Radius, &lt;span class="math"&gt;\(\Delta_i\)&lt;/span&gt; die Länge des
Drahtsegments, &lt;span class="math"&gt;\(\sigma\)&lt;/span&gt; die Elektrische Leitfähigkeit des Drahtes
und &lt;span class="math"&gt;\(\ber\)&lt;/span&gt; und &lt;span class="math"&gt;\(\bei\)&lt;/span&gt; die Kelvin-Funktionen. Im folgenden
werde ich wieder &lt;span class="math"&gt;\(r\)&lt;/span&gt; für den Draht-Radius, und nicht &lt;span class="math"&gt;\(a_i\)&lt;/span&gt;
verwenden. Nachdem &lt;span class="math"&gt;\(\ber^\prime\)&lt;/span&gt; die Ableitung von &lt;span class="math"&gt;\(\ber\)&lt;/span&gt;
ist, können wir
&lt;span class="math"&gt;\(\ber\)&lt;/span&gt; als &lt;span class="math"&gt;\(\ber_0\)&lt;/span&gt; (Ordnung 0) und &lt;span class="math"&gt;\(\ber^\prime\)&lt;/span&gt; als
&lt;span class="math"&gt;\(\ber_1\)&lt;/span&gt; (Ordnung 1) schreiben und analog für &lt;span class="math"&gt;\(\bei\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Im folgenden bin ich etwas ungenau in der Verwendung der magnetischen
Permeabilität im Freiraum &lt;span class="math"&gt;\(\mu_0\)&lt;/span&gt; vs. der Permeabilität eines
Drahtes &lt;span class="math"&gt;\(\mu\)&lt;/span&gt;, für nicht ferromagnetische Drähte sind diese (fast)
identisch: &lt;span class="math"&gt;\(\mu = \mu_r * \mu_0\)&lt;/span&gt; mit &lt;span class="math"&gt;\(\mu_r\approx 1\)&lt;/span&gt; für
nicht ferromagnetische Materialien.&lt;/p&gt;
&lt;p&gt;Der &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Numerical_Electromagnetics_Code"&gt;NEC-2&lt;/a&gt; code verwendet die Fortran Funktion &lt;code class="docutils literal"&gt;ZINT&lt;/code&gt; mit zwei
Parametern, der Leitfähigkeit multipliziert mit der Wellenlänge
&lt;span class="math"&gt;\(\lambda\)&lt;/span&gt; (Parameter &lt;code class="docutils literal"&gt;SIGL&lt;/code&gt;) und der Radius geteilt durch die
Wellenlänge &lt;span class="math"&gt;\(\lambda\)&lt;/span&gt; (Parameter &lt;code class="docutils literal"&gt;ROLAM&lt;/code&gt;). Neben der
Approximation der Kelvin-Funktionen (der Term mit dem Bruch aus
Kelvin-Funktionen ist &lt;code class="docutils literal"&gt;BR1&lt;/code&gt;), berechnet &lt;code class="docutils literal"&gt;ZINT&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;X = SQRT (TPCMU * SIGL) * ROLAM
ZINT = FJ * SQRT (CMOTP / SIGL) * BR1 / ROLAM&lt;/pre&gt;
&lt;p&gt;mit &lt;code class="docutils literal"&gt;TPCMU = 2368.705&lt;/code&gt;, &lt;code class="docutils literal"&gt;CMOTP=60.0&lt;/code&gt;, und &lt;code class="docutils literal"&gt;FJ&lt;/code&gt; ist &lt;span class="math"&gt;\(j\)&lt;/span&gt;.
Das berechnete &lt;code class="docutils literal"&gt;X&lt;/code&gt; wird der Berechnung der Kelvin-Funktionen übergeben
mit &lt;code class="docutils literal"&gt;BR1&lt;/code&gt; als Resultat des Bruch-Terms. Das berechnete &lt;code class="docutils literal"&gt;ZINT&lt;/code&gt;
enthält nicht die Segment-Länge, ist also äquivalent mit der Wikipedia
Definition in &lt;em&gt;pro Längeneinheit&lt;/em&gt;. Mit den Reverse-Engineerten magischen
Zahlen&lt;/p&gt;
&lt;p&gt;&lt;code class="docutils literal"&gt;CMOTP&lt;/code&gt; &lt;span class="math"&gt;\(\approx \frac{\mu_0 c}{2\pi}\)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class="docutils literal"&gt;TPCMU&lt;/code&gt; &lt;span class="math"&gt;\(\approx 2\pi c\mu_0\)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;(&lt;span class="math"&gt;\(c\)&lt;/span&gt; ist die Lichtgeschwindigkeit) bekommen wir für &lt;code class="docutils literal"&gt;X&lt;/code&gt; aus dem
Code (was wir jetzt &lt;span class="math"&gt;\(q\)&lt;/span&gt; nennen um mit der obigen Formel aus &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/07/28/#footnote-2" id="footnote-reference-3" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;2&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;
konsistent zu sein):&lt;/p&gt;
&lt;div class="math"&gt;
\begin{align*}
q &amp;amp;= \frac{r}{\lambda}\sqrt{2368.705\sigma\lambda} \\
  &amp;amp;= r\sqrt{\frac{2368.705\sigma}{\lambda}} \\
  &amp;amp;\approx r\sqrt{\frac{2\pi c\mu_0\sigma}{\lambda}} \\
  &amp;amp;= r\sqrt{\frac{2\pi c\mu_0\sigma f}{c}} \\
  &amp;amp;= r\sqrt{\frac{2\pi \mu_0\sigma \omega}{2\pi}} \\
  &amp;amp;= r\sqrt{\omega\mu_0\sigma} \\
\end{align*}
&lt;/div&gt;
&lt;p&gt;Was mit der obigen Definition von &lt;span class="math"&gt;\(q\)&lt;/span&gt; in &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/07/28/#footnote-2" id="footnote-reference-4" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;2&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; übereinstimmt.&lt;/p&gt;
&lt;p&gt;Für &lt;span class="math"&gt;\(Z_\Int\)&lt;/span&gt; der Fortran-Implementierung bekommen wir:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{align*}
Z_\Int &amp;amp;= \frac{j}{r} \sqrt{\frac{\mu_0 c}{2\pi\sigma\lambda}}
          \left[\frac{\ber_0 (q) + j\bei_0 (q)}
                  {\ber_1(q)+ j\bei_1(q)}\right] \\
       &amp;amp;= \frac{j}{r} \sqrt{\frac{\mu_0 c f}{2\pi\sigma c}}
          \left[\frac{\ber_0 (q) + j\bei_0 (q)}
                  {\ber_1(q)+ j\bei_1(q)}\right] \\
       &amp;amp;= \frac{j}{r} \sqrt{\frac{\mu_0 f}{2\pi\sigma}}
          \left[\frac{\ber_0 (q) + j\bei_0 (q)}
                  {\ber_1(q)+ j\bei_1(q)}\right] \\
       &amp;amp;= \frac{j}{r} \sqrt{\frac{\mu_0 \omega}{2\pi 2\pi\sigma}}
          \left[\frac{\ber_0 (q) + j\bei_0 (q)}
                  {\ber_1(q)+ j\bei_1(q)}\right] \\
       &amp;amp;= \frac{j}{2\pi r} \sqrt{\frac{\mu_0 \omega}{\sigma}}
          \left[\frac{\ber_0 (q) + j\bei_0 (q)}
                  {\ber_1(q)+ j\bei_1(q)}\right] \\
\end{align*}
&lt;/div&gt;
&lt;p&gt;Diese Formel stimmt &lt;em&gt;NICHT&lt;/em&gt; mit der Formel für &lt;span class="math"&gt;\(Z_i\)&lt;/span&gt; aus &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/07/28/#footnote-2" id="footnote-reference-5" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;2&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;
weiter oben überein. Es sieht so aus als ob die Formel aus &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/07/28/#footnote-2" id="footnote-reference-6" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;2&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; (S. 75)
die Frequenz &lt;span class="math"&gt;\(f\)&lt;/span&gt; statt der Kreisfrequenz &lt;span class="math"&gt;\(\omega\)&lt;/span&gt; unter der
Wurzel haben sollte. Die aus der &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Numerical_Electromagnetics_Code"&gt;NEC-2&lt;/a&gt; Implementierung abgeleitete
Formel ist aber konsistent mit der obigen Formel aus Wikipedia.&lt;/p&gt;
&lt;p&gt;Der Term vor dem Bruch mit den Kelvin-Funktionen unterscheidet sich um
einen Faktor von der Wikipedia Formel (Ich lasse &lt;span class="math"&gt;\(\Delta_i\)&lt;/span&gt; weg
und habe so eine Formel &lt;em&gt;pro Längeneinheit&lt;/em&gt; wie in Wikipedia). Ausserdem
gilt &lt;span class="math"&gt;\(\rho=1/\sigma\)&lt;/span&gt;:&lt;/p&gt;
&lt;p&gt;Aus dem Code abgeleitet:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
\frac{j}{2\pi r}\sqrt{\frac{\omega\mu}{\sigma}}
\end{equation*}
&lt;/div&gt;
&lt;p&gt;Aus Wikipedia:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
\frac{k\rho}{2\pi r}
   = \sqrt{\frac{-j\omega\mu}{\rho}}\frac{\rho}{2\pi r}
   = \frac{1}{2\pi r}\sqrt{-j\omega\mu\rho}
   = \frac{1}{2\pi r}\sqrt{\frac{-j\omega\mu}{\sigma}}
\end{equation*}
&lt;/div&gt;
&lt;p&gt;Das ist ein Faktor von&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
\frac{\sqrt{-j}}{j} = -\frac{1+j}{\sqrt{2}}
\end{equation*}
&lt;/div&gt;
&lt;p&gt;weil &lt;span class="math"&gt;\(\sqrt{-j} = \frac{1-j}{\sqrt{2}}\)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Für die Kelvin-Funktionen gilt die folgende Äquivalenz zu den Bessel
Funktionen &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/07/28/#footnote-3" id="footnote-reference-7" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;3&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; (10.61, &lt;a class="reference external" href="https://dlmf.nist.gov/10.61"&gt;Kelvin Functions&lt;/a&gt;):&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
\ber_v x + j \bei_v x = J_v \left(xe^{3\pi j/4}\right)
                      = e^{v\pi j} J_v \left(xe^{-\pi j / 4}\right)
\end{equation*}
&lt;/div&gt;
&lt;p&gt;Mit den Spezialfällen der Ordnung 0 und 1:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{align*}
\ber_0 x + j \bei_0 x &amp;amp;= e^{0} J_0 \left(xe^{-\pi j / 4}\right)    \\
                      &amp;amp;= J_0 \left(\frac{1-j}{\sqrt{2}}x\right)    \\
\ber_1 x + j \bei_1 x &amp;amp;= e^{j\pi} J_1 \left(xe^{-\pi j / 4}\right) \\
                      &amp;amp;= -J_1 \left(\frac{1-j}{\sqrt{2}}x\right)   \\
\end{align*}
&lt;/div&gt;
&lt;p&gt;Die Wikipedia Formel übergibt &lt;span class="math"&gt;\(kr\)&lt;/span&gt; an die Bessel-Funktionen:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
kr = r\sqrt{\frac{-j\omega\mu}{\rho}} = r\sqrt{-j\omega\mu\sigma}
\end{equation*}
&lt;/div&gt;
&lt;p&gt;während &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Numerical_Electromagnetics_Code"&gt;NEC-2&lt;/a&gt; folgendes übergibt:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
q = r\sqrt{\omega\mu\sigma}
\end{equation*}
&lt;/div&gt;
&lt;p&gt;Diese unterscheiden sich um den Faktor &lt;span class="math"&gt;\(\sqrt{-j}\)&lt;/span&gt;. Das bedeutet
wir übergeben einen Faktor um &lt;span class="math"&gt;\(\sqrt{2}\)&lt;/span&gt; zu groß an die
Bessel-Funktionen. Daraus ergibt sich wegen der Symmetrie der Bessel
Funktionen und er Tatsache dass die Funktionen im Nenner die Ableitung
der Funktionen im Zähler sind, dass das Ergebnis um einen Faktor von
&lt;span class="math"&gt;\(\sqrt{2}\)&lt;/span&gt; zu groß ist was den Faktor im ersten Term ausgleicht.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.runtux.com/de/posts/2024/07/28/"&gt;Weiterlesen…&lt;/a&gt; (2 min verbleiben zum Lesen)&lt;/p&gt;&lt;/div&gt;</description><category>antenna modeling</category><category>deutsch</category><category>documentation</category><category>hamradio</category><category>howto</category><guid>https://blog.runtux.com/de/posts/2024/07/28/</guid><pubDate>Sun, 28 Jul 2024 18:45:00 GMT</pubDate></item><item><title>Skin Effekt Belag und Impedanz</title><link>https://blog.runtux.com/de/posts/2024/07/04/</link><dc:creator>Ralf Schlatterbeck</dc:creator><description>&lt;div&gt;&lt;p&gt;Vor kurzem habe ich für &lt;a class="reference external" href="https://github.com/schlatterbeck/pymininec"&gt;pymininec&lt;/a&gt;, meine Re-Implementierung des
&lt;a class="reference external" href="https://github.com/schlatterbeck/MiniNec"&gt;Mininec&lt;/a&gt; Antennen-Modellierungs-Codes &lt;a class="reference external" href="https://de.wikipedia.org/wiki/Skin-Effekt"&gt;Skin Effekt&lt;/a&gt; Belag (Drähte mit
einem endlichen Widerstand) implementiert. Das Original-Mininec hatte
dieses Feature nicht.&lt;/p&gt;
&lt;p&gt;Um die Implementierung zu verifizieren entschied ich einer uralten
Publikation von R. P. Haviland, W4MB &lt;a class="brackets" href="https://blog.runtux.com/de/posts/2024/07/04/#footnote-1" id="footnote-reference-1" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;1&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; zu folgen wo er unter anderem
den Effekt von Draht-Widerstand auf die Speisepunkt-Impedanz von
Antennen untersucht. Er hat zwei Grafiken wo der Real- und Imaginärteil
der Speisepunkt-Impedanz eines Dipols gegen das Verhältnis von Länge zu
Durchmesser des Drahtes geplottet wird. Er erwähnt zwar &lt;a class="reference external" href="https://github.com/schlatterbeck/MiniNec"&gt;Mininec&lt;/a&gt; im Text
aber bei genauerer Analyse ist es nicht ganz klar ob für die Plots der
Speisepunkt-Impedanz wirklich &lt;a class="reference external" href="https://github.com/schlatterbeck/MiniNec"&gt;Mininec&lt;/a&gt; oder etwas anderes verwendet
wurde. Ich habe versucht, seine Grafiken mit &lt;a class="reference external" href="https://pypi.org/project/PyNEC/"&gt;PyNEC&lt;/a&gt;, einem &lt;a class="reference external" href="https://www.python.org/"&gt;Python&lt;/a&gt;
wrapper für eine C++ Implementierung von &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Numerical_Electromagnetics_Code"&gt;NEC-2&lt;/a&gt;, und meiner &lt;a class="reference external" href="https://github.com/schlatterbeck/pymininec"&gt;pymininec&lt;/a&gt;
Implementierung von &lt;a class="reference external" href="https://github.com/schlatterbeck/MiniNec"&gt;Mininec&lt;/a&gt; zu reproduzieren. Die Resultate von
Haviland haben die gleiche Tendenz wie die folgenden NEC Resultate aber
sind nicht gleich.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.runtux.com/de/posts/2024/07/04/"&gt;Weiterlesen…&lt;/a&gt; (2 min verbleiben zum Lesen)&lt;/p&gt;&lt;/div&gt;</description><category>antenna modeling</category><category>deutsch</category><category>documentation</category><category>hamradio</category><category>howto</category><guid>https://blog.runtux.com/de/posts/2024/07/04/</guid><pubDate>Thu, 04 Jul 2024 17:45:00 GMT</pubDate></item></channel></rss>