Automatisieren Sie HF-Berechnungen in Python mit rftools
Das rftools-Python-Paket bietet Ihnen programmatischen Zugriff auf 203 HF- und Elektronikrechner von rftools.io — mit einer typisierten API, CLI, Batch-Modus und Async.
Inhalt
- Warum HF-Berechnungen automatisieren?
- Installation```bash
- Deine erste Berechnung```python
- Getippte Stubs für die automatische IDE-Vervollständigung
- Batch-Modus (API-Tier)
- Asynchrone Unterstützung
- CLI
- Fehlerbehandlung
- Den Taschenrechner-Katalog durchsuchen
- Ein praktisches Beispiel: Link Budget Sweep
- Erste Schritte
Warum HF-Berechnungen automatisieren?
Schauen Sie, eine VSWR-Berechnung von Hand durchzuführen ist keine große Sache. Aber wenn Sie 50 verschiedene Kabellängen abfragen, die Verbindungsbudgets für ein Dutzend Antennenoptionen vergleichen oder ein Jupyter-Notizbuch für Ihre nächste Designüberprüfung zusammenstellen, wird das Durchklicken von Webformularen schnell langweilig.
Das Python-Paket rftools integriert die gesamte rftools.io Calculator-Engine direkt in Ihre Python-Umgebung. Kein Web-Scraping, kein Kopieren von Zahlen zwischen Fenstern — nur einfache Funktionsaufrufen mit den richtigen Typen. Ich habe zu viele Tabellen mit fehlerhaften Formeln und Fehlern beim Kopieren und Einfügen gesehen. Das ist sauberer.
Installationpip install rftools-io
Sie benötigen einen kostenlosen API-Schlüssel von rftools.io/pricing. Im kostenlosen Tarif erhalten Sie 5 Aufrufe pro Monat, was in Ordnung ist, um die Reifen zu verlassen. Wenn Sie dies in einen tatsächlichen Workflow einbauen oder regelmäßig Sweeps ausführen, erhöht sich die API-Stufe auf 10.000 Aufrufe/Monat. Das reicht für die meisten realen Arbeiten.
pip install rftools-ioDeine erste Berechnungimport rftools
result = rftools.calculate('vswr-return-loss', {'vswr': 2.5})
print(f'Return Loss: {result["returnLoss"]:.2f} dB') # 9.54 dB
print(f'Reflection Coeff: {result["reflectionCoeff"]:.3f}') # 0.333
Die Funktionrftools.calculate()gibt einCalculatorResult-Objekt zurück. Sie verhält sich wie ein Wörterbuch, sodass Sie Ergebnisse per Schlüssel abrufen können. Ganz einfach: Sie geben den Taschenrechner und ein Diktat mit Eingaben ein und Sie erhalten Ihre Antworten zurück.
import rftools
result = rftools.calculate('vswr-return-loss', {'vswr': 2.5})
print(f'Return Loss: {result["returnLoss"]:.2f} dB') # 9.54 dB
print(f'Reflection Coeff: {result["reflectionCoeff"]:.3f}') # 0.333Getippte Stubs für die automatische IDE-Vervollständigung
Wenn Sie eine bessere Auffindbarkeit und eine korrekte IDE-Autovervollständigung wünschen (und das sollten Sie), verwenden Sie die typisierten Kategorienmodule anstelle der generischencalculate()-Funktion:
from rftools.calculators import rf, antenna, pcb
# Parameter names and defaults match what you see on the rftools.io web UI
fspl = rf.free_space_path_loss(frequency=2400.0, distance=100.0)
print(f'FSPL: {fspl["pathLoss"]:.1f} dB') # 80.0 dB
dipole = antenna.dipole_antenna(frequency=433.0)
print(f'Dipole length: {dipole["length"]:.0f} mm')Alle 13 Kategorien sind verfügbar:rf,pcb,power,signal,antenna,general,motor,protocol,emc,thermal,sensor,unit_conversionundaudio. Ihre IDE zeigt Ihnen die Funktionssignaturen an. Das ist besser, als jedes Mal, wenn Sie vergessen, ob es sich umtxPowerodertx_powerhandelt, in der Dokumentation zu stöbern.
Batch-Modus (API-Tier)
Hier werden die Dinge für echte Arbeit nützlich. Mit der Batch-API können Sie bis zu 50 Berechnungen in einer einzigen HTTP-Anfrage ausführen. Dies ist perfekt für Parameter-Sweeps, bei denen Sie sonst Dutzende einzelner API-Aufrufe tätigen würden:
import rftools
client = rftools.Client(api_key='rfc_live_xxx')
# or just: export RFTOOLS_API_KEY=rfc_live_xxx
distances = [10, 50, 100, 500, 1000]
results = client.batch([
('free-space-path-loss', {'frequency': 2400, 'distance': d})
for d in distances
])
for d, r in zip(distances, results):
if r.ok:
print(f'{d:>6}m → {r.values["pathLoss"]:.1f} dB')Leistung: §4 §
Das ist viel schneller als das Durchlaufen einzelner Aufrufe und überlastet die API nicht mit einer Flut von Anfragen. Der Batch-Endpunkt ist genau für solche Dinge konzipiert.
Asynchrone Unterstützung
Wenn Sie einen FastAPI-Dienst erstellen oder in einem asynchronen Jupyter-Kernel arbeiten, gibt es einenAsyncClient, der gut mit Pythons async/await-Muster zusammenspielt:
import asyncio
import rftools
async def main():
async with rftools.AsyncClient(api_key='rfc_live_xxx') as client:
result = await client.calculate('rf-link-budget', {
'txPower': 20,
'txGain': 6,
'rxGain': 3,
'frequency': 2400,
'distance': 500,
})
print(f'Received power: {result["rxPower"]:.1f} dBm')
asyncio.run(main())Der Async-Client verwendet dieselbe API unter der Haube, nur mit nicht blockierenden I/O. Wenn Sie sich bereits in einer asynchronen Codebasis befinden, bleibt dadurch alles konsistent.
CLI
Manchmal braucht man einfach eine schnelle Antwort im Terminal. DasrftoolsKommandozeilentool erledigt das:
# Single calculation
rftools calc vswr-return-loss --vswr 2.5
# JSON output — pipe to jq or whatever
rftools calc vswr-return-loss --vswr 2.5 --json | jq '.values.returnLoss'
# List available calculators in a category
rftools list --category rf
# Show what inputs and outputs a calculator expects
rftools info free-space-path-lossIch verwende das hauptsächlich für Plausibilitätsprüfungen, wenn ich bereits in der Befehlszeile bin und Python nicht starten möchte. Es ist auch praktisch in Shell-Skripten, wenn Sie etwas Schnelles und Schmutziges automatisieren.
Fehlerbehandlung
Die Bibliothek löst typisierte Ausnahmen aus, sodass Sie spezifische Probleme statt generischer Fehler erkennen können:
from rftools.exceptions import AuthError, RateLimitError, ValidationError
try:
result = client.calculate('vswr-return-loss', {'vswr': 2.5})
except RateLimitError as e:
print(f'Quota exceeded. Retry after {e.retry_after}s')
except AuthError:
print('Invalid API key')
except ValidationError as e:
print(f'Bad inputs: {e.detail}')RateLimitErrorsagt dir sogar, wie lange du warten musst, bevor du es erneut versuchst, was nützlich ist, wenn du Wiederholungslogik in ein Produktionssystem einbaust. DerValidationErrorsagt dir genau, welche Eingabe falsch war, sodass du nicht beim Raten feststeckst.
Den Taschenrechner-Katalog durchsuchen
Es sind 203 Taschenrechner verfügbar. Sie können sie programmgesteuert auflisten, wenn Sie darauf aufbauende Tools erstellen müssen:
# All calculators
calcs = rftools.list_calculators()
print(f'{len(calcs)} calculators available')
# Filter by category
rf_calcs = rftools.list_calculators(category='rf')
for c in rf_calcs:
print(f'{c.slug}: {c.title}')
# Inspect a specific calculator's inputs and outputs
info = rftools.get_calculator('noise-figure-cascade')
for field in info.inputs:
print(f' in: {field.id} ({field.unit})')
for field in info.outputs:
print(f' out: {field.id} ({field.unit})')Dies ist besonders nützlich, wenn Sie eine Benutzeroberfläche oder eine Automatisierungsebene erstellen, die herausfinden muss, welche Taschenrechner verfügbar sind und welche Parameter sie akzeptieren. Die Metadaten enthalten Einheiten, Standardwerte und Beschreibungen für jedes Feld.
Ein praktisches Beispiel: Link Budget Sweep
Hier ist ein Beispiel aus der Praxis: Darstellung der Empfangsleistung im Vergleich zur Entfernung für eine 915-MHz-Verbindung. Das ist die Art von Dingen, die Sie in einem Jupyter-Notebook tun würden, wenn Sie abschätzen, ob eine Verbindung bei Ihrer maximalen Reichweite geschlossen wird.
§9 §
Dadurch erhalten Sie ein nettes logarithmisches Diagramm, das zeigt, wo Ihr Link unter die Empfängerempfindlichkeit fällt. Sie können die Sendeleistung, die Antennenverstärkung oder die Frequenz anpassen und sofort sehen, wie sich das auswirkt. Viel schneller, als alles von Hand neu zu berechnen oder 40 Mal durch ein Webformular zu klicken.
Sie könnten dies um den Fade-Rand erweitern, verschiedene Antennenkonfigurationen vergleichen oder Messdaten aus Feldtests überlagern. Der Punkt ist, dass Ihnen die gesamte Rechner-Engine in einer skriptfähigen Umgebung zur Verfügung steht, sodass Sie alle Analysetools erstellen können, die Sie tatsächlich benötigen.
Erste Schritte
Installieren Sie es mitpip install rftools-io. Der Quellcode und der Issue Tracker befinden sich unter github.com/rftools/rftools-py. Gehen Sie zu rftools.io/pricing, um einen API-Schlüssel zu erhalten und die Preisstufen zu sehen. Die kostenlose Stufe ist in Ordnung, um Dinge auszuprobieren, aber wenn Sie ernsthaft arbeiten, ist die kostenpflichtige Stufe billig genug, dass Sie nicht zweimal darüber nachdenken werden.
Verwandte Artikel
Sizing a 9600-baud UHF Downlink for a 3U CubeSat: Full Walkthrough
End-to-end link budget for an amateur-band 3U cubesat: EIRP, ground-station G/T, ITU-R propagation losses, and Monte Carlo availability. Uses the Amateur CubeSat preset.
29. Apr. 2026
Satellite CommunicationsMigrating from STK Cloud: Free Alternatives for Link Budget and Orbit Analysis
Ansys is sunsetting STK Cloud in March 2026. Here are the free open-source replacements for the two things it did best — ITU-R link budgets and orbital pass prediction.
29. Apr. 2026
RF EngineeringRF Power Density: Calculating EM Exposure
Master RF power density calculations with real-world examples and critical engineering insights for wireless and electromagnetic safety analysis.
29. Apr. 2026