회사에 놀고있는 고가의 네트워크분석기(HP 8753ET)를 공부하고, 실무에 스마트하고 활용해 보고싶어서 시도했습니다.
그래서 네트워크분석기의 기초적인 활용과 파이썬 통한 데이터통신 및 시각화 예시가 오늘의 주제 입니다!
네트워크 분석기(VNA, vector network analyzer)는 소스와 수신기가 모두 포함되어 있습니다. 이를 통해 알려진 자극을 사용하여 DUT(device under test, 피시험 장치)를 자극하고 여러 수신기가 응답을 측정 할 수 있습니다. VNA에는 여러 채널과 포트가 있어 수신기가 DUT의 입력과 출력을 동시에 측정 할 수 있습니다. 따라서 VNA는 신호를 측정하는 것이 아니라, 수동 또는 능동 장치의 고유 한 RF 특성을 측정합니다.
먼저 GPIB(물리 인터페이스)를 장비와 PC사이에 연결하고, 파이썬에서 VISA(명령어)를 이용해야합니다.
원래는 장비자체에서 스미스차트 등 plot이 가능하지만, 원격제어를 하여 정확한 수치를 PC로 가져오고 깔끔한 시각화가 이점이라고 할 수 있겠네요.
파이썬을 이용해 측정데이트를 PC로 가져오고,
raw date를 4바이트 단위로 float로 변환해서 복소수(S 파라미터 : 주파수분포상에서 입력전압 대 출력전압의 비)로 변환합니다.
그다음 변환한 S 파라미터값을 scipy-rf 패키지를 이용해 정재파비, 스미스차트, 반사손실, 그룹지연으로 시각화해 보겠습니다. 좀 더 심화학습은 scipy-rf 패키지 문서를 참고해주세요!
Introduction — scikit-rf Documentation
Introduction — scikit-rf Documentation
The central object in skrf is a N-port microwave Network object. A Network can be created in a number of ways, one way is from data stored in a touchstone file. If you cant find ring slot.s2p, then just import it from the skrf.data module. A short descript
scikit-rf.readthedocs.io
위 절차를 수행하는 파이썬 소스코드는 다음과 같습니다.
import visa
import matplotlib.pyplot as plt
import numpy as np
import struct
import skrf as rf
rm = visa.ResourceManager()
rm.list_resources()
inst = rm.open_resource('GPIB0::16::INSTR')
print(inst.query("*IDN?"))
n=float(inst.query("POIN?")) # read in default trace length
fs=float(inst.query("STAR?")) # read in the start f
fe=float(inst.query("STOP?")) # read in the stop f
f=np.linspace(fs, fe, n)
f=f/10**6
# 3E : data transfer using form5
inst.write('CHAN1')
inst.write('RFLP') # selects REFLECTION
# inst.write('TRAP') # selects TRANSMISSN
# inst.write('FORM4') # ASCII
inst.write('FORM5')
inst.write('OUTPDATA;')
x=inst.read_raw()
y=x[4:] # len(y)=1608
z=[y[i:i+4] for i in range(0, len(y), 4)] # len(z)=402 , 4byte float
flts=[]
for flt in z :
s=str(struct.unpack('f', flt))
flts.append(float(s[1:-2]))
plt.figure()
DUT=rf.Network(frequency=f, s=c, z0=50)
DUT.frequency.unit = 'mhz'
rf.stylely()
DUT.plot_s_smith(draw_labels=True, chart_type='z', marker='o')
# DUT.plot_s_db()
# DUT.plot_s_mag()
# DUT.plot_s_deg()
# DUT.plot_s_vswr()
plt.show(block=False)
마지막으로 3가지 DUT의 RF특성을 파이썬을 이용하여 시각화한 결과물입니다.
① 100-1600㎒ Diamond Antenna (초광대역, 수신감도 별로)
※ 그룹지연(GD) : 피 시험 디바이스를 통과하는 신호의 다양한 정현파 성분의 진폭 포락선의 시간 지연이며,
각 성분에 대한 주파수의 함수
② 700㎒ HPF (통과대역은 살리고 그외 대역은 강력하게 억압함)
③ 30㏈ attenuator (반사가 별로 없이 강한 감쇄를 만족시킴)
※ 스미스차트 : 전송 선로(Transmission line)의 편리한 계산을 위해 고안한 것으로,
반사계수와 복소임피던스를 시각화한 원형의 도표( Γ = Γr + jΓi )
이상! 수고하셨습니다!
'파이썬' 카테고리의 다른 글
로또번호 분석 & 제조기 (1) | 2023.01.14 |
---|---|
파이썬으로 별 이름표 붙이기(별주석) (0) | 2022.06.14 |
파이썬 GUI 실행파일 만들기(전력변환기) (0) | 2021.12.03 |
파이썬으로 별자리판 만들기(1) (0) | 2021.01.15 |
구면삼각법과 적도좌표계 (0) | 2020.04.01 |