Skip to content
RFrftools.io
Tools2026년 3월 11일6분 읽기

rftools를 사용하여 파이썬에서 RF 계산을 자동화하세요

rftools Python 패키지를 사용하면 유형이 지정된 API, CLI, 배치 모드 및 비동기식 기능을 사용하여 rftools.io에서 203개의 RF 및 전자 계산기에 프로그래밍 방식으로 액세스할 수 있습니다.

목차

RF 계산을 자동화하는 이유

한 번의 VSWR 계산을 손으로 하는 것은 큰 문제가 아닙니다.하지만 50개의 서로 다른 케이블 길이를 살펴보거나, 12개의 안테나 옵션에 대한 링크 예산을 비교하거나, 다음 설계 검토를 위해 Jupyter 노트북을 준비할 때는 웹 양식을 클릭하는 일이 금방 끝나버립니다.

rftools 파이썬 패키지는 전체 rftools.io 계산기 엔진을 파이썬 환경에 바로 배치합니다.웹 스크래핑이나 창 간에 숫자를 복사할 필요가 없습니다. 적절한 유형의 간단한 함수 호출만 있으면 됩니다.수식이 깨지고 복사-붙여넣기 오류가 있는 스프레드시트를 너무 많이 봤어요.이게 더 깔끔해요.

설치
pip install rftools-io
rftools.io/pricing에서 제공하는 무료 API 키가 필요합니다. 프리 티어에서는 월 5회의 호출을 제공하며, 이는 꽤 괜찮은 수준입니다.이를 실제 워크플로우에 구축하거나 정기적으로 스윕을 실행하는 경우 API 등급은 월 10,000호출로 늘어납니다.대부분의 실제 작업에는 이 정도면 충분합니다.

첫 번째 계산
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.333
rftools.calculate()함수는CalculatorResult객체를 반환합니다.딕셔너리처럼 동작하므로 키로 결과를 가져올 수 있습니다.아주 간단합니다. 계산기 슬러그와 입력값을 입력하면 답을 얻을 수 있습니다.

IDE 자동완성을 위한 타입별 스텁

더 나은 검색 용이성과 적절한 IDE 자동 완성을 원한다면 (그리고 그렇게 해야 한다면) 일반calculate()함수 대신 형식화된 카테고리 모듈을 사용하세요.

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')
rf,pcb,power,signal,antenna,general,motor,protocol,emc,thermal,sensor,unit_conversionaudio등 13개 카테고리를 모두 사용할 수 있습니다.IDE에서 함수 시그니처를 확인할 수 있는데, 이는txPower또는tx_power중 어느 것인지 잊어버릴 때마다 문서를 샅샅이 뒤지는 것보다 훨씬 수월합니다.

배치 모드 (API 티어)

실제 작업에 유용한 정보는 다음과 같습니다.배치 API를 사용하면 단일 HTTP 요청에서 최대 50개의 계산을 실행할 수 있습니다.이는 수십 개의 개별 API 호출을 수행해야 하는 파라미터 스윕에 적합합니다.

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')
출력:
    10m  →  60.0 dB
    50m  →  74.0 dB
   100m  →  80.0 dB
   500m  →  94.0 dB
  1000m  →  100.0 dB
이는 개별 호출을 반복하는 것보다 훨씬 빠르며 요청이 쇄도해도 API를 망치지 않습니다.배치 엔드포인트는 정확히 이런 용도에 맞게 설계되었습니다.

비동기 지원

FastAPI 서비스를 빌드하거나 비동기 주피터 커널에서 작업하는 경우, 파이썬의 async/await 패턴과 잘 어울리는AsyncClient명령이 있습니다.

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())
비동기 클라이언트는 논블로킹 I/O와 함께 내부적으로 동일한 API를 사용하며, 이미 비동기 코드베이스를 사용하고 있다면 모든 것이 일관되게 유지됩니다.

CLI

때로는 터미널에서 빠른 답변이 필요할 때도 있습니다.rftools명령줄 도구는 다음을 처리합니다.

# 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-loss
저는 이미 명령줄을 사용하고 있고 파이썬을 실행하고 싶지 않을 때 주로 온전성 검사에 사용합니다.빠르고 간단한 작업을 자동화하려는 경우 셸 스크립트에서도 유용할 수 있습니다.

오류 처리

라이브러리는 형식화된 예외를 발생시키므로 일반적인 오류 대신 특정 문제를 찾아낼 수 있습니다.

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}')
RateLimitError에서는 재시도 전에 얼마나 기다려야 하는지도 알려주는데, 이는 프로덕션 시스템에 재시도 로직을 구축할 때 유용합니다.ValidationError은 어떤 입력이 잘못되었는지 정확히 알려주므로 추측하지 않아도 됩니다.

계산기 카탈로그 찾아보기

203개의 계산기를 사용할 수 있습니다.이 외에도 툴을 구축해야 하는 경우 프로그래밍 방식으로 나열할 수 있습니다.

# 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})')
이는 어떤 계산기를 사용할 수 있고 어떤 파라미터를 받아들이는지 알아내야 하는 UI 또는 자동화 계층을 구축할 때 특히 유용합니다.메타데이터에는 각 필드에 대한 단위, 기본값 및 설명이 포함됩니다.

실제 사례: 링크 버짓 스윕

다음은 실제 사례입니다. 915MHz 링크의 수신 전력과 거리를 플로팅하는 것입니다.이것은 링크가 최대 범위에서 닫힐지 여부를 결정할 때 Jupyter 노트북에서 할 수 있는 작업입니다.

import numpy as np
import matplotlib.pyplot as plt
from rftools.calculators import rf

distances = np.logspace(1, 4, 40)  # 10m to 10km
rx_powers = []

for d in distances:
    r = rf.rf_link_budget(
        txPower=30,     # dBm
        txGain=6,       # dBi
        rxGain=6,       # dBi
        frequency=915,  # MHz
        distance=float(d),
    )
    rx_powers.append(r['rxPower'])

plt.semilogx(distances, rx_powers)
plt.axhline(-100, color='r', linestyle='--', label='Sensitivity (-100 dBm)')
plt.xlabel('Distance (m)')
plt.ylabel('Received Power (dBm)')
plt.title('915 MHz Link Budget')
plt.legend()
plt.grid(True)
plt.show()
이렇게 하면 링크가 수신기 민감도보다 낮아지는 위치를 보여주는 멋진 로그 플롯이 제공됩니다.송신 전력, 안테나 게인 또는 주파수를 조정하여 그 영향을 즉시 확인할 수 있습니다.손으로 모든 것을 다시 계산하거나 웹 양식을 40번 클릭하는 것보다 훨씬 빠릅니다.

이를 확장하여 페이드 마진을 포함하거나, 다양한 안테나 구성을 비교하거나, 현장 테스트에서 측정한 데이터를 오버레이할 수 있습니다.요점은 스크립트 가능한 환경에서 전체 계산기 엔진을 사용할 수 있으므로 실제로 필요한 모든 분석 도구를 구축할 수 있다는 것입니다.

시작하기pip install rftools-io과 함께 설치하십시오.소스 코드와 이슈 트래커는 github.com/rftools/rftools-py에 있습니다.rftools.io/가격 책정으로 이동하여 API 키를 받고 가격 책정 등급을 확인하세요.프리 티어는 시험해 보기에는 괜찮지만, 진지한 작업을 하고 있다면 유료 티어는 두 번 생각할 필요가 없을 만큼 충분히 저렴합니다.

관련 기사