E5080B sample
Appearance
Use the following Python class to get data from E5080B:
# -*- coding: utf-8 -*-
"""
Created on Fri Jul 19 13:46:26 2024
@author: lpd
"""
import pyvisa as visa
rm = visa.ResourceManager()
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
class VNA:
def __init__(self, ip_address = "TCPIP0::k-e5080b-00152::hislip0::INSTR", eth_com=False, usb_address = "USB0::0x2A8D::0x7901::MY59400152::INSTR", usb_com=False):
usb_com = True
if usb_com:
self.vna = rm.open_resource(usb_address)
elif eth_com:
self.vna = rm.open_resource(ip_address)
def get_data_single_channel(self, folderName_on_VNA, fileName):
self.vna.write('MMEM:STOR:DATA "%s","%s","%s","%s",%d' % ("D:\\Data_LPD\\" + folderName_on_VNA + "\\" + fileName + ".csv", "CSV Formatted Data", "displayed", "DB", -1))
self.vna.write("MMEMory:TRANsfer?" + " 'D:\\Data_LPD\\" + folderName_on_VNA + '\\' + fileName + ".csv'" )
my_data_byte = self.vna.read_raw()
my_data_string = my_data_byte.decode("utf-8")
my_data_string = my_data_string.split("Freq(Hz),", 1)[1]
my_data_string = my_data_string.split("END")[0]
column_names = my_data_string.split("\r\n")[0].split(',')
my_data_string = my_data_string.split("\r\n", 1)[1]
my_data_array = np.array(my_data_string.split("\r\n"))
my_data_array = np.array(list(filter(None, my_data_array)))
data_array = np.zeros((len(my_data_array), 1+len(column_names)))
for idx in range(0, len(my_data_array)):
data_array[idx] = my_data_array[idx].split(',')
for idx in range(0, len(column_names)):
if "DEG" in column_names[idx]:
data_array[:, 1+idx] = data_array[:, 1+idx]/180*np.pi
column_names[idx] = column_names[idx].replace("DEG", "RAD")
df = pd.DataFrame(data = data_array,
columns = ["Freq [Hz]"] + column_names)
self.df = df
return df
def plot_data(self):
plt.plot(self.df['Freq [Hz]']/1e9, self.df['S21(DB)'])
plt.xlabel("Frequency [GHz]")
plt.ylabel("S21 [dB]")